Linux   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了linux – 如何复制传入的DNS数据包并使用iptables将它们发送到不同的名称服务器?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

编辑:tldr:我想使用TEE和NAT来克隆UDP流量.我并不担心处理回复.我理想情况下不想安装新软件.我正在使用TEE成功发送到本地段(127.0.0.2),然后我想要NAT流量到WAN. 我在我的Debian服务器上使用bind9监听端口53.我有一个外部客户端向所述服务器发出DNS请求.所有这一切都很好.我想在端口53上复制传入的DNS请求,然后将它们发送到8.8.8.8.注意单词copy.
@H_874_15@编辑:tldr:我想使用TEE和NAT来克隆UDP流量.我并不担心处理回复.我理想情况下不想安装新软件.我正在使用TEE成功发送到本地段(127.0.0.2),然后我想要NAT流量到WAN.

我在我的Debian服务器上使用bind9监听端口53.我有一个外部客户端向所述服务器发出DNS请求.所有这一切都很好.我想在端口53上复制传入的DNS请求,然后将它们发送到8.8.8.8.注意单词copy.

从大量谷歌搜索和阅读SU,我发现最常建议的方法是使用iptables TEE和NAT.我有TEE工作得很好,这是我的命令:

iptables -t mangle -A POSTRoutING -p udp -d 127.0.0.1 --dport 53 -j TEE --gateway 127.0.0.2

我验证我在127.0.0.2:53收到了netcat的DNS请求副本.到现在为止还挺好.

现在,我需要更改目标IP.我尝试用以下方法完成此任务:

iptables -t nat -A PRERoutING -p udp -d 127.0.0.2 --dport 53 -j DNAT --to 8.8.8.8

我使用tcpdump监视传出流量为8.8.8.8.没有.我想知道:也许我需要更改源IP地址,以便内核不会丢弃此数据包,因为它到达127.0.0.2,但源IP设置为我的外部DNS客户端的IP.为什么不?

iptables -t nat -A POSTRoutING -p udp -d 127.0.0.2 --dport 53 -j SNAT --to DNS_SERVERS_PUBLIC_IP

tcpdump仍然没有显示任何内容.

我有IP转发:

$sysctl net.ipv4.ip_forWARD
net.ipv4.ip_forWARD = 1

我几乎没有想法,并会感谢任何和所有的帮助.谢谢.

解决方法

没有什么是不可能的,用iptables.
# iptables -t nat -L -v --line-numbers -n
Chain PRERoutING (policy ACCEPT 0 packets,0 bytes)
num   pkts bytes target     prot opt in     out     source               desTination         
1        5   281 MARK       udp  --  docker0 *       0.0.0.0/0            172.17.0.1           udp dpt:53 MARK set 0xc0fe
2        5   281 TEE        udp  --  docker0 *       0.0.0.0/0            172.17.0.1           udp dpt:53 TEE gw:127.1.2.3
3        3   167 DNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            mark match 0xc0fe to:1.1.1.1:53

我用docker测试它,因为它更容易使用它的界面.请注意,我将这些规则放在Nat preroutIng表中的任何其他规则之前.

要做的是,标记你感兴趣的数据包,然后TEE(复制)该数据包,现在你可以将该数据包DNAT到1.1.1.1.

标记它们,在这里你应该使用你的eth0或eno1,而不是docker0.

iptables -t nat -I PRERoutING 1 -i docker0 -p udp -d 172.17.0.1 --dport 53 -j MARK --set-mark 0xc0fe

复制/开球,转到localhost,规则可以是这样的

iptables -t nat -I PRERoutING 2 -i docker0 -p udp --dst 172.17.0.1 --dport 53 -j TEE --gateway 127.1.2.3

但它也可以是这样的
iptables -t nat -I PRERoutING 3 -p udp -m mark –mark 0xc0fe -j TEE –gateway 127.1.2.3

最后

iptables -t nat -I PRERoutING 3 -p udp  -m mark --mark 0xc0fe -j DNAT --to-desTination 1.1.1.1:53

嘿,所以你是在正确的道路上,除了在mangle表中使用TEE,这里我在Nat表上使用TEE和DNAT,除了更容易调试和处理规则更改之外不需要MARK.另外一个错误就是让DNAT规则对你认为TEE应该采取的行为起作用,而是TEE和DNAT应该在相同的条件下行动.但是Ill在这里留下了标记规则,只是为了与货物崇拜者一起玩乐.

缩短形式iptables -t nat -I PRERoutING 1 -i eth0 -p udp –dst 172.17.0.1 –dport 53 -j TEE –gateway 127.3.3.3iptables -t nat -I PRERoutING 2 -i eth0 -p udp –dst 172.17.0.1 –dport 53 -j DNAT –to-desTination 1.1.1.1:53

大佬总结

以上是大佬教程为你收集整理的linux – 如何复制传入的DNS数据包并使用iptables将它们发送到不同的名称服务器?全部内容,希望文章能够帮你解决linux – 如何复制传入的DNS数据包并使用iptables将它们发送到不同的名称服务器?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。