如何让 dnsmasq 私有名称服务器与网络管理器一起工作?

如何让 dnsmasq 私有名称服务器与网络管理器一起工作?

刚刚学习网络。

我在 Mint-18 上。使用network-managerdnsmasq已启用。

我希望以特定域名结尾的地址通过私有名称服务器进行解析。

server当我使用dnsmasq 配置文件的选项添加私有名称服务器时,一切都会失败。我什至无法解析 google.com:

> nslookup google.com
;; connection timed out; no servers could be reache

如果我删除该server选项并将相同的私有名称服务器添加到顶部\etc\resolve.conf,重新启动网络管理器,事情就会再次工作,我可以解析私有主机名称。

> nslookup abcprivate.net
Server:     nn.nn.nn.nn
Address:    nn.nn.nn.nn#53

Non-authoritative answer:
Name:   abcprivate.net
Address: mm.mm.mm.mm

所以我知道私有名称服务器是正确的。所以这一定是我配置 dnsmasq 的方式。

这是我的配置文件

>cat /etc/NetworkManager/dnsmasq.d/dnsmasq.conf
server=/abcprivate.net/nn.nn.nn.nn

其中 abcprivate.net 是专用网络的域,nn 是数字。

答案1

事实证明我的设置是正确的,但它们没有被使用。

>ps ax | grep dnsmasq
 1273 ?        S      0:00 /usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/var/run/NetworkManager/dnsmasq.pid --listen-address=127.0.1.1 --cache-size=0 --conf-file=/dev/null --proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq --conf-dir=/etc/NetworkManager/dnsmasq.d

可以看出,它没有使用conf 文件...我做了一些其他测试以确保情况确实如此。


我最终确实解决了这个问题,但我是通过以下方式做到的:

  • 禁用 Network-manager dnsmasq 插件:注释掉dns其中的行/etc/NetworkManager/NetworkManager.conf
  • 移动/etc/NetworkManager/dnsmasq.d/dnsmasq.conf/etc/dnsmasq.conf
  • 将捕获所有名称服务器添加到 /etc/dnsmasq.conf(请参阅下面的文件列表)
  • 将 dnsmasq 地址添加到 /etc/resolve.conf 的顶部(通过更改/etc/resolvconf/resolv.conf.d/head文件...请参阅下面的文件列表)
  • 启动 dnsmasq,使其不会读取resolve.conf:(dnsmasq -d -R -q我想在屏幕上记录查询,以便我可以看到发生了什么)。
  • 一、我一切正常,我将 dnsmasq 封装在一个 systemD 单元文件中

$ cat /etc/dnsmasq.conf
cache-size=1000
listen-address=127.0.1.1
server=8.8.8.8
server=/abcprivate.net/nn.nn.nn.nn
cache-size=1000

$ cat /etc/resolvconf/resolv.conf.d/head    
nameserver 127.0.1.1

$ cat /etc/systemd/system/dnsmasq.service
[Unit]
Description=SystemD - Dnsmasq is a Domain Name System (DNS) forwarder
Requires=network-manager.service

[Service]
Type=simple
ExecStart=/usr/sbin/dnsmasq -d -q -R

答案2

我相信dnsmasq可以做你想做的事,但听起来你也遇到了一些问题dnsmasq.conf

您可能需要在以下位置取消注释此行dnsmasq.conf

resolv-file=/etc/dnsmasq.resolv

然后你需要一个包含其他名称服务器的文件/etc/dnsmasq.resolv。我有这个:

nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 4.3.2.1

此外,我认为您需要类似以下的行/etc/dnsmasq.conf

server=/.intranet/10.0.0.3
server=/0.0.10.in-addr.arpa/10.0.0.3
local=/.intranet/

第一个设置“.intranet”域的 IP 地址服务器。我原来的 DSL 调制解调器在内部使用了 10.0.0.0/24 地址,所以这就是我今天得到的。第二行允许您从 IP 地址查找主机名。第三行告诉dnsmasq您在“.intranet”域中查找完全限定名称/etc/hosts,或者从dnsmasqDHCP 中注册的客户端查找完全限定名称。 10.0.0.3是运行的机器的IP地址dnsmasq

总结一下:设置将其他名称转发到的dnsmasq.resolvIP 地址。和dnsmasq设置确定特定域的 DNS 服务器的 IP 地址,以及从何处获取该域中名称的地址。serverlocal

相关内容