使用iptables将端口53上的127.0.0.1到127.0.0.1的stream量redirect到端口5300

我在端口5300上运行本地DNS服务器来开发一个软件。 我需要我的机器使用该DNS,但我不能告诉/etc/resolv.conf检查不同的端口。 我search了一下谷歌,我没有find一个解决scheme。

我在/etc/resolv.conf上设置了127.0.0.1作为域名服务器。 这是我的整个/etc/resolv.conf:

nameserver 127.0.0.1

你能告诉我如何redirect端口53上的出站stream量到另一个端口?

我尝试了以下,但它没有工作:

iptables -t nat -A PREROUTING -p tcp --dport 53 -j DNAT --to 127.0.0.1:5300 iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to 127.0.0.1:5300

以下是iptables -t nat -L -v -n (带build议的规则)的输出:

 Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 REDIRECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 redir ports 5300 0 0 REDIRECT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:53 redir ports 5300 Chain POSTROUTING (policy ACCEPT 302 packets, 19213 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 302 packets, 19213 bytes) pkts bytes target prot opt in out source destination 

在Andres指出我需要一些本地数据包的其他规则之后,我发现了一些解决scheme。

本地生成的数据包在读取OUTPUT链时忽略nat表的PREROUTING链。 接下来的规则,我解决了我的问题:

 iptables -t nat -A OUTPUT -p tcp --dport domain -j DNAT --to-destination 127.0.0.1:5300 iptables -t nat -A OUTPUT -p udp --dport domain -j DNAT --to-destination 127.0.0.1:5300 

有了这些规则,我甚至不需要改变我的/etc/resolv.conf。

尝试以下操作:

iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 53 -j REDIRECT – 到端口5300