双网卡主机如何让另一台双网卡主机的 avahi 只能发现本机的其中一个网卡上的的服务?
7 October 2025 at 10:17
wniming:
我的所有双网卡主机都有一个网络用来访问互联网(以下简称 eth ),另一个网络用于局域网设备之间互相访问(以下简称 lan ,这个带宽更高),linux 通过 avahi 来提供 mdns 服务让其他主机可以发现本机上的服务,默认情况下 avahi 会随机使用 eth 或 lan 其中一个的 ip ,我希望始终使用的是 lan 的 ip ,这个要如何实现?
这个问题我尝试过以下方法:
1 ,通过修改/etc/avahi/avahi-daemon.conf 的 allow-interfaces 来强制 avahi 只为 lan 提供服务,但是这会导没有 lan 网络的设备无法访问本机的服务。
2 ,通过 iptables 阻止其他的双网卡主机通过 eth 来访问本机的 avahi 服务,结果 iptables 的方法也不管用,具体情况如下:
root@server:/home/d# iptables -L INPUT -v -n
Chain INPUT (policy ACCEPT 2698 packets, 253K bytes)
pkts bytes target prot opt in out source destination
20 4975 DROP udp -- * * 192.168.1.4 0.0.0.0/0 udp dpt:5353
20 4894 DROP udp -- * * 10.0.0.3 0.0.0.0/0 udp dpt:5353
root@server:/home/d#
上面的两条规则阻止了 develop 这台机通过 eth 或 lan 来访问本机的 avahi 服务,结果在 develop 这台机上仍然可以看到本机的 smb 服务:
d@develop:~$ avahi-browse -atp | grep -i server
+;lan-br;IPv4;SERVER;_device-info._tcp;local
+;eth-br;IPv4;SERVER;_device-info._tcp;local
+;lan-br;IPv4;SERVER;_smb._tcp;local
+;eth-br;IPv4;SERVER;_smb._tcp;local
d@develop:~$
我完全想不通 iptables 为啥不管用,除了 iptables 我也想不到有其他方法能实现我想要的效果,希望有经验的 v 友能指导一下。