Как заставить networkmanager настраивать доменные серверы имен с помощью openresolv + dnsmasq

Я часто подключаюсь к нескольким сетям одновременно. Каждая из этих сетей обеспечивает конфигурацию сервера имен через dhcp. Например, сеть 1: (eth0):

domain company1.corp # nameserver 192.168.0.253 nameserver 192.168.0.254 

Сеть 2 (tun0):

 domain company2.corp # nameserver 10.102.204.51 nameserver 10.102.208.51 

# Имена изменены

При одновременном подключении к обеим сетям:

 # resolv.conf from NetworkManager domain company1.corp, company2.corp nameserver 192.168.0.253 nameserver 192.168.0.254 nameserver 10.102.204.51 # NOTE: the libc resolver may not support more than 3 nameservers. # The nameservers listed below may not be recognized. nameserver 10.102.208.51 

Решение service.company2.corp не работает, потому что первый сервер имен знает только имена company1.corp.

Итак, вдохновленный этой статьей , я установил openresolv (реализация resolvconf), настроив локальную службу dnsmasq на мою установку Arch linux.

Если я настрою сервер имен вручную, используя resolvconf:

 # resolvconf -d NetworkManager # echo "domain company1.corp nameserver 192.168.0.253 nameserver 192.168.0.254 " | resolvconf -a eth0 # echo "domain company2.corp nameserver 10.102.204.51 nameserver 10.102.208.51 " | resolvconf -a tun0 

Затем я могу разрешать имена как от company1.corp, так и от company2.corp (локальный сервер dnsmasq обрабатывает это.)

Обратите внимание, что после ручной конфигурации, resolveconf -l показывает две конфигурации отдельно:

 ~ # resolvconf -l # resolv.conf from tun0 domain company2.corp nameserver 10.102.204.51 nameserver 10.102.208.51 # resolv.conf from eth0 domain company1.corp nameserver 192.168.0.253 nameserver 192.168.0.254 

Однако, если сетевой диспетчер выполняет конфигурацию, 2 конфигурации не являются отдельными, так как это было бы, если бы сетевой менеджер писал в /etc/resolve.conf

 ~ # resolvconf -l # resolv.conf from NetworkManager # Generated by NetworkManager domain company1.corp, company2.corp nameserver 192.168.0.253 nameserver 192.168.0.254 nameserver 10.102.204.51 # NOTE: the libc resolver may not support more than 3 nameservers. # The nameservers listed below may not be recognized. nameserver 10.102.208.51 

Мой вопрос: как я могу заставить диспетчера сети правильно вызвать resolveconf, чтобы серверы имен для каждого интерфейса регистрировались отдельно. (К сожалению, googling для этого бесполезен, поскольку Google считает, что «resolveconf» == «resolve.conf»)

NetworkManager имеет функции управления локальным сервером dnsmasq, встроенным. Для этого нет необходимости использовать resolvconf / openresolv.

Чтобы включить это:

  • Отключите конфигурацию resolvconf / openresolv dnsmasq, если она была ранее включена, и убедитесь, что нет экземпляров запуска dnsmasq.
  • Убедитесь, что dnsmasq установлен
  • Добавьте dns=dnsmasq в /etc/NetworkManager/NetworkManager.conf .
  • Перезапустить NetworkManager

Как только вы это сделаете, вы увидите, что NetworkManager запустил процесс dnsmasq:

 $ pgrep dnsmasq -fl 1697 /usr/bin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/var/run/nm-dns-dnsmasq.pid --listen-address=127.0.0.1 --conf-file=/var/run/nm-dns-dnsmasq.conf --cache-size=400 --proxy-dnssec 

/etc/resolve.conf должен указывать на локальный экземпляр dnsmasq:

 $ cat /etc/resolv.conf # Generated by NetworkManager domain company1.corp search company1.corp nameserver 127.0.0.1 

и мы можем видеть, какие серверы использует dnsmasq:

 # cat /var/run/nm-dns-dnsmasq.conf server=/company2.corp/10.102.208.51 server=/10.in-addr.arpa/10.102.208.51 server=192.168.1.244 server=192.168.1.239 

Похоже, NetworkManager просто перезаписывает /etc/resolv.conf и не использует openresolv. Согласно FS # 24635 , NetworkManager имеет поддержку openreslov, но он не был первоначально включен в сборке. Какую версию Arch Linux вы используете и какова версия пакета networkmanager?