Tengo la siguiente cadena configurada por kube-proxy en mis iptables en todos mis nodos.
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 */
Todos mis nodos están detrás de un firewall estático/sin estado del proveedor. Con la siguiente configuración de reglas.
tcp_established: &tcp_established
name: tcp established
ip_version: ipv4
dst_port: '32768-65535'
action: accept
protocol: tcp
tcp_flags: ack
Lo que significa que el tráfico desde cualquier lugar está permitido en los puertos 32768-65535 TCP/ACK solo para garantizar conexiones inversas del tráfico saliente.
En todos mis nodos (Ubuntu 16.04) está configurada la siguiente configuración del sistema.
cat /proc/sys/net/ipv4/ip_local_port_range
32768 60999
Cuando intento acceder a un servidor remoto, por ejemplo, a través de curl y http, se me caen las conexiones (retransmisión espuria TCP), provenientes de puertos de origen inferiores a 32768.
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
¿Hay alguna manera de "decirle" a iptables, kube-proxy y/o kernel que limiten el rango del puerto de origen usando iptables masquarde?
Respuesta1
Eldocumentación de MASCARADAdocumenta la --to-ports
opción:
La opción --to-ports se utiliza para configurar el puerto o puertos de origen que se utilizarán en los paquetes salientes. ...