Я использую рекурсивный DNS-сервер на Unbound в тюрьме на FreeBSD с pf в качестве брандмауэра. Бег drill @xxx.xxx.xxx.xxx example.com
(где xxx.xxx.xxx.xxx - это IP-адрес сервера) на моем локальном компьютере дает мне успешный поиск.
Однако, если я попробую то же самое на самом сервере, как в тюрьме, так и на хосте ...
# drill @localhost example.com
Error: error sending query: Could not send or receive, because of network error
# drill @xxx.xxx.xxx.xxx example.com
Error: error sending query: Could not send or receive, because of network error
# drill @127.0.0.1 example.com
Error: error sending query: Could not send or receive, because of network error
# drill @10.0.0.1 example.com
Error: error sending query: Could not send or receive, because of network error
у меня есть pass quick on lo0 all
в моем pf.conf
Вот мой соответствующий ifconfig:
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
inet 127.0.0.1 netmask 0xff000000
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
lo1: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
inet 10.0.0.1 netmask 0xffffff00
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
Джейл DNS работает под 10.0.0.1
Пара мыслей с моей стороны: Unbound совершенно точно настроен правильно. Интерфейс уже 0.0.0.0, и у меня есть правила контроля доступа для 10.0.0.0/16 и 127.0.0.0/8 (и, конечно, IP моего локального компьютера). Кроме того, попытка сверления привела бы к простому отказу, если что-то было неисправно. Так я думаю, это как-то связано с pf? Я, наверное, упускаю что-то маленькое и очевидное, но не могу понять, что именно.
То, чего я хотел бы добиться, было бы успешным # drill @localhost example.com
на сервере, поэтому я могу заменить свои серверы имен resolv.conf на 127.0.0.1
Редактировать: Я провел некоторое тестирование с помощью netcat, выполняя # nc -4 -vv localhost 53
дает мне тайм-аут. Использование udp в качестве протокола с # nc -4 -w 10 -vv -u localhost 53
однако это не так. Бег # pfctl -vnf /etc/pf.conf
, вот два перенаправления в тюрьму:
rdr pass on vtnet0 inet proto udp from any to any port = domain -> 10.0.0.1 port 53
rdr pass on vtnet0 inet proto tcp from any to any port = domain -> 10.0.0.1 port 53
После еще нескольких тестов правил pf я ненадолго пропустил весь трафик и понял, что ошибка заключалась в том, что pass quick on lo0 all
в pf.conf джейл работает под lo1.
я добавил pass quick on lo1 all
и теперь это работает.
Также обратите внимание, что из тюрьмы вы должны запрашивать IP-адрес тюрьмы, а не localhost. Итак, в файле resolv.conf:
nameserver 10.0.0.1