带有 IP 例外的 DNS/透明代理的 iptables 规则

带有 IP 例外的 DNS/透明代理的 iptables 规则

我正在运行一个带 dd-wrt ​​的路由器(如果重要的话,是 Netgear WNDR3700)。对于内容过滤,我使用 OpenDNS。我想确保用户无法通过输入自己的名称服务器来绕过 OpenDNS,所以我制定了一条规则来捕获所有 DNS 流量。

iptables -t nat -A PREROUTING -i br0 -p all --dport 53 -j DNAT --to $LAN_IP

我确实有一台网络上的计算机,我想允许它通过 OpenDNS 过滤器。在那台机器上,我手动设置了名称服务器,并创建了另一条规则以允许它通过

iptables -t nat -I PREROUTING -i br0 -s 192.168.1.2 -j ACCEPT

效果很好。

今天,我在路由器上安装了透明代理(squid),并添加了这些规则:

iptables -t nat -A PREROUTING -i br0 -s $LAN_NET -d $LAN_NET -p tcp --dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -i br0 -s ! $PROXY_IP -p tcp --dport 80 -j DNAT --to $PROXY_IP:$PROXY_PORT
iptables -t nat -I POSTROUTING -o br0 -s $LAN_NET -d $PROXY_IP -p tcp -j SNAT --to $LAN_IP
iptables -I FORWARD -i br0 -o br0 -s $LAN_NET -d $PROXY_IP -p tcp --dport $PROXY_PORT -j ACCEPT

这也有效,但是 192.168.1.2 地址不会通过 squid 路由。我怎样才能让 192.168.1.2(以及将来可能的其他地址)绕过端口 53 规则,但不绕过端口 80 规则?

答案1

只需更新此规则以使其更加具体并且仅适用于 DNS。

remove - iptables -t nat -I PREROUTING -i br0 -s 192.168.1.2 -j ACCEPT
add - iptables -t nat -I PREROUTING -i br0 -s 192.168.1.2 -p all --dport 53 -j ACCEPT

相关内容