
Я использую pfSense с OpenVPN уже больше десяти лет. Также интенсивно использовал многие сервисы от pfSense (DNS resolver, DHCP, HA Proxy, SquidGuard, брандмауэр, конечно...) Короче говоря - опыт есть. Но сейчас решил попробовать заменить OpenVPN на WireGuard...
Я создал туннель на стороне pfSense, настроил клиент Windows, и он успешно подключается. Я могу получить доступ (почти) ко всем серверам за pfSense. Но затем я заметил что-то очень, очень странное в поведении DNS. Мне придется быстро описать свою среду, чтобы объяснить проблему. Итак, у меня есть:
- Раздельная настройка DNS (внутренний DNS преобразуется в частные адреса, а публичный DNS преобразуется в публичные).
- Внутренние DNS-серверы — это два контроллера домена Zentyal (в сети за pfSense). Они являются авторитетными серверами имен для основного домена "mydomain.com".
- Эти два сервера настроены на пересылку DNS-запросов для других доменов в DNS Resolver в pfSense. (У меня в DNS Resolver настроено еще несколько доменов, потому что он намного удобнее и лучше, чем Zentyal DNS.)
- Наконец, DNS Resolver перенаправляет запросы для доменов, которые не преобразованы, на внешний DNS.
DNS request -> Zentyal DNS (172.16.0.1) -> pfSense DNS Resolver (172.16.1.1) -> External DNS
Признаю, это немного странная установка, но она работала много лет.
Когда я подключаю свою машину Windows 11 с помощью OpenVPN, я могу сделать это nslookup
для любого домена (главного или другого) без каких-либо проблем. Но когда я отключаю OpenVPN и подключаю WireGuard, я могу запросить толькоглавныйдомен:
nslookup web.mydomain.com
Server: zentyal-1.mydomain.com
Address: 172.16.0.1
Name: web.mydomain.com
Address: 172.16.2.5
Но когда я запрашиваю любой другой домен (обрабатываемый DNS Resolver или внешним DNS), я получаю ошибку «запрос отклонен»:
nslookup google.com
Server: zentyal-1.mydomain.com
Address: 172.16.0.1
*** zentyal-1.mydomain.com can't find google.com: Query refused
Тот же самый запрос, когда я подключаюсь через OpenVPN:
nslookup google.com
Server: zentyal-1.mydomain.com
Address: 172.16.0.1
Non-authoritative answer:
Name: google.com
Addresses: 2a00:1450:4001:80f::200e
142.250.185.142
Очевидно, в обоих случаях один и тот же DNS-сервер (zentyal-1) получает запрос, и один и тот же сервер отвечает. Один раз "query denied", а другой раз successful response. Похоже, DNS Resolver отказывается отвечать Zentyal, когда я подключен через WireGuard.
Конфигурация моего клиента WireGuard:
[Interface]
PrivateKey = XXXX=
Address = 172.16.26.2/24
DNS = 172.16.0.1
[Peer]
PublicKey = YYYYY=
AllowedIPs = 172.16.0.0/16
Endpoint = 1.2.3.4:51820
И это еще не конец странного поведения. Я сталкиваюсь с проблемой "query denied" только в командной строке, с nslookup
. Похоже, что браузеры вообще не затронуты этой проблемой. ( nslookup
не могу получить google.com, но Firefox открывает его без проблем.) Сначала я думал, что это какая-то утечка DNS, и что браузеры запрашивают какой-то локальный DNS. Но к моему полному удивлению, похоже, что это не так. Браузер получает ответ DNS для домена, обрабатываемого DNS Resolver, с частным IP, что означает, что ответдолжен был прийтииз-за pfSense (из DNS Resolver)...
Ааааааааа
Есть идеи? Извините за длинный текст... Спасибо!