Приоритет 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, как насчет этого:

  1. Укажите свой resolv.conf на 127.0.0.1 (сервер имен 127.0.0.1)
  2. Попробуйте этот конфиг на вашем 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
Другие вопросы по тегам