ArchLinux下NetworkManager+systemd-resolved连接WiFi时无法解析DNS,本地zeroconf DNS服务器172.17.0.1无法访问
ArchLinux下NetworkManager+systemd-resolved连接WiFi时无法解析DNS,本地zeroconf DNS服务器172.17.0.1无法访问
看起来你的问题核心在于:本地网络的172.17.0.1并没有开放标准DNS的53端口,但其他设备(Windows/iOS)能正常解析,说明它们是通过**mDNS(zeroconf,端口5353)或LLMNR(端口5355)**来完成域名解析的,而你的systemd-resolved虽然开启了这些协议,但可能配置或链路层面有问题导致没生效。下面是一步步的排查和解决建议:
1. 先确认systemd-resolved的mDNS/LLMNR配置
你提到服务配置文件是空的,那我们先开启必要的多播解析支持:
- 编辑
/etc/systemd/resolved.conf,添加以下内容:[Resolve] MulticastDNS=yes LLMNR=yes - 重启systemd-resolved服务:
sudo systemctl restart systemd-resolved
2. 检查NetworkManager的WiFi连接配置
确保你的WiFi连接(名称是Gast)正确启用了mDNS/LLMNR:
- 查看当前连接的DNS相关配置:
nmcli con show "Gast" | grep -E "(dns|llmnr|mdns)" - 如果看到
ipv4.mdns或ipv4.llmnr是no,手动开启:nmcli con mod "Gast" ipv4.mdns yes ipv4.llmnr yes - 同时清空手动设置的DNS(如果有的话),让系统自动适配网络:
nmcli con mod "Gast" ipv4.dns "" ipv4.ignore-auto-dns no - 重启NetworkManager生效:
sudo systemctl restart NetworkManager
3. 验证mDNS解析是否正常
现在测试一下多播解析是否能工作:
- 尝试解析本地设备(如果有其他支持mDNS的设备):
ping some-device.local - 用dig测试mDNS组播地址:
(注:mDNS主要用于本地域名解析,公网域名可能需要依赖网络的mDNS网关转发,不过其他设备能解析的话,这个应该能工作)dig @224.0.0.251 google.de -p 5353
4. 临时应急方案(如果上面的方法暂时不生效)
如果mDNS还是无法正常工作,你可以调整systemd-resolved的fallback DNS优先级,同时保留本地解析能力:
- 编辑
/etc/systemd/resolved.conf,添加:
这样既可以用公共DNS解析公网域名,又不会影响本地mDNS/LLMNR的解析,同时解决公共DNS不稳定的问题(可以多添加几个备用公共DNS)[Resolve] FallbackDNS=8.8.8.8 1.1.1.1 DNSDefaultRoute=no - 重启systemd-resolved服务即可。
5. 排查防火墙或网络限制
最后检查一下本地防火墙是否屏蔽了mDNS/LLMNR的端口:
- 查看iptables规则:
sudo iptables -L INPUT | grep -E "(5353|5355)" - 如果有DROP或REJECT规则,放行这些UDP端口:
sudo iptables -A INPUT -p udp --dport 5353 -j ACCEPT sudo iptables -A INPUT -p udp --dport 5355 -j ACCEPT
另外,有些公共WiFi会限制组播流量,如果是这种情况,可能需要联系网络管理员确认。
备注:内容来源于stack exchange,提问作者Dronakuul
相关产品推荐
相关产品推荐

