У меня есть следующая настройка цепочки с помощью kube-proxy в моих iptables на всех моих узлах.
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 я отбрасываю соединения (ложная повторная передача TCP), поступающие с исходных портов ниже 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
Есть ли способ «указать» iptables, kube-proxy и / или ядру ограничить диапазон исходного порта с помощью iptables masquarde?
В документация MASQUERADE документирует --to-ports
вариант:
Параметр --to-ports используется для установки исходного порта или портов, используемых для исходящих пакетов. ...