Назад | Перейти на главную страницу

Как правильно настроить использование DNS в Ubuntu? Авторитетные ответы без флага RA игнорируются

У меня есть последняя чистая 64-разрядная версия Ubuntu 14.04.1 с официального сайта, установленная в Virtualbox. Я подключаюсь к сети VPN с помощью vpnc, который устанавливает 2 DNS-сервера с использованием DHCP:

user@virtual:~$ cat /etc/resolv.conf 
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 10.88.94.1
nameserver 8.8.8.8
nameserver 10.40.0.1

куда 10.88.94.1 и 8.8.8.8 возвращаются vpn dhcp и 10.40.0.1 возвращается lan dhcp. Первый DNS-сервер, возвращаемый vpn dhcp, настроен как авторитетный нерекурсивный сервер имен для некоторых внутренних имен.

Проблема в том, что Ubuntu каким-то образом игнорирует авторитетный флаг и отклоняет действительный ответ, поскольку он нерекурсивен:

user@virtual:~$ nslookup
> video.something.com
;; Got recursion not available from 10.88.94.1, trying next server
Server:     8.8.8.8
Address:    8.8.8.8#53

Non-authoritative answer:
Name:   video.something.com
Address: 180.112.94.1

Поскольку tcpdump ясно показывает, что ответ от первого DNS-сервера имеет установленный флаг «авторитетный», но каким-то образом он игнорируется ('*' во втором ответе означает «авторитетный», '-' означает «нерекурсивный»):

13:23:44.505098 IP 10.40.130.209.44159 > 10.88.94.1.domain: 63790+ A? video.something.com. (32)
13:23:44.506285 IP 10.88.94.1.domain > 10.40.130.209.44159: 63790*- 1/0/0 A 10.88.94.12 (48)
13:23:44.506390 IP 10.40.130.209.45437 > 8.8.8.8.domain: 63790+ A? video.something.com. (32)
13:23:44.608414 IP 8.8.8.8.domain > 10.40.130.209.45437: 63790 1/0/0 A 180.112.94.1 (48)

Такая же настройка работает должным образом (используется первый результат DNS) как в Windows, так и в OSX. Но не в Ubuntu. Могу ли я это исправить в Ubuntu, чтобы авторитетные ответы обрабатывались правильно, независимо от «нерекурсивного» флага, или он полностью сломан и где я ничего не могу сделать?

Тип запасного поведения, которого вы, кажется, ожидаете, не является частью того, как должен работать DNS. Ко второму серверу имен в resolv.conf следует обращаться только в том случае, если первый не отвечает или возникает какая-то сетевая ошибка другого типа.

Microsoft явно сделала свое дело, и это, безусловно, полезно для того, что вы пытаетесь сделать, но на него не следует полагаться при настройке VPN. У Microsoft также есть идея использования разного разрешения имен для разных сетевых интерфейсов.

Если вы не можете повлиять на конфигурацию VPN, лучше всего в Linux может быть настройка собственного сервера имен, который решает, куда перенаправлять запросы по домену.

Чтобы рекурсия DNS работала на сервере bind9 Ubuntu, убедитесь, что следующие строки находятся в /etc/bind/ named.conf.options на DNS-сервере:

    recursion yes;
    allow-recursion { any; };

При этом вы утверждаете, что у вас нет доступа к DNS-серверам. В таком случае рассматривали ли вы возможность изменения порядка ваших DNS-серверов? Например, если вы возьмете последнюю запись DNS ...

nameserver 10.40.0.1

и поместите его в файл /etc/resolvconf/resolv.conf.d/head, затем запустите resolvconf -u , запись будет автоматически добавлена ​​в начало файла /etc/resolv.conf. Это делает 10.40.0.1 первым DNS-сервером, который будет использоваться, а затем он проверяет записи VPN после этого (при условии, что 10.40.0.1 допускает рекурсию DNS).