将所有出站 UDP DNS 请求重定向到本地主机 DNS 服务器

将所有出站 UDP DNS 请求重定向到本地主机 DNS 服务器

我正在尝试将所有出站 DNS 请求(从 LAN 发出)重定向到在 localhost 上运行的隧道,侦听 127.0.0.1:5353 上的 UDP。

iptables -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to 127.0.0.1:5353

测试它

nc -u -l -p 5353

nc -u 127.0.0.1 53

很好,并且 UDP 会话正在工作,但是当我尝试使用以下命令时:

nc -u 8.8.8.8 53

nc监听可以接收流量,但回复失败,并显示:

发送 2、接收 2:连接被拒绝

尽管

iptables -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to 192.168.1.108:5353

工作正常,并且在同一 WiFi 网络上运行的设备可以成功接收回复。

编辑:使用 TCP 进行的 DNS 查询是单独管理的,无需考虑。

答案1

要重定向基于 DNS UDP 的请求,如果您的 DNS 守护程序/代理正在侦听端口 5353/UDP,您必须执行以下操作:

iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p udp -m udp --dport 53 -j DNAT --to-destination 127.0.0.1:5353

源必须是内部网络块/网络,因为我们不需要循环(即我们仍然可能需要向外部发出 DNS 请求)。

如果为多宿主计算机中的内部网络进行路由,您也可以应用该接口,而不需要源网络。

iptables -i eth0 -t nat -A PREROUTING  -p udp -m udp --dport 53 -j DNAT --to-destination 127.0.0.1:5353

您也可以在端口 53 中执行此操作,只要将目的地列入黑名单即可,如下所示:

iptables -t nat -A PREROUTING  ! -d 127.0.0.1/32 -p udp -m udp --dport 53 -j DNAT --to-destination 127.0.0.1:53

OUTPUT 队列可能在本地测试中工作,但是对于远程计算机和当前配置,建议使用 PREROUTING 队列。

相关内容