在我运行 openSUSE 11.4 的工作桌面上,我有一个本地网络,它通过 DHCP 获取其地址、域(work.site)和名称服务器(10.100.1.1、10.100.1.2)信息 - 这些信息写入 /etc/resolv.conf
我使用工作网络访问互联网,这两个名称服务器最终会返回互联网上任何公共域名查找的条目。
我还有一个最终连接的私人 VPN。名称服务器 (10.111.1.1) 和域 (private.site) 很少会因此网络而改变,但目前它们由 openVPN 客户端推送到网络管理器,并且也会与现有的 /etc/resolv.conf 合并
我的 resolv.conf 最终看起来像这样:
search private.site work.site
nameserver 127.0.0.1
nameserver 10.111.1.1
nameserver 10.100.1.1
如您所见,由于最多 3 个条目的限制,我工作网络中的第二个名称服务器被推了出去。它仍然很好,但如果该名称服务器因维护或其他原因而停机,就会出现问题。
所以我发现 dnsmasq 可以在这里帮助我,因此我将 dnsmasq 设置为本地 DNS 解析器,没有任何 DHCP 支持。
现在这是我的 /etc/dnsmasq.conf:
resolv-file=/etc/resolv.conf
server=/private.site/10.111.1.1
server=/1.111.10.in-addr.arpa/10.111.1.1
listen-address=127.0.0.1
bind-interfaces
log-queries
我让 dnsmasq 从 /etc/resolv.conf 获取名称服务器列表,因为 NetworkManager 似乎可以正确更新此列表(最多 3 个名称服务器)。我能够正确解析两个网络中的主机名。
所以我有以下问题:
- 有没有办法可以让 NetworkManager 或 dhclient 在其他地方写出名称服务器列表,然后让 dnsmasq 用作 resolv-file?
- 如何让 dnsmasq 使用某些名称服务器作为所有查询的默认名称服务器?现在我注意到,对互联网上公共域的查询通常会发送到两个名称服务器 - work.site 和 private.site 上的一个。如果我可以将其仅限制在 work.site 上就好了。
更新:这些是我找到的解决方案:在 /etc/sysconfig/network/config 中更改以下内容:
NETCONFIG_DNS_FORWARDER="dnsmasq"
NETCONFIG_DNS_FORWARDER_FALLBACK="no"
NETCONFIG_DNS_STATIC_SEARCHLIST="work.site private.site"
在 /etc/dnsmasq.conf 中添加以下行:
resolv-file=/var/run/dnsmasq-forwarders.conf
我还必须修改我的 openVPN server.conf 以便不为客户端推送名称服务器,因为我已经在 dnsmasq.conf 中为该域添加了服务器规则。
答案1
如果您安装解析配置,NetworkManager 将使用它,而不是/etc/resolv.conf
直接写入。然后可以在中找到来自 NM 的 DNS 服务器/var/run/resolvconf/interface/NetworkManager
。
dnsmasq 将所有查询发送到 10.111.1.1,因为它已在列表中resolv.conf
- 您可能希望将其从列表中删除,resolv.conf
以便它仅用于 private.site 域。列表中的名称服务器resolv.conf
基本上是默认的。