iptables规则的DNS /透明代理ipexception

我正在用dd-wrt运行一个路由器(一台Netgear WNDR3700)。 对于内容过滤,我正在使用OpenDNS。 我想确保用户不能通过放置自己的名称服务器绕过OpenDNS,所以我有一个规则来捕获所有的DNSstream量。

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

我确实有一台电脑在networking上,我想允许过去的OpenDNSfilter。 在那台机器上,我手动设置名称服务器,并创build另一个规则来允许它通过

 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地址不能通过鱿鱼路由。 我怎么能192.168.1.2(也许在未来的其他人)旁路端口53规则,但不是端口80规则?

只需更新此规则,使其更具体,只适用于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