我使用Ubuntu服务器作为我的用户在NATnetworking上的路由器。 我想强制所有用户使用networking上的本地DNS服务器设置。 即使他们在客户端机器上使用公共DNS服务器,也应将DNS端口redirect(DNAT)到本地DNS服务器。 这是我所想到的:
iptables -t nat -A PREROUTING -i eth5 -p udp --dport 53 -j DNAT --to 192.168.1.1:53 iptables -A FORWARD -d 192.168.1.1 -i eth5 -p udp --dport 53 -j ACCEPT
面向NATnetworking的接口是eth5 。 上述规则不适合我。 有没有更好的解决scheme?
编辑1:我的目标是实施Opndnsfilter,以防止networking上的Bittorrentstream量。 目前该filter运行良好,用户使用DHCP获得本地dns服务器。 但我担心,他们可能会发现一个工作,例如,手动指定IP地址和DNS服务器IP地址。
编辑2:以下代码实现番茄固件上的function:
if (nvram_match("dns_intcpt", "1")) { ipt_write("-A PREROUTING -p udp -s %s/%s ! -d %s/%s --dport 53 -j DNAT --to-destination %s\n", lanaddr, lanmask, lanaddr, lanmask, lanaddr); }
这里是更多的关于它。
有没有更好的解决scheme?
是的 – 根本没有这样做。
与正常的DNSparsing混淆是几乎从来没有正确的答案,无论是你想解决的问题。
编辑重新:你的更新。 你不恰当地试图用技术来解决政策问题。 别。
这不起作用,因为您的DNS服务器的回复绕过防火墙。 然后,客户将(正确地)放弃这些回应,因为它们与发出的不匹配。
您需要添加另一个规则到您的POSTROUTING表中,以将针对DNS服务器的数据包SNAT发送到路由器的IP。
或者,将DNS服务器放在单独的networking上将解决问题,因为响应将被迫通过路由器。
为什么不把DNSstream量放到任何外部DNS服务器? 那些明确指定外部服务器的人只会注意到,这是行不通的。