Вопрос или проблема
Я использую клиент VPN GlobalProtect на своем Ubuntu, и все работало нормально, пока я не обновил свою версию Ubuntu до 24.04.1 LTS. Теперь я заметил, что при подключении к VPN новые DNS-серверы добавляются дважды в /run/systemd/resolve/resolv.conf.
В конце /run/systemd/resolve/resolv.conf у меня есть (IP-адреса 1.1.1.x являются DNS-серверами из VPN):
nameserver 1.1.1.1
nameserver 1.1.1.2
nameserver 192.168.100.1
Слишком много настроенных DNS-серверов, следующие записи могут быть проигнорированы.
nameserver 192.168.68.1
nameserver 1.1.1.1
nameserver 1.1.1.2
search dommain.com
Когда я отключаюсь от VPN, только два DNS-сервера удаляются, и мой /run/systemd/resolve/resolv.conf выглядит следующим образом:
nameserver 1.1.1.1
nameserver 1.1.1.2
nameserver 192.168.100.1
Слишком много настроенных DNS-серверов, следующие записи могут быть проигнорированы.
nameserver 192.168.68.1
search dommain.com
Таким образом, похоже, что одни и те же серверы добавляются дважды в /run/systemd/resolve/resolv.conf, и после отключения от VPN два DNS и домен поиска не удаляются.
Когда я перезапускаю службу systemd-resolved после отключения от VPN (sudo systemctl restart systemd-resolved), в /run/systemd/resolve/resolv.conf я вижу, что дублирующиеся DNS-серверы исчезают, и /run/systemd/resolve/resolv.conf выглядит, как ожидалось:
nameserver 192.168.100.1
nameserver 192.168.68.1
search .
Я также заметил, что вижу два добавленных интерфейса, когда подключен к VPN: Global и gpd0:
me@ubuntu:~$ resolvectl
Global
Протоколы: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Режим resolv.conf: foreign
Текущий DNS-сервер: 1.1.1.1
DNS Servers: 1.1.1.1 1.1.1.2
DNS Domain: dommain.com
Link 3 (wwan0)
Текущие области: нет
Протоколы: -DefaultRoute -LLMNR -mDNS -DNSOverTLS
DNSSEC=no/unsupported
Link 4 (wlp0s20f3)
Текущие области: DNS
Протоколы: +DefaultRoute -LLMNR -mDNS -DNSOverTLS
DNSSEC=no/unsupported
Текущий DNS-сервер: 192.168.68.1
DNS Servers: 192.168.100.1 192.168.68.1
Link 5 (gpd0)
Текущие области: DNS
Протоколы: +DefaultRoute -LLMNR -mDNS -DNSOverTLS
DNSSEC=no/unsupported
Текущий DNS-сервер: 1.1.1.1
DNS Servers: 1.1.1.1 1.1.1.2
DNS Domain: ~.dommain.com
me@ubuntu:~$
Когда я отключаюсь от VPN, только gpd0 удаляется – Global все еще присутствует с DNS-серверами из VPN. После перезапуска службы systemd-resolved она удаляет эти DNS-серверы и изменяет режим resolv.conf на stub.
Global
Протоколы: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Режим resolv.conf: stub
Может кто-то посоветовать, что может быть причиной этого странного поведения и как решить эту проблему навсегда? Спасибо.
Ответ или решение
Здравствуйте, Томаш!
Проблема, с которой вы столкнулись, связана с тем, как система управления DNS (systemd-resolved) обрабатывает изменения в конфигурации DNS-серверов при подключении и отключении VPN-клиента. Ниже приведены несколько рекомендаций, которые помогут вам решить эту проблему.
1. Проверьте конфигурацию VPN-клиента
Убедитесь, что ваш VPN-клиент правильно настроен для управления DNS-серверами. Некоторые клиенты могут иметь параметры, отвечающие за добавление или удаление DNS-серверов при подключении или отключении. Вы можете проверить документацию вашего VPN-клиента GlobalProtect на наличие таких опций.
2. Настройка systemd-resolved
Попробуйте изменить конфигурацию systemd-resolved
, чтобы предотвратить сохранение лишних DNS-серверов после отключения от VPN. Для этого сделайте следующее:
-
Откройте файл конфигурации
systemd-resolved
:sudo nano /etc/systemd/resolved.conf
-
Убедитесь, что у вас есть следующие строки (добавьте или измените их):
[Resolve] DNSStubListener=yes
-
Сохраните изменения и закройте редактор.
3. Сброс DNS после отключения от VPN
Поскольку вы уже нашли обходной путь с помощью перезапуска systemd-resolved
, вы можете автоматизировать этот процесс. Создайте служебный скрипт, который будет выполняться при отключении от VPN:
-
Создайте скрипт, например, в
/usr/local/bin/vpn-disconnect.sh
:sudo nano /usr/local/bin/vpn-disconnect.sh
-
Вставьте следующий код:
#!/bin/bash # Сброс DNS после отключения от VPN sudo systemctl restart systemd-resolved
-
Сделайте скрипт исполняемым:
sudo chmod +x /usr/local/bin/vpn-disconnect.sh
-
Настройте ваш VPN-клиент так, чтобы он вызывал этот скрипт при отключении от VPN. Это может быть неочевидно и зависит от конкретного клиента, поэтому обратитесь к его документации на предмет опций для запуска пользовательских скриптов.
4. Мониторинг и тестирование
После выполнения этих шагов, протестируйте соединение с VPN и убедитесь, что лишние DNS-серверы больше не остаются в /run/systemd/resolve/resolv.conf
после отключения. Используйте команду resolvectl
для проверки текущей конфигурации DNS.
Если проблема не исчезнет, вам может потребоваться обратиться в службу поддержки вашей VPN или изучить форумы для вашей конкретной версии Ubuntu и GlobalProtect на предмет аналогичных проблем.
Надеюсь, эти рекомендации помогут вам решить проблему. Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.
С уважением,
[Ваше Имя]