Gar*_*rwe 11 dns networkmanager dnsmasq
我经常同时连接到多个网络。这些网络中的每一个都通过 dhcp 提供名称服务器配置。例如网络 1: (eth0):
domain company1.corp #
nameserver 192.168.0.253
nameserver 192.168.0.254
Run Code Online (Sandbox Code Playgroud)
网络 2 (tun0):
domain company2.corp #
nameserver 10.102.204.51
nameserver 10.102.208.51
Run Code Online (Sandbox Code Playgroud)
# 名字变了
同时连接到两个网络时:
# 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
Run Code Online (Sandbox Code Playgroud)
解析 service.company2.corp 不起作用,因为第一个名称服务器只知道 company1.corp 名称。
受到本文的启发,我设置了openresolv(一个 resolvconf 实现),在我的 Arch linux 安装上配置了一个本地 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
Run Code Online (Sandbox Code Playgroud)
然后我就可以解析 company1.corp 和 company2.corp 的名称(本地 dnsmasq 服务器处理这个。)
注意手动配置后,resolveconf -l 分别显示了2个配置:
~ # 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
Run Code Online (Sandbox Code Playgroud)
但是,当让网络管理员进行配置时,这两个配置不是分开的,就像网络管理员正在写入 /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
Run Code Online (Sandbox Code Playgroud)
我的问题是如何让网络管理器正确调用 resolveconf 以便每个接口的名称服务器分别注册。(不幸的是,谷歌搜索是没有用的,因为谷歌认为“resolveconf”==“resolve.conf”)
Gar*_*rwe 14
NetworkManager 具有管理本地 dnsmasq 服务器内置的功能。没有必要使用 resolvconf/openresolv 来执行此操作。
要启用此功能:
dns=dnsmasq
到/etc/NetworkManager/NetworkManager.conf
.完成此操作后,您将看到 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
Run Code Online (Sandbox Code Playgroud)
/etc/resolve.conf
应该指向本地 dnsmasq 实例:
$ cat /etc/resolv.conf
# Generated by NetworkManager
domain company1.corp
search company1.corp
nameserver 127.0.0.1
Run Code Online (Sandbox Code Playgroud)
我们可以看到 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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
26493 次 |
最近记录: |