Задать вопрос
@hancack

Как правильно настроить OpenVPN сервер в связке с Bind9 в качестве приватного DNS сервера?

Всем привет! Я столкнулся с проблемой в процессе настройки связки OpenVPN и Bind9 на сервере. Борюсь с этой проблемой уже не меньше недели. Цель: сделать VPN-ноду и избежать DNS утечек посредством использования Bind9 в качестве приватного DNS сервера. OpenVPN сервер настроился без особых сложностей, но вот при попытке поднять DNS сервер начались проблемы. При использовании команды dig с каким-либо доменом все в порядке, пинг ожидаемый, IP адреса отправляются клиенту. Вот лог запроса со стороны сервера при выполнении "dig @10.8.0.1 ya.ru":
15:30:47.728737 IP 10.8.0.78.54465 > 10.8.0.1.domain: 18060+ [1au] A? ya.ru. (34)
15:30:47.729432 IP 10.8.0.1.domain > 10.8.0.78.54465: 18060 1/2/5 A 87.250.250.242 (201)

Но если воспользоваться командой wget или curl - происходит долгая задержка, bind9 отрабатывает как-то неправильно, и в результате клиент обращается к DNS серверам провайдера. В данном случае была выполнена команда "wget youtube.com", и вот что происходило со стороны сервера:
15:35:55.463780 IP 10.8.0.78.33465 > 10.0.8.1.domain: 9299+ A? youtube.com. (29)
15:35:55.463932 IP 10.8.0.78.33465 > 10.0.8.1.domain: 47722+ AAAA? youtube.com. (29)
15:36:02.336465 IP 10.8.0.78.46473 > 10.0.8.1.domain: 47830+ A? www.youtube.com. (33)
15:36:02.336828 IP 10.8.0.78.46473 > 10.0.8.1.domain: 41320+ AAAA? www.youtube.com. (33)

То же самое происходит при попытке загрузить веб-страницу, на этап DNS resolution уходит больше 5 секунд. Как я понимаю, клиент пытается получить информацию от bind9, но не получает её, и обращается к DNS серверам провайдера, тем самым создавая DNS утечку.

OpenVPN конфиг сервера:
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key  
dh dh2048.pem
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 10.0.8.1"
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
keepalive 10 120
tls-auth ta.key 0 
cipher AES-256-CBC
auth SHA256
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
verb 3
explicit-exit-notify 1
management 127.0.0.1 7505
ccd-exclusive
client-config-dir /etc/openvpn/ccd


OpenVPN конфиг клиента:
client
dev tun
proto udp
remote 123.123.123.123 1194 # IP ноды
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
auth SHA256
key-direction 1
verb 3


Bind9 конфиг:
acl vpn {10.8.0.0/24; 127.0.0.1;};
options {
  directory "/var/cache/bind";
  allow-query {vpn;};
  max-ncache-ttl 3600;
  max-cache-ttl 3600;
  dnssec-validation no;
  auth-nxdomain no;
  listen-on-v6 {none;};
};

Система - Debian 10. Если кто-то сталкивался с такой же проблемой, подскажите пожалуйста в чем проблема, или хотя бы в какую сторону начинать копать. Перепробовал множество разных конфигураций, несколько раз подчистую сновил bind и ставил заново, но результат один и тот же. К слову, тестировалось как со включенным фаерволом, так и с выключенным. Спасибо!
  • Вопрос задан
  • 812 просмотров
Подписаться 1 Сложный 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
SignFinder
@SignFinder
Wintel\Unix Engineer\DevOps
У вас в конфиге bind отсутствует параметр allow-recursion. Поэтому клиенты не могут рекурсивно запросы через него делать.

И уже не в качестве ответа, а в качестве совета - разверните (можно прямо в docker за пару минут) Adguard Home.
https://adguard.com/ru/blog/introducing-adguard-ho...
Будет вам свой DNS, в том числе новых безопасных видов плюс blacklist от рекламы.

Боитесь за приватность - тогда поставьте специализированный для кеша и рекурсивных запросов unbound
https://github.com/NLnetLabs/unbound, не связывайтесь с bind для вашей задачи.
Ответ написан
@q2digger
никого не трогаю, починяю примус
1. рекурсия в бинде разрешена для клиентов?
2. клиентам разрешено обращаться к кэшу? опции allow-query и allow-query-cache

еще - смотрите логи бинда, в его рабочем каталоге, если не включены логи - включите и смотрите. какие запросы, какая реакция.
Ответ написан
Комментировать
IlyaEvseev
@IlyaEvseev
Opensource geek
Отдельный совет - не использовать BIND. Слишком ненадёжный, слишком небезопасный.
Для простоты и компактности есть dnsmasq, для производительности и гибкости Unbound.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы