我目前有以下规则:
iptables -A PREROUTING -t nat -p udp -i eth0 -d 168.120.50.119 --dport 8080 -m statistic --mode random --probability 0.33 -j DNAT --to-destination 167.120.10.131:8080
iptables -A PREROUTING -t nat -p udp -i eth0 -d 168.120.50.119 --dport 8080 -m statistic --mode random --probability 0.33 -j DNAT --to-destination 167.120.10.132:8080
iptables -A PREROUTING -t nat -p udp -i eth0 -d 168.120.50.119 --dport 8080 -m statistic --mode random --probability 0.33 -j DNAT --to-destination 167.120.10.133:8080
现在我想知道如何处理这些包裹并将它们再次发送到另一个地址。
我曾尝试过这个:
iptables -t nat -I POSTROUTING -p udp -s 167.120.10.131 --sport 8080 -j SNAT --to 72.32.229.66:7777
iptables -t nat -I POSTROUTING -p udp -s 167.120.10.132 --sport 8080 -j SNAT --to 72.32.229.66:7777
iptables -t nat -I POSTROUTING -p udp -s 167.120.10.133 --sport 8080 -j SNAT --to 72.32.229.66:7777
不幸的是,它没有起作用。
72.32.229.66
它将是服务运行的 IP。注意:所有 IP 都位于同一个专用网卡中。
我该如何做呢?
答案1
首先,你解决这个问题的方法是“通过隐蔽性来实现安全性”,这是行不通的。即使你对数据包进行多次 NAT,也没有什么区别。
通过将流量发送到任意地址,仍然可以将流量发送到原始目的地。
您当前的规则集的实际问题在于您SNAT
首先拥有后者的规则。
DNAT
规则本质上是双向的。它们知道两个 UDP IP:端口对之间的关联,DNAT 会自动处理来自上游服务器的回复数据包。添加SNAT
可能会破坏它。
答案2
对于“我知道 iptables 命令,但我不知道数据包到底发生了什么”这类问题,其标准答案是:
- 使用以下工具之一查看数据包(按优先顺序):
wireshark
有 GUI 的地方tshark
(wireshark 的文本界面)tcpdump
(tshark 的前身,说话很粗鲁)
- 不仅在终端节点上执行此操作,还可以在(DYI)路由器或代理上执行此操作
- 如果数据包在某一跳之后神秘地“消失”,且 iptables 中没有给出任何解释:
ip route
在每个节点上;验证后向交通穿过去相同的啤酒花;数据包没有“记忆”,您需要手动将(路由表的)前向条目与后向条目进行匹配。