为包提供 PREROUTING 后,我该如何处理它?iptables

为包提供 PREROUTING 后,我该如何处理它?iptables

我目前有以下规则:

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在每个节点上;验证后向交通穿过去相同的啤酒花;数据包没有“记忆”,您需要手动将(路由表的)前向条目与后向条目进行匹配。

相关内容