LINUX.ORG.RU

История изменений

Исправление intelfx, (текущая версия) :

Как обещал, вариант 2. К сожалению, глобальная конфигурация NetworkManager недостаточно гибкая для вышеописанной задачи (управление DNS в ней настраивается исключительно в режиме «всё или ничего»), поэтому представляю вашему вниманию небольшой хак.

  1. Включаешь systemd-resolved и systemd-networkd:
systemctl enable systemd-networkd systemd-resolved
systemctl stop NetworkManager
ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
  1. Для каждого интерфейса, который ты хочешь перевести на кастомные DNS-сервера, создаёшь конфигурацию systemd-networkd следующего вида в файле /etc/systemd/network/10-<имя интерфейса>.network:
[Match]
Name=<имя интерфейса>

[Link]
RequiredForOnline=no
ActivationPolicy=manual

[Network]
KeepConfiguration=yes
ConfigureWithoutCarrier=yes
IgnoreCarrierLoss=yes
DNS=<интересующие тебя DNS-сервера>
Domains=
DNSDefaultRoute=yes
  1. Запускаешь всё:
systemctl start systemd-networkd systemd-resolved NetworkManager

В результате адреса на этом интерфейсе будут настраиваться штатно через NM, а список DNS-серверов на интерфейсе (кастомный) будет принудительно задаваться из конфига systemd-networkd.

Исходная версия intelfx, :

Как обещал, вариант 2. К сожалению, глобальная конфигурация NetworkManager недостаточно гибкая для вышеописанной задачи (управление DNS в ней настраивается исключительно в режиме «всё или ничего»), поэтому представляю вашему вниманию небольшой хак.

  1. Включаешь systemd-resolved и systemd-networkd:
systemctl enable systemd-networkd systemd-resolved
systemctl stop NetworkManager
ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
  1. Вписываешь интересующие тебя сервера в /etc/systemd/resolved.conf:
[Resolve]
DNS=<интересующие тебя DNS-сервера>
  1. Для каждого интерфейса, который ты хочешь перевести на кастомные DNS-сервера, создаёшь конфигурацию systemd-networkd следующего вида в файле /etc/systemd/network/10-<имя интерфейса>.network:
[Match]
Name=<имя интерфейса>

[Link]
RequiredForOnline=no
ActivationPolicy=manual

[Network]
KeepConfiguration=yes
ConfigureWithoutCarrier=yes
IgnoreCarrierLoss=yes
DNS=
Domains=
DNSDefaultRoute=no
  1. Выключаешь в /etc/NetworkManager/NetworkManager.conf проверку connectivity (к сожалению, она конфликтует по смыслу с вышеописанной задачей, т. к. во время connectivity check NM использует только per-interface DNS и принудительно игнорирует глобальные DNS):
[connectivity]
enabled=false
  1. Запускаешь всё:
systemctl start systemd-networkd systemd-resolved NetworkManager

В результате адреса на этом интерфейсе будут настраиваться штатно через NM, а список DNS-серверов на интерфейсе (пустой) будет принудительно задаваться из конфига systemd-networkd.