我有一个 LAN,上面连接着几台主机。我最近安装了一台主机,dnsmasq
为 LAN 上的主机提供 DHCP 和 DNS 服务。从那时起,我注意到网络上出现了一些奇怪的行为,我不理解,这些行为可能是也可能不是由于主机的引入而引起的dnsmasq
。我很茫然。我不知道该去哪里找。(我甚至想不出一个好的标题来回答我的问题)请指导我解决下面描述的问题。如果需要更多信息,请告诉我,我会尝试添加它。
运行的主机dnsmasq
(虚拟 LXC/LXD 机):
$ uname -a
Linux dhcpns 3.19.0-26-generic #28-Ubuntu SMP Tue Aug 11 14:16:32 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
供您参考的基本信息如下/etc/dnsmasq.conf
:
$ cat /etc/dnsmasq.conf |grep -ve '^$' |grep -v '#'
domain-needed
bogus-priv
no-resolv
no-poll
server=208.67.220.220
server=8.8.8.8
server=208.67.222.222
server=8.8.4.4
local=/local/
address=/mackeeper.com/0.0.0.0
expand-hosts
domain=local
dhcp-range=10.0.1.100,10.0.1.254,255.255.255.0,72h
dhcp-host=B0:C2:87:79:B0:41,router, 10.0.1.1
# multiple dhcp-host lines for static hosts removed
dhcp-option=option:router,10.0.1.1
dhcp-option=42,10.0.1.220
dhcp-option=15,local
dhcp-option=119,local
dhcp-option=252,"\n"
dhcp-authoritative
log-queries
log-dhcp
conf-dir=/etc/dnsmasq.d,.bak
dhcp-sequential-ip
问题在于
在某些主机上(例如我的 MacBook Air;OSX 10.10.5)
$ uname -a
Darwin argon.local 14.5.0 Darwin Kernel Version 14.5.0: Wed Jul 29 02:26:53 PDT 2015; root:xnu-2782.40.9~1/RELEASE_X86_64 x86_64
我可以通过 IP 地址、主机名或 FQDN ping 网络上的所有主机。
例如 ping MySQL 服务器:
$ ping -c 1 10.0.1.163
PING 10.0.1.163 (10.0.1.163): 56 data bytes
64 bytes from 10.0.1.163: icmp_seq=0 ttl=64 time=2.245 ms
--- 10.0.1.163 ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 2.245/2.245/2.245/0.000 ms
$ ping -c 1 sql
PING sql.local (10.0.1.163): 56 data bytes
64 bytes from 10.0.1.163: icmp_seq=0 ttl=64 time=2.147 ms
--- sql.local ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 2.147/2.147/2.147/0.000 ms
$ ping -c 1 sql.local
PING sql.local (10.0.1.163): 56 data bytes
64 bytes from 10.0.1.163: icmp_seq=0 ttl=64 time=2.246 ms
--- sql.local ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 2.246/2.246/2.246/0.000 ms
然而,在某些主机上,这不起作用。例如:
$ uname -a
Linux rbian 3.18.0-trunk-rpi #1 PREEMPT Debian 3.18.5-1~exp1+rpi19 (2015-08-08) armv6l GNU/Linux
$ ping -c 1 10.0.1.163
PING 10.0.1.163 (10.0.1.163) 56(84) bytes of data.
64 bytes from 10.0.1.163: icmp_req=1 ttl=64 time=0.457 ms
--- 10.0.1.163 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.457/0.457/0.457/0.000 ms
$ ping -c 1 sql
PING sql.local (10.0.1.163) 56(84) bytes of data.
64 bytes from sql.local (10.0.1.163): icmp_req=1 ttl=64 time=0.393 ms
--- sql.local ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.393/0.393/0.393/0.000 ms
$ ping -c 1 sql.local
ping: unknown host sql.local
其他主机毫无问题地响应:
$ ping -c 1 proton.local
PING proton.local (10.0.1.25) 56(84) bytes of data.
64 bytes from proton.local (10.0.1.25): icmp_req=1 ttl=255 time=0.619 ms
--- proton.local ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.619/0.619/0.619/0.000 ms
因此,有些主机可以使用 ping 通 LAN 上的所有主机hostname.local
,有些主机无法 ping 通任何主机hostname.local
,而有些主机可以成功 ping 通其中的一些主机。仅 ping 时没有主机会出现问题hostname
。
请给我建议。
编辑:这可能与 avahi/netatalk 有关吗?在dnsmasq-dhcp
日志中,我看到有时/对于某些主机,会查询 *.local 主机名,而对于其他主机则不会。
编辑2:我更改了两个设置:
local=/lan/
domain=lan
我也不再使用*.local
和 ,而是使用*.lan
。这似乎很有效。
答案1
.local 是 Apple OS X 用于 Bonjour 服务的一个特殊用途的内部 DNS 区域。因此,是的,您确实导致 Mac 本机与运行 Avahi(Bonjour 守护程序)的 Linux 发生冲突。
一种解决方法是运行基于服务器的多播 DNS 响应器,它们都可以使用它来获取 .local 中内容的一致信息。任何 Linux 发行版上的 Avahi 守护程序/服务器包都可以提供此功能。
最好使用真实的 DNS 服务器和真实的 DHCP 服务器在真实的 DNS 域上进行整体构建,特别是当需要扩展时。