在 OpenWRT 上重新路由直接 DNS 请求

在 OpenWRT 上重新路由直接 DNS 请求

在装有 OpenWRT 的路由器上,我使用 dnsmasq 进行 DNS 投毒来屏蔽广告。如果主机在列表中,路由器会使用 192.168.99.99 回复 DNS 请求,该地址始终只提供 1x1 透明 gif(pixelserv 方法)。

但是,本地设备可以直接使用自己的 DNS 服务器来绕过这个问题。我该如何重新路由这些 DNS 请求以屏蔽广告?

我尝试了如下命令(8.8.8.8 和 8.8.4.4 是 DNS 服务器,192.168.1.102 是源设备,192.168.1.1 是我的路由器的 IP):

iptables -t nat -A PREROUTING -d 8.8.8.8 -j DNAT --to-destination 192.168.1.1
iptables -t nat -A PREROUTING -d 8.8.4.4 -j DNAT --to-destination 192.168.1.1

# or:
iptables -t nat -A PREROUTING -i wlan0 -s 192.168.1.102 -p udp --dport 53 -j REDIRECT --to-port 53
iptables -t nat -A PREROUTING -i wlan0 -s 192.168.1.102 -p tcp --dport 53 -j REDIRECT --to-post 53

我尝试通过 OpenWrt 管理面板 -> 源 NAT 添加流量规则,匹配“局域网中来自 IP 192.168.1.102 的任何 TCP、UDP 到局域网中任何主机、端口 53”,操作为“重写到源 IP 192.168.1.1,端口 53”。我相信无论哪种方式,这在 iptables 中也是有效的。

但我发现 DNS 查询仍在解析:

root@OpenWrt:~# tcpdump -vvv -i wlan0 port 53

Chromecast.lan.42591 > google-public-dns-a.google.com.domain: [udp sum ok] 57897+ A? pubads.g.doubleclick.net. (42)
google-public-dns-a.google.com.domain > Chromecast.lan.42591: [udp sum ok] 57897 q: A? pubads.g.doubleclick.net. 5/0/0 pubads.g.doubleclick.net. [5h59m59s] CNAME partnerad.l.doubleclick.net., partnerad.l.doubleclick.net. [4m59s] A 74.125.136.157, partnerad.l.doubleclick.net. [4m59s] A 74.125.136.156, partnerad.l.doubleclick.net. [4m59s] A 74.125.136.155, partnerad.l.doubleclick.net. [4m59s] A 74.125.136.154 (132)

也许有一种完全不同的方法,例如通过 dnsmasq,可以吗?但是我找不到这个。

(我找到了一些关于如何重新路由到另一个远程 DNS 服务器的解释,但这对我没有帮助。它主要是为了解除封锁地区或者对于 Tomato 或 DD-WRT。此外,这与我的上一个问题

答案1

使用iptables -t nat -A PREROUTING -i br-lan -p udp --dport 53 -j DNAT --to 192.168.1.1

解释 iptables 使用链来路由流量。我们使用iptables -t nat -A PREROUTING选择要添加新规则的链。然后我们通过选择-i br-lanOpenWRT 的 LAN 接口来缩小选择范围,使其仅包含流向互联网的流量。由于我们只重定向,因此DNS udp 53 我们添加-p udp --dport 53。现在我们只获得 DNS 数据包,我们使用 将它们重定向到本地 DNS 服务器-j DNAT --to 192.168.1.1。您可以将目的地替换为任何 DNS 服务器。

希望这可以帮助。

相关内容