iptables 端口转发规则仅适用于第一个响应数据包

iptables 端口转发规则仅适用于第一个响应数据包

我有以下情况:

+---------------+             +-------------+             +-------------------------+  
|      PC       |             |    Linux    |             |          Router         | 
| 192.168.1.162 | <---------> | 192.168.1.2 | <---------> | 192.168.1.1      WAN_IP | <------ WAN
+---------------+      A      +-------------+             +-------------------------+     B
  Server on TCP                  Have full                      Have no access
   port 9876                      access                      (multiple TCP ports
                                                             forwarded to "Linux")

我的局域网中有一台 PC(在 下192.168.1.162),其端口上有 HTTP 服务器9876。在同一个局域网中,我有一台 Linux 机器(在 下192.168.1.2),我可以完全访问它。然后是连接到互联网的路由器(在 下192.168.1.1),除了给提供商发送电子邮件并要求他们将 X 端口转发到 Y IP 地址外,我无法控制它。因此,我提前要求他们将一系列 TCP 端口转发到我的 Linux 机器,这样我就可以决定如何处理它们,而不必等待。

我现在试图实现的是从 WAN TCP 端口1234到我的 PC TCP 端口的简单 TCP 端口转发9876。我的 iptables 规则:

iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 1234 -j DNAT --to-destination 192.168.1.162:9876
iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.162 --dport 9876 -j SNAT --to-source 192.168.1.2

这些规则只起到部分作用,也就是说,只有 PC 发送的第一个响应数据包会被重定向到 WAN,后面的数据包则不会。具体来说,我在 A 点嗅探流量时看到的内容如下:

Point A:
Source          Destination       Packet
192.168.1.2     192.168.1.162     SYN
192.168.1.162   192.168.1.2       SYN+ACK
192.168.1.2     192.168.1.162     ACK
192.168.1.2     192.168.1.162     PSH+ACK (HTTP GET request)
192.168.1.162   192.168.1.2       PSH+ACK (first part of HTTP response, routed)
192.168.1.162   192.168.1.2       ACK (remainder of HTTP response, not routed)
192.168.1.162   192.168.1.2       ACK (remainder of HTTP response, not routed)
192.168.1.162   192.168.1.2       ACK (remainder of HTTP response, not routed)

我通过嗅探“点 B”处的数据包来确定哪些数据包会被路由,哪些不会被路由。

IP 转发已启用(cat /proc/sys/net/ipv4/conf/eth0/forwardingcat /proc/sys/net/ipv4/ip_forward)。

相关内容