Приоритет DNS-сервера VPN
Есть ли способ назначить приоритеты конкретному DNS-серверу только при подключении к VPN (OpenVPN) через Network Manager или один из его файлов конфигурации?
У меня VPN192.168.1.*
) Я часто подключаюсь к тому, что имеет DNS (192.168.1.53
) настроен для разрешения имен хостов в форме *.internal.example.com
в своей сети. Мой локальный роутер (192.168.0.1
) имеет DD-WRT с настройкой DNS Google (они не являются строго необходимыми).
Я заменил systemd /etc/resolv.conf
заглушка с символической ссылкой на /run/systemd/resolve/resolv.conf
так что имена хостов будут фактически разрешаться с использованием DNS-сервера VPN. Вчера все работало нормально, потому что DNS-сервер VPN был в начале списка.
# /etc/resolv.conf -> /run/systemd/resolve/resolv.conf
# This file is managed by man:systemd-resolved(8). Do not edit.
# ...
nameserver 192.168.1.53
nameserver 192.168.0.1
nameserver 8.8.8.8
# Too many DNS servers configured, the following entries may be ignored.
nameserver 8.8.4.4
search Home internal.example.com
Однако, когда я подключился сегодня, записи DNS были переупорядочены.
# /etc/resolv.conf -> /run/systemd/resolve/resolv.conf
# This file is managed by man:systemd-resolved(8). Do not edit.
# ...
nameserver 192.168.0.1
nameserver 8.8.8.8
nameserver 8.8.4.4
# Too many DNS servers configured, the following entries may be ignored.
nameserver 192.168.1.53
search Home internal.example.com
Порядок часто меняется после перезагрузки. Иногда при переподключении к VPN я замечаю изменения порядка (после возникновения проблемы с разрешением).
systemd-resolve
работает просто отлично и может разрешить хосты используя соответствующий DNS-сервер.
$ systemd-resolve --status --no-pager
Global
DNSSEC NTA: ...
Link 10 (tun0)
Current Scopes: DNS
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNS Servers: 192.168.1.53
DNS Domain: internal.example.com
Link 2 (eno1)
Current Scopes: DNS
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNS Servers: 192.168.0.1
8.8.8.8
8.8.4.4
192.168.1.53
DNS Domain: Home
$ systemd-resolve srv1.internal.example.com
srv1.internal.example.com: 192.168.1.113
-- Information acquired via protocol DNS in 2.1ms.
-- Data is authenticated: no
ping
, nslookup
, а также ssh
все терпят неудачу все же.
$ ping srv1.internal.example.com
ping: srv1.internal.example.com: Name or service not known
$ nslookup srv1.internal.example.com
Server: 192.168.0.1
Address: 192.168.0.1#53
** server can't find srv1.internal.example.com: NXDOMAIN
$ ssh srv1.internal.example.com
ssh: Could not resolve hostname srv1.internal.example.com: Name or service not known
Несколько заметок.
Я подключаюсь к VPN через Network Manager. У меня есть DNS VPN, указанный вручную на VPN: IPv4 > DNS Servers.
Я попытался использовать отдельное проводное Ethernet-соединение, настроенное для DNS VPN в разделе: IPv4> Другие DNS-серверы.
2 ответа
Как вы принимаете с помощью dnsmasq, как насчет этого:
- Укажите свой resolv.conf на 127.0.0.1 (сервер имен 127.0.0.1)
- Попробуйте этот конфиг на вашем dnsmasq:
server=/internal.example.com/192.168.1.53
server=8.8.8.8
Это будет использовать 192.168.1.53 для домена "internal.example.com" и 8.8.8.8 для всего остального.
Посмотрите на опцию "-S, --local, --server=" на странице справки dnsmasq.
Обновление: Вы также можете отключить DHCP, чтобы избежать конфликтов с локальным маршрутизатором. Возможно прослушивание только на интерфейсе lo (127.0.0.1).
Можно сделать приоритет DNS с помощью
nmcli -p соединение изменить MY_VPN_CONNECTION ipv4.dns-priority -42
нашел это здесь https://github.com/systemd/systemd/issues/6076
Благодаря ответу JucaPirama на нужное мне направление, это моя последняя настройка с использованием dnsmasq перед systemd-resolved.
Отключитесистемный DNS-сервер заглушки с разрешением. В /etc/systemd/resolved.conf
менять
#DNSStubListener=yes
в
DNSStubListener=no
Перезапустите systemd-resolved.
sudo systemctl restart systemd-resolved
Установите dnsmasq.
sudo apt-get install dnsmasq
Настройка dnsmasq. В /etc/dnsmasq.conf
используйте файл resolv.confsystemd-resolved, изменив
#resolv-file=/etc/resolv.conf
в
resolv-file=/run/systemd/resolve/resolv.conf
Настройте DNS-сервер VPN только для своих доменов, добавив
server=/internal.example.com/192.168.1.53
Отключите DHCP, чтобы предотвратить возможные конфликты путем изменения
#no-dhcp-interface=
в
no-dhcp-interface=
Перезапустите dnsmasq.
sudo systemctl restart dnsmasq
Unlink /etc/resolv.conf
из конфигурации systemd-resolved.
sudo unlink /etc/resolv.conf
редактировать /etc/resolv.conf
использовать dnsmasq. Этот шаг может не понадобиться, потому что Network Manager в какой-то момент переопределил его, чтобы указать на 127.0.0.53 в любом случае.
nameserver 127.0.0.53