跨子网DNS请求失败排查:UISP EdgeRouter X下PiHole无响应
网络DNS访问故障排查问题
网络环境
- 主PC(地址
10.1.1.1)和自制PiHole设备(地址10.0.0.1)均连接UISP EdgeRouter X - PC网关:
10.1.1.254/24,对应路由器eth1端口 - PiHole网关:
10.0.0.254/24,对应路由器eth0端口
故障现象
- 已通过防火墙规则实现PC到PiHole的SSH、HTTP(S)访问,但DNS端口53完全无法连通
- 防火墙规则统计中能看到SSH/HTTP(S)流量,无任何DNS流量记录
- 工具测试报错:
- 使用
drill:Error: error sending query: Could not send or receive, because of network error - 使用
doggo:error="read udp 10.1.1.1:57260->10.0.0.1:53: i/o timeout"
- 使用
- 禁用所有防火墙规则并设置全ACCEPT后,DNS请求仍无响应,PiHole使用
dnsmasq服务
排查方向及解决建议
1. 检查PiHole的DNS监听配置
登录PiHole设备,确认dnsmasq是否对外网口监听:
- 编辑
/etc/dnsmasq.conf,查看listen-address参数,必须包含10.0.0.1,不能只写本地回环127.0.0.1 - 执行命令验证监听状态:
确保输出里有netstat -tulpn | grep :5310.0.0.1:53的TCP和UDP监听记录
2. 检查PiHole本地防火墙
PiHole自身的防火墙(如ufw)可能拦截53端口:
- 执行
sudo ufw status查看现有规则,确认允许10.1.1.0/24网段访问TCP/UDP 53端口 - 若未配置,添加规则:
sudo ufw allow from 10.1.1.0/24 to any port 53 proto tcp sudo ufw allow from 10.1.1.0/24 to any port 53 proto udp
3. 检查EdgeRouter X的路由配置
确认路由器存在跨网段的正确路由:
- 登录EdgeRouter X,执行
show ip route,检查10.0.0.0/24和10.1.1.0/24的路由条目是否指向对应物理端口 - 若缺少路由,手动添加示例(根据实际端口调整):
set protocols static route 10.0.0.0/24 interface eth0 set protocols static route 10.1.1.0/24 interface eth1
4. 验证DNS协议连通性
DNS默认用UDP,优先确认UDP端口的连通性:
- 在PC上执行
dig @10.0.0.1 google.com,直接指定PiHole作为DNS服务器测试 - 用
nc -u 10.0.0.1 53测试UDP端口,输入任意字符回车,查看是否有响应
5. 检查EdgeRouter X的NAT配置
避免跨网段流量被错误NAT转换:
- 执行
show nat rules,确认没有针对10.1.1.0/24到10.0.0.0/24的NAT规则 - 若存在无关NAT规则,直接删除
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

