iptables'重写'在某个端口上的请求?

好吧,我的情况基本上是这样的…我有一个框,充当路由器,有2个接口, eth0eth1eth1是我的上行链路,就是这个盒子通过它获得一个互联网连接的接口。 eth0是下行链路,也就是其他设备/交换机/无线AP /您将连接的接口。

我想以某种方式,使用iptables,使所有请求端口53任何源于eth0地址,而不是发送到运行在127.0.0.1的DNS服务器,当该DNS服务器发送答复时,发送请求应该看起来像回复来自他们实际发送数据包的地址。

例如,假设有一台连接eth0的机器configuration为使用8.8.8.8作为DNS服务器。 路由器的DNS服务器有一个example.com的logging,指向192.0.2.1 。 连接到eth0的机器上有人运行dig example.com @8.8.8.8 。 他们得到的答复是来自8.8.8.8 ,但ACTUALLY来自路由select框,并且这个答复表示example.com的Alogging是192.0.2.1

我怎样才能做到这一点?

请注意,这需要适用于任何DNS服务器地址,而不仅仅是8.8.8.8

你需要特定的软件来执行这个,它被认为是邪恶的。 通过对DNSstream量进行中间人攻击来打破互联网正是为什么像DNSSec这样的东西被推出的原因。

如果您打算查看,您可能需要检查“DNS拦截”和“透明DNS代理”的结果。 一些想到的东西是梭子鱼防火墙, dnschef ,也许是各种网页过滤套件提供这个function。