我在端口 5300 上运行本地 DNS 服务器来开发软件。我需要我的机器使用该 DNS,但我无法告诉 /etc/resolv.conf 检查其他端口。我在 Google 上搜索了一下,但没有找到解决方案。
我在 /etc/resolv.conf 上将 127.0.0.1 设置为名称服务器。这是我的整个 /etc/resolv.conf:
nameserver 127.0.0.1
您能告诉我如何将端口 53 上的出站流量重定向到另一个端口吗?
我尝试了以下操作,但没有效果:
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
以下是(带有建议规则)的输出:
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
答案1
在 Andres 指出我需要一些其他的本地数据包规则后,我通过谷歌搜索找到了解决方案。
本地生成的数据包忽略 nat 表的 PREROUTING 链,同时读取 OUTPUT 链。使用下一条规则,我解决了我的问题:
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。
答案2
请尝试以下操作:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 53 -j REDIRECT --to-port 5300