有没有办法在 IPtables 中伪装 Src 端口

有没有办法在 IPtables 中伪装 Src 端口

我在所有节点的 iptables 中通过 kube-proxy 设置了以下链。

Chain KUBE-POSTROUTING (1 references)
target     prot opt source               destination
MASQUERADE  all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes service traffic requiring SNAT */ 

我的所有节点都位于提供商的无状态/静态防火墙后面。使用以下规则设置。

tcp_established: &tcp_established
  name: tcp established
  ip_version: ipv4
  dst_port: '32768-65535'
  action: accept
  protocol: tcp
  tcp_flags: ack

这意味着来自任何地方的流量都只允许在端口 32768-65535 TCP/ACK 上运行,以确保来自出站流量的反向连接。

在我的所有节点(Ubuntu 16.04)上都设置了以下系统设置。

cat /proc/sys/net/ipv4/ip_local_port_range
32768   60999

当我尝试通过 curl 和 http 等访问远程服务器时,我会断开来自源端口低于 32768 的连接(TCP 虚假重传)。

3   1.051525000 80→20092 [SYN, ACK] Seq=0 Ack=1 Win=64876 Len=0 MSS=1336 SACK_PERM=1 TSval=1259153497 TSecr=1768475026 WS=128   THETARGETIP THESOURCEIP TCP 74

4   2.079464000 [TCP Spurious Retransmission] 20092→80 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM=1 TSval=1768476055 TSecr=0 WS=128 THESOURCEIP THETARGETIP TCP 74

有没有办法“告诉”iptables、kube-proxy 和/或内核使用 iptables masquarde 来限制源端口的范围?

答案1

MASQUERADE 的文档记录--to-ports选项:

--to-ports 选项用于设置传出数据包使用的源端口。...

相关内容