好的,我的情况基本上是这样的...我有一个充当路由器的盒子,有 2 个接口,eth0
并且eth1
。eth1
是我的上行链路,也就是盒子通过该接口获取 Internet 连接。eth0
是下行链路,也就是另一个设备/交换机/无线 AP /您将要连接的接口。
我希望以某种方式使用 iptables,使得所有源自 的对端口 53 的任何地址的请求都eth0
应该发送到运行的 DNS 服务器127.0.0.1
,并且当该 DNS 服务器发送答复时,发送请求的机器应该看起来好像答复来自他们实际发送数据包的地址。
例如,假设有一台连接到的机器eth0
配置8.8.8.8
为 DNS 服务器。路由机器的 DNS 服务器有一个example.com
指向的记录192.0.2.1
。连接到的机器上的某个人eth0
运行dig example.com @8.8.8.8
。他们收到一个回复,看似来自8.8.8.8
,但实际上来自路由框,并且这个回复表明 example.com 的 A 记录是192.0.2.1
。
我怎样才能做到这一点?
请注意,这需要适用于任何 DNS 服务器地址,而不仅仅是8.8.8.8
。
答案1
您需要使用特定软件来执行此操作,这被视为邪恶行为。通过对 DNS 流量进行中间人攻击来破坏互联网正是推出 DNSSec 等产品的原因。
如果您有意查看,您可能需要查看“DNS 拦截”和“透明 DNS 代理”的结果。我想到的一些产品是 Barracuda 防火墙,dnschef
也许还有各种 Web 过滤套件提供此功能。