Я использую openconnect для подключения к vpn и vpn-slice для разделения vpn. openconnect изменяет /etc/resolv.conf после запуска, но это не помогает при разрешении доменных имен vpn.
Чтобы обойти это, я настроил NetworkManager на использование dnsmasq для разрешения доменных имен.
/etc/NetworkManager/NetworkManager.conf
[main]
plugins=ifupdown,keyfile
dns=dnsmasq
[ifupdown]
managed=false
[device]
wifi.scan-rand-mac-address=no
И настроил dnsmasq для использования внутреннего vpn dns для разрешения пользовательских доменных имен.
/etc/NetworkManager/dnsmasq.d/myvpn
server=/.vpn.domain/192.168.213.104
И это отлично работает на Ubuntu 18.04
Я пытался сделать то же самое с другим ноутбуком, но потерпел неудачу. На другом ноутбуке установлена Ubuntu 20.04.
Там доменные имена не разрешаются, хотя конфигурация такая же (если я что-то не совсем упустил, то очень надеюсь). Если я добавляю доменные имена в /etc/hosts, все начинает работать. Но имен много, поэтому я бы предпочел использовать dnsmasq
Вот разница между этими двумя машинами
С Ubuntu 18.04, где все работает, /etc/resolv.conf и /run/NetworkManager/resovl .conf идентичны и содержат только следующие строки
/etc/resolv.conf
#Generated by NetworkManager
nameserver 127.0.1.1
, который является dnsmasq
В Ubuntu 20.04 файлы /run/Networkmanager/resolv.conf и /etc/resolv.conf отличаются. /etc/resolv.conf содержит много всего, а /run/NetworkManager/resolv.conf содержит те же строки, что и в Ubuntu 18.04
/etc/resolv.conf
This file is managed by man:systemd-resolved(8). Do not edit.
#
# This is a dynamic resolv.conf file for connecting local clients to the
# internal DNS stub resolver of systemd-resolved. This file lists all
# configured search domains.
#
# Run "resolvectl status" to see details about the uplink DNS servers
# currently in use.
#
# Third party programs must not access this file directly, but only through the
# symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way,
# replace this symlink by a static file or a different symlink.
#
# See man:systemd-resolved.service(8) for details about the supported modes of
# operation for /etc/resolv.conf.
nameserver 127.0.0.53
options edns0 trust-ad
, который является systemd-resolved
/run/NetworkManager/resolv.conf
#Generated by NetworkManager
nameserver 127.0.1.1
, который является dnsmasq
Также с Ubuntu Каталог 18.04 /etc/dnsmasq.d существует и содержит два файла
/etc/dnsmasq.d/network-manager
# Tell any system-wide dnsmasq instance to make sure to bind to interfaces
# instead of listening on 0.0.0.0
# WARNING: changes to this file will get lost if network-manager is removed.
bind-interfaces
/etc/dnsmasq.d/ubuntu-fan
# ensure that any system dnsmasq does not bind to fan-*
bind-interfaces
except-interface=fan-*
С каталогом Ubuntu 20.04 /etc/dnsmasq .d даже не существует
dnsmasq работает на обеих машинах.
ps aux | grep dnsmasq
nobody 31355 0.0 0.0 14788 4280 ? S 09:47 0:00 /usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/run/NetworkManager/dnsmasq.pid --listen-address=127.0.1.1 --cache-size=0 --clear-on-reload --conf-file=/dev/null --proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq --conf-dir=/etc/NetworkManager/dnsmasq.d
Кажется, я упускаю некоторые детали, но у меня мало опыта в таких вещах, и я не знаю, как это диагностировать. Был бы признателен за любую помощь в этом.