Încerc să direcționez traficul clientului către un cluster Kubernetes NodePort care ascultă 192.168.1.100.30000
.
Nevoile clientului să facă o cerere către 192.168.1.100.8000
așa că am adăugat următoarea regulă REDIRECT în iptables:
iptables -t nat -I PREROUTING -p tcp --dst 192.168.1.100 --dport 8000 -j REDIRECT --la-port 30000
Eliberez apoi o buclă către 192.168.1.100:8000
cu toate acestea, în tcpdump văd un alt port:
# tcpdump -i lo -nnvvv gazdă 192.168.1.100 și portul 8000
tcpdump: ascultare pe lo, tip link EN10MB (Ethernet), dimensiunea capturii 262144 octeți
[Interfață: lo] 20:39:22.685968 IP (to 0x0, ttl 64, id 20590, offset 0, flags [DF], proto TCP (6), lungime 40)
[Interfață: lo] 192.168.1.100.8000 > 192.168.1.100.49816: Flags [R.], cksum 0xacda (corect), seq 0, ack 3840205844, win 0, length 0
[Interfață: lo] 20:39:37.519256 IP (to 0x0, ttl 64, id 34221, offset 0, flags [DF], proto TCP (6), lungime 40)
M-aș aștepta ca tcpdump să arate ceva de genul
192.168.1.100.8000 > 192.168.1.100.30000
Cu toate acestea, afișează și provoacă o eroare de conexiune refuzată, deoarece niciun proces nu este listat 192.168.1.100.49816
.
192.168.1.100.8000 > 192.168.1.100.49816
Folosesc un mediu de testare, așa că nu am acces la dispozitive de la distanță, de aceea folosesc răsuci
pentru a testa calea iptables REDIRECT.
Există un motiv pentru care adăugarea unei reguli REDIRECT face ca tcpdump să redirecționeze traficul către un alt port decât cel specificat?
Editați | ×:
După @A.B. sugestia a adăugat următoarea regulă OUTPUT:
iptables -t nat -I IEȘIRE -d 192.168.1.100 -p tcp --dport 8000 -j REDIRECT --la-port 30000
iar curl continuă mai departe, numărul de pachete pentru lanțul OUTPUT crește (pachetul lanțului PREROUTING REDIRECT nu a crescut totuși):
2 10 600 REDIRECT tcp -- * * 0.0.0.0/0 192.168.1.100 tcp dpt:8000 porturi redir 30000
Totuși, obținem următoarea eroare:
# curl -vk https://192.168.1.100:8000/v1/api
* Urmează să se conecteze() la portul 192.168.1.100 8000 (#0)
* Se încearcă 192.168.1.100...
* Conectat la 192.168.1.100 (192.168.1.100) portul 8000 (#0)
* Inițializarea NSS cu certpath: sql:/etc/pki/nssdb
* Eroare NSS -12263 (SSL_ERROR_RX_RECORD_TOO_LONG)
* SSL a primit o înregistrare care a depășit lungimea maximă permisă.
* Închiderea conexiunii 0
curl: (35) SSL a primit o înregistrare care a depășit lungimea maximă permisă.
De asemenea, am încercat să adaug o rețea de sistem la distanță, de data aceasta numărul de pachete PREROUTING REDIRECT CHAIN crește după executare curl sistem la distanță...
(dar lanțul de ieșire nu crește):
2 34 2040 REDIRECT tcp -- * * 0.0.0.0/0 172.16.128.1 tcp dpt:8000 porturi redir 30000
Eroare:
# ip netns exec remotesystem curl -vk https://192.168.1.100:8000/v1/api
* Urmează să se conecteze() la portul 192.168.1.100 8000 (#0)
* Se încearcă 192.168.1.100...
* Conexiunea a expirat
* Conectarea eșuată la 192.168.1.100:8000; Conexiunea a expirat
* Închiderea conexiunii 0
curl: (7) Conectarea eșuată la 192.168.1.100:8000; Conexiunea a expirat