如何让Networkmanager使用OpenResolv + dnsmasq配置域名特定的名称服务器


11

我经常同时连接到多个网络。这些网络均通过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名称。

因此受本文启发,我在Arch linux安装程序中设置了openresolv(一个resolvconf实现)来配置本地dnsmasq服务。

如果我使用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

但是,让网络管理器进行配置时,这两种配置不是分开的,就像网络管理器正在写入/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,以便分别注册每个接口的名称服务器。(不幸的是,对此进行谷歌搜索是没有用的,因为Google认为“ resolveconf” ==“ resolve.conf”)


2
在Google上,"resolvconf"使用引号进行搜索。务必在Google上用专有名词引号。
吉尔(Gilles)'所以

Answers:


14

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

真的很好,谢谢!非常简单易行的解决方案,但令人遗憾的是它并不为人所知-不能抗拒,对不起
akostadinov

将本地连接与一个或两个VPN结合使用时,这似乎可行。似乎不适用于两个本地连接。目前,我已通过以太网连接到办公室网络,遗憾的是上游Internet连接已失败。另外,我还通过USB以太网(我的电话)连接到正常运行的Internet。我无法让NetworkManager将域名应用到办公室DNS服务器。
Oskar Berggren 2014年

@OskarBerggren:在办公室以太网的IPv4选项卡下,选中“仅将此连接用于其网络上的资源”。
2014年

@GaryvanderMerwe那正是我尝试过的,忘了写它。似乎有一个相关的错误/功能请求:bugzilla.gnome.org/show_bug.cgi?id=685962
Oskar Berggren 2014年

仅供参考,无法使用,ubound因此DNSSEC也可以使用,请参见fedoraproject.org/wiki/Networking/NameResolution/DNSSEC
akostadinov 2015年

0

看来NetworkManager只是在覆盖/etc/resolv.conf并且不使用openresolv。根据FS#24635的说明,NetworkManager确实支持openreslov,但最初并未在构建中启用它。您正在运行哪个版本的Arch Linux,以及什么版本的networkmanager软件包?


networkmanager 0.9.4.0-6 NetworkManager正在调用resolveconf,而不是写入/etc/resolev.conf。问题在于NetworkManager正在合并dns信息,并将其作为一个接口而不是作为单独接口的信息传递给resolveconf。
加里·范德默威

0

按照Gary Van der Merwe的回答做,但是在

/etc/NetworkManager/NetworkManager.conf

我必须添加

[main]
dns=dnsmasq

到文件。不只是

dns=dnsmasq

这是因为该文件中的所有设置都必须位于一个部分下,而我的发行版的manjaro(archlinux)NetworkManager软件包的版本不会填充该配置文件。(我假设Gary的发行版确实在发行,因为他的建议行对他有用。)

另外请注意,任何dnsmasq配置都必须放在此配置文件中

/etc/NetworkManager/dnsmasq.d/

目录。它可能是您计算机上的其他目录。通过查看NetworkManager用于启动dnsmasq守护程序的行,我了解到正在使用的目录。您可以通过运行查看此行ps aux|grep dnsmasq。您必须等待运行此操作,直到修改NetworkManager的配置并重新启动其服务。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.