Вопрос или проблема
Я бы хотел, чтобы VPN-соединение переключало DNS по умолчанию на системе, но не основной маршрут. Я надеялся, что эти параметры решат проблему:
ipv4.method: auto
ipv4.dns-priority: -1
ipv4.ignore-auto-dns: no
ipv4.never-default: yes
(Я также пробовал установить ipv4.dns: 172.30.0.1
явно)
Но resolvectl status
все равно показывает, что только основной интерфейс имеет любой настроенный и используемый по умолчанию DNS. Мне приходится вручную запускать resolvectl dns tun0 172.30.0.1
и resolvectl default-route tun0
, чтобы добиться того, чего я хочу.
Как использовать NetworkManager для достижения этого автоматически?
.
Ответ или решение
Настройка VPN-соединения в Linux с NetworkManager для изменения DNS без изменения маршрута по умолчанию может быть сложной задачей. Многие пользователи сталкивались с этим вопросом, особенно если им требовалось обеспечить конфиденциальность DNS-запросов через VPN, сохраняя при этом маршрутизацию через основной интернет-канал. Для достижения указанной цели необходимо вносить изменения, корректно используя NetworkManager и systemd-resolved.
Проблема
Вы хотите, чтобы VPN-соединение изменяло DNS-сервер системы, не изменяя при этом маршрут по умолчанию. Вы пробовали следующие настройки NetworkManager:
ipv4.method: auto
ipv4.dns-priority: -1
ipv4.ignore-auto-dns: no
ipv4.never-default: yes
Тем не менее, вы всё же вынуждены вручную изменять настройки с помощью команд resolvectl dns tun0 172.30.0.1
и resolvectl default-route tun0
.
Решение
Для решения данной задачи необходимо убедиться, что NetworkManager правильно обновляет состояние DNS в системном резолвере. Выполните следующие шаги:
-
Настройка VPN-подключения:
Убедитесь, что в файле конфигурации вашего VPN (например, OpenVPN) не принудительно указаны параметры маршрутизации DNS, которые могут конфликтовать с настройками NetworkManager. -
Использование
dns-priority
:
Параметрipv4.dns-priority
установлен на -1, что указывает на низкий приоритет. Попробуйте изменить его на более высокий приоритет, например, 100. Это может помочь в изменении привязки к DNS-серверам, назначаемым вашим интерфейсом VPN. -
Изменение конфигурации Tun-интерфейса:
Проверьте настройку вашего Tun-интерфейса. Если это подключение происходит через интерфейсtun0
, убедитесь, что все необходимые параметры заданы в самом соединении через NetworkManager. -
Автоматизация с помощью консольных утилит:
Если NetworkManager по-прежнему не применяет изменения автоматически, вы можете создать скрипт в директории/etc/NetworkManager/dispatcher.d/
, который будет автоматически выполняться при подключении или отключении соединений. Этот скрипт может устанавливать DNS-серверы для вашего интерфейса:#!/bin/bash INTERFACE=$1 ACTION=$2 if [ "$INTERFACE" == "tun0" ] && [ "$ACTION" == "up" ]; then resolvectl dns tun0 172.30.0.1 resolvectl default-route tun0 fi
-
Отладка и диагностика:
Используйтеjournalctl -xe
иnmcli
для анализа логов NetworkManager и выявления возможных ошибок или конфликтов в конфигурации.
Если приведенные выше шаги выполняются корректно, то ваш VPN должен автоматически назначать требуемый DNS сервер, не изменяя маршрут по умолчанию. Это позволит интегрировать конфиденциальное разрешение DNS как часть вашей защиты сети, оставаясь в пределах основного интернет-канала.
Эти шаги обеспечат более стабильное и автоматизированное поведение вашей сетевой конфигурации при использовании VPN через NetworkManager.