NGINX SSL non risponde su IPv6


10

Su un server Debian con nginx, non ricevo risposta da un server Web su HTTPS e IPv6. HTTP funziona bene.

  • netstat riporta la porta 443 in ascolto sull'indirizzo IPv6
  • il firewall è aperto, ipv6scanner.com riporta la porta 443 aperta
  • localmente (su terminale) wget e curl ricevono una risposta corretta, quindi la configurazione di nginx è OK
  • nessun segno di errore da nginx error.log
  • nessun record in access.log quando fallisce, quindi la comunicazione probabilmente non raggiunge il web server
  • DNS va bene. La traduzione funziona e la connessione non funziona anche quando si accede direttamente all'indirizzo IP

Ogni tentativo di connessione dall'esterno (ovvero all'esterno della rete, da Internet) fallisce (browser web, telnet, ipv6-test.com, curl ...). Non c'è alcuna risposta.

Può essere testato su www.ekasparova.eu. Sono all'oscuro. Cos'altro posso controllare?

modificare:

l'output di traceroute6 --mtu www.google.comè il seguente:

traceroute to www.google.com (2a00:1450:4014:800::2004), 30 hops max, 65000 byte packets
1  * F=1500 * *
2  * * *
~
30  * * *

Quindi non arriva mai alla fine ...

EDIT2:

Il mio output ip6tables-save (firewall locale):

# Generated by ip6tables-save v1.6.0 on Wed Oct 17 06:25:40 2018
*filter
:INPUT DROP [32:9320]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:ufw6-after-forward - [0:0]
:ufw6-after-input - [0:0]
:ufw6-after-logging-forward - [0:0]
:ufw6-after-logging-input - [0:0]
:ufw6-after-logging-output - [0:0]
:ufw6-after-output - [0:0]
:ufw6-before-forward - [0:0]
:ufw6-before-input - [0:0]
:ufw6-before-logging-forward - [0:0]
:ufw6-before-logging-input - [0:0]
:ufw6-before-logging-output - [0:0]
:ufw6-before-output - [0:0]
:ufw6-logging-allow - [0:0]
:ufw6-logging-deny - [0:0]
:ufw6-reject-forward - [0:0]
:ufw6-reject-input - [0:0]
:ufw6-reject-output - [0:0]
:ufw6-skip-to-policy-forward - [0:0]
:ufw6-skip-to-policy-input - [0:0]
:ufw6-skip-to-policy-output - [0:0]
:ufw6-track-forward - [0:0]
:ufw6-track-input - [0:0]
:ufw6-track-output - [0:0]
:ufw6-user-forward - [0:0]
:ufw6-user-input - [0:0]
:ufw6-user-limit - [0:0]
:ufw6-user-limit-accept - [0:0]
:ufw6-user-logging-forward - [0:0]
:ufw6-user-logging-input - [0:0]
:ufw6-user-logging-output - [0:0]
:ufw6-user-output - [0:0]
-A INPUT -j ufw6-before-logging-input
-A INPUT -j ufw6-before-input
-A INPUT -j ufw6-after-input
-A INPUT -j ufw6-after-logging-input
-A INPUT -j ufw6-reject-input
-A INPUT -j ufw6-track-input
-A INPUT -j LOG --log-prefix "[IPTABLES] " --log-tcp-options
-A INPUT -j LOG --log-prefix "[IPTABLES] " --log-tcp-options
-A FORWARD -j ufw6-before-logging-forward
-A FORWARD -j ufw6-before-forward
-A FORWARD -j ufw6-after-forward
-A FORWARD -j ufw6-after-logging-forward
-A FORWARD -j ufw6-reject-forward
-A FORWARD -j ufw6-track-forward
-A FORWARD -j LOG --log-prefix "[IPTABLES] " --log-tcp-options
-A FORWARD -j LOG --log-prefix "[IPTABLES] " --log-tcp-options
-A OUTPUT -j ufw6-before-logging-output
-A OUTPUT -j ufw6-before-output
-A OUTPUT -j ufw6-after-output
-A OUTPUT -j ufw6-after-logging-output
-A OUTPUT -j ufw6-reject-output
-A OUTPUT -j ufw6-track-output
-A ufw6-after-input -p udp -m udp --dport 137 -j ufw6-skip-to-policy-input
-A ufw6-after-input -p udp -m udp --dport 138 -j ufw6-skip-to-policy-input
-A ufw6-after-input -p tcp -m tcp --dport 139 -j ufw6-skip-to-policy-input
-A ufw6-after-input -p tcp -m tcp --dport 445 -j ufw6-skip-to-policy-input
-A ufw6-after-input -p udp -m udp --dport 546 -j ufw6-skip-to-policy-input
-A ufw6-after-input -p udp -m udp --dport 547 -j ufw6-skip-to-policy-input
-A ufw6-after-logging-forward -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] "
-A ufw6-after-logging-input -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] "
-A ufw6-before-forward -m rt --rt-type 0 -j DROP
-A ufw6-before-forward -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw6-before-forward -p ipv6-icmp -m icmp6 --icmpv6-type 1 -j ACCEPT
-A ufw6-before-forward -p ipv6-icmp -m icmp6 --icmpv6-type 2 -j ACCEPT
-A ufw6-before-forward -p ipv6-icmp -m icmp6 --icmpv6-type 3 -j ACCEPT
-A ufw6-before-forward -p ipv6-icmp -m icmp6 --icmpv6-type 4 -j ACCEPT
-A ufw6-before-forward -p ipv6-icmp -m icmp6 --icmpv6-type 128 -j ACCEPT
-A ufw6-before-forward -p ipv6-icmp -m icmp6 --icmpv6-type 129 -j ACCEPT
-A ufw6-before-forward -j ufw6-user-forward
-A ufw6-before-input -i lo -j ACCEPT
-A ufw6-before-input -m rt --rt-type 0 -j DROP
-A ufw6-before-input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw6-before-input -m conntrack --ctstate INVALID -j ufw6-logging-deny
-A ufw6-before-input -m conntrack --ctstate INVALID -j DROP
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 1 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 2 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 3 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 4 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 128 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 129 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 133 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 134 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 135 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 136 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 141 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 142 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-input -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 130 -j ACCEPT
-A ufw6-before-input -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 131 -j ACCEPT
-A ufw6-before-input -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 132 -j ACCEPT
-A ufw6-before-input -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 143 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 148 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 149 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-input -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 151 -m hl --hl-eq 1 -j ACCEPT
-A ufw6-before-input -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 152 -m hl --hl-eq 1 -j ACCEPT
-A ufw6-before-input -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 153 -m hl --hl-eq 1 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 144 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 145 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 146 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 147 -j ACCEPT
-A ufw6-before-input -s fe80::/10 -d fe80::/10 -p udp -m udp --sport 547 --dport 546 -j ACCEPT
-A ufw6-before-input -d ff02::fb/128 -p udp -m udp --dport 5353 -j ACCEPT
-A ufw6-before-input -d ff02::f/128 -p udp -m udp --dport 1900 -j ACCEPT
-A ufw6-before-input -j ufw6-user-input
-A ufw6-before-output -o lo -j ACCEPT
-A ufw6-before-output -m rt --rt-type 0 -j DROP
-A ufw6-before-output -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 1 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 2 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 3 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 4 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 128 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 129 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 133 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 136 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 135 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 134 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 141 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 142 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-output -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 130 -j ACCEPT
-A ufw6-before-output -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 131 -j ACCEPT
-A ufw6-before-output -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 132 -j ACCEPT
-A ufw6-before-output -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 143 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 148 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 149 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-output -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 151 -m hl --hl-eq 1 -j ACCEPT
-A ufw6-before-output -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 152 -m hl --hl-eq 1 -j ACCEPT
-A ufw6-before-output -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 153 -m hl --hl-eq 1 -j ACCEPT
-A ufw6-before-output -j ufw6-user-output
-A ufw6-logging-allow -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW ALLOW] "
-A ufw6-logging-deny -m conntrack --ctstate INVALID -m limit --limit 3/min --limit-burst 10 -j RETURN
-A ufw6-logging-deny -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] "
-A ufw6-skip-to-policy-forward -j DROP
-A ufw6-skip-to-policy-input -j DROP
-A ufw6-skip-to-policy-output -j ACCEPT
-A ufw6-track-output -p tcp -m conntrack --ctstate NEW -j ACCEPT
-A ufw6-track-output -p udp -m conntrack --ctstate NEW -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 20 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 21 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 25 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 53 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 80 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 110 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 143 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 587 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 993 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 995 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 8080 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 8081 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 10000 -j ACCEPT
-A ufw6-user-input -p udp -m udp --dport 53 -j ACCEPT
-A ufw6-user-input -p tcp -m multiport --dports 29799:29899 -j ACCEPT
-A ufw6-user-input -p udp -m udp --dport 25 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 8082 -j ACCEPT
-A ufw6-user-limit -m limit --limit 3/min -j LOG --log-prefix "[UFW LIMIT BLOCK] "
-A ufw6-user-limit -j REJECT --reject-with icmp6-port-unreachable
-A ufw6-user-limit-accept -j ACCEPT
COMMIT
# Completed on Wed Oct 17 06:25:40 2018

Edit3:

Grazie all'aiuto di tutti sono stato in grado di convincere l'operatore del datacenter che il problema è nella loro infrastruttura. Il problema era davvero nell'impostazione MTU su un router virtuale nel percorso di Internet.


Outside = Outside the network su un segmento LAN separato o da un computer seduto sullo stesso segmento LAN?
IceMage,

1
@IceMage Outside significa da Internet. Al di fuori della rete. Ho intenzione di modificare la domanda per chiarire
j.kaspar

Hai configurato un firewall sul server? Se il server esegue Linux, l'output di ip6table-savesarebbe rilevante.
Kasperd,

@kasperd Ho aggiunto tutte le regole relative a icmp alla domanda
j.kaspar

@ j.kaspar È l'output ip6tables-saveche volevo vedere. Quel comando produrrà le regole complete.
Kasperd,

Risposte:


19

Hai un problema con MTU.

Ho provato wget -O /dev/null https://www.ekasparova.euosservando il traffico con tcpdump. Questo è quello che ho visto:

19:56:57.048361 IP6 2001:db8::1.47386 > 2a04:f310:100:3:f816:3eff:fea3:4553.443: Flags [S], seq 262121609, win 28800, options [mss 1440,sackOK,TS val 298423713 ecr 0,nop,wscale 7], length 0
19:56:57.087457 IP6 2a04:f310:100:3:f816:3eff:fea3:4553.443 > 2001:db8::1.47386: Flags [S.], seq 2396216876, ack 262121610, win 28560, options [mss 1440,sackOK,TS val 82836580 ecr 298423713,nop,wscale 7], length 0
19:56:57.087490 IP6 2001:db8::1.47386 > 2a04:f310:100:3:f816:3eff:fea3:4553.443: Flags [.], ack 1, win 225, options [nop,nop,TS val 298423723 ecr 82836580], length 0
19:56:57.087692 IP6 2001:db8::1.47386 > 2a04:f310:100:3:f816:3eff:fea3:4553.443: Flags [P.], seq 1:322, ack 1, win 225, options [nop,nop,TS val 298423723 ecr 82836580], length 321
19:56:57.126190 IP6 2a04:f310:100:3:f816:3eff:fea3:4553.443 > 2001:db8::1.47386: Flags [.], ack 322, win 232, options [nop,nop,TS val 82836590 ecr 298423723], length 0
19:56:57.141224 IP6 2a04:f310:100:3:f816:3eff:fea3:4553.443 > 2001:db8::1.47386: Flags [P.], seq 2857:3678, ack 322, win 232, options [nop,nop,TS val 82836594 ecr 298423723], length 821
19:56:57.141301 IP6 2001:db8::1.47386 > 2a04:f310:100:3:f816:3eff:fea3:4553.443: Flags [.], ack 1, win 248, options [nop,nop,TS val 298423736 ecr 82836590,nop,nop,sack 1 {2857:3678}], length 0

I primi 3 pacchetti sono la stretta di mano. Entrambe le estremità annunciano il mss 1440che significa che sono in grado di ricevere pacchetti con 1440 byte di payload TCP, contando anche le intestazioni e ammontano a 1500 byte di traffico IP, che è ciò che Ethernet comunemente supporta.

I prossimi 2 pacchetti sono ciao client e riconoscimento che è stato ricevuto dal server.

Gli ultimi 2 pacchetti sono dove le cose diventano interessanti. Per impostazione predefinita, tcpdumpmostra i numeri di sequenza relativi, che in questo caso facilitano la lettura della cattura. Nel pacchetto dal server questa è la parte interessante seq 2857:3678. Vediamo un salto da 1a 2857che significa che c'è un gap di 2856 byte, che il cliente non ha ancora ricevere. 2856 byte corrispondono a due pacchetti di 1428 byte. La differenza tra 1440 e 1428 è la dimensione di un'opzione timestamp.

Quindi, il server ha inviato il ciao del server diviso in 3 pacchetti. Ma i primi due erano troppo grandi per la rete e non venivano consegnati al client.

Nel pacchetto finale da client a server vediamo questo sack 1 {2857:3678}. Si tratta di un riconoscimento selettivo inviato dal client che informa il server che esiste una lacuna nei dati che ha ricevuto finora.

Probabilmente il server continua a inviare ripetutamente i due pacchetti persi. Ma non importa quante volte ritrasmette gli stessi due pacchetti, rimangono troppo grandi per la rete. E probabilmente un router sul percorso invia un messaggio di errore al server per informarlo che i pacchetti sono troppo grandi e devono essere ritrasmessi in pacchetti più piccoli.

Se il server ha ricevuto quei messaggi di errore, ritrasmetterebbe i pacchetti più piccoli, se necessario. E ricorderebbe il PMTU più piccolo in modo tale che nelle successive richieste non debba ripetere questo passaggio di scoperta.

Una possibile spiegazione di tutto ciò è che si dispone di un firewall configurato in modo errato che rilascia tutti i messaggi di errore che informano il server che è necessario ritrasmettere i dati in pacchetti più piccoli.


1
Interessante. Grazie! Quei messaggi di errore - Immagino sia il protocollo ICMP ... C'è un modo per testarlo? Il firewall sul server e il firewall tra il server e Internet dovrebbero essere aperti per tutte le comunicazioni ICMP.
j.kaspar,

@ j.kaspar Quali sono i firewall? Come sono configurati? Come li hai testati?
Michael Hampton,

@MichaelHampton esiste un firewall iptables installato direttamente sul server. Il secondo appartiene al datacenter e sono in grado di gestirne le regole. Non so davvero come testare l'ICMP. Ma le regole su entrambi sono impostate ovunque <-> ovunque consentito per ICMP
j.kaspar

1
@ j.kaspar Su un server Linux, provare a traceroute6 --mtu www.google.comcercare F=####le righe di output inserite o quelle di output in cui non viene restituita alcuna risposta. A pensarci bene, basta eseguirlo e modificare la domanda con l'output.
Michael Hampton,

@MichaelHampton Fatto. Tuttavia non sono sicuro di come interpretare il risultato. Ciò significa che la comunicazione non passa affatto il secondo hop?
j.kaspar,

1

Sono d'accordo con @kasperd che si tratta di un problema MTU. Ad esempio, per impostazione predefinita wget -6 -O/dev/null http://www.ekasparova.eunon funzionerebbe (verrebbe reindirizzato brevemente https://www.babysoul.cz/sullo stesso IP, ma si bloccherebbe sul prossimo pacchetto più grande). Quindi ho forzato MSS ridotto per il tuo host:

ip -6 ro add 2a04:f310:100:3:f816:3eff:fea3:4553 advmss 1000 via $MY_GW

e dopo che wgetfunziona normalmente. Quindi, è un problema di MTU. Il confronto tra l'output di mtr -6 -n --psize 1410 www.ekasparova.eu(che funziona) mtr -6 -n --psize 1411 www.ekasparova.euindicherebbe che il problema è o sul tuo host 2a04:f310:100:3:f816:3eff:fea3:4553o sul suo monte a2a04:f310:100::125

Cosa potresti fare come soluzione alternativa (oltre a contattare il tuo upstream):

Verifica a quale dimensione del pacchetto si rompe (ad es. wget -6 -O/dev/null http://v6.testmyipv6.com/MTUtest/1500.datProbabilmente non funzionerà per te mentre dovrebbe, ma wget -6 -O/dev/null http://v6.testmyipv6.com/MTUtest/1000.datfunzionerà bene), quindi:

  • (peggio) bloccare il tuo MSS per il percorso IPv6 predefinito (come ho fatto sopra). Si noti che funzionerà solo per TCP; ad esempio i pacchetti DNS UDP verranno comunque interrotti, oppure
  • (meglio) ridurre la MTU dell'interfaccia (ad esempio ifconfig eth0 mtu 1200). Questo dovrebbe funzionare per tutti i pacchetti. Il problema è che se qualcosa sulla strada ha un MTU ancora più basso, non sarai in grado di comunicare con loro. E la riduzione dell'MTU comporterà prestazioni leggermente inferiori (non un grosso problema a meno che tu non sia un grande sito di solito)
  • (migliore) prova se la rimozione del firewall IPv6 (il tuo e al tuo upsteam) aiuta; e quando lo scopri, prova a rimetterlo insieme passo dopo passo senza interrompere la scoperta di PMTU, fino a quando non trovi una linea problematica. Il problema è che richiede più lavoro e cooperazione da parte del tuo ISP (e l'apertura del firewall potrebbe renderti vulnerabile per il momento).

Ridurre MSS sulla rotta predefinita non è un cattivo suggerimento. È qualcosa che ho fatto negli ambienti di produzione per aggirare i problemi MTU nelle reti di altre persone. Non vado a partire da 1000 però. 1220 è abbastanza piccolo da mantenere il pacchetto completo entro i 1280 byte che IPv6 garantisce di funzionare end-to-end. Tuttavia, il problema in questione non sarebbe stato mitigato riducendo MSS sulla route predefinita in quanto influisce solo sulle dimensioni dei pacchetti in una direzione.
Kasperd,

Si può manipolare l'MSS in transito (dovrebbe essere possibile avere a che fare con ip6tables). Non dovresti farlo, ma si scopre che bloccare l'MSS in transito a un massimo di 1220 è una soluzione molto efficiente per i problemi MTU. E può essere fatto su entrambi gli endpoint o su qualsiasi router intermedio e mitigherà i problemi MTU per TCP in entrambe le direzioni.
Kasperd,

La riduzione dell'MTU su un endpoint influenzerà l'MSS in uscita e limiterà anche i pacchetti inviati anche se si è ricevuto un MSS più elevato. Pertanto, un MTU inferiore a un endpoint può mitigare i problemi MTU per TCP in entrambe le direzioni. Tuttavia, aiuta UDP solo in una direzione. E ridurre l'MTU sui router intermedi può mitigare il problema MTU o introdurre nuovi problemi MTU a seconda delle circostanze. Quindi ridurre la MSS è l'unica soluzione che può aiutare senza introdurre potenzialmente nuovi problemi MTU.
Kasperd,

@kasperd non dovrebbe abbassare l'MSS da un lato per il flusso di traffico in entrambi i modi, poiché viene negoziato (come MSS inferiore) per l'intera sessione TCP durante l'handshake a 3 vie? Per quanto riguarda l'abbassamento dell'MTU e la rottura degli UDP in arrivo, mentre è vero che non risolverà il problema, non dovrebbe creare ulteriori problemi poiché quegli UDP troppo grandi non funzionerebbero comunque (poiché il suo upstream interrotto li lascerebbe comunque) .
Matija Nalis,

1
No. MSS è negoziato indipendentemente per le due direzioni. Ciascuna parte conosce il massimo che è disposto a inviare e indica all'altra estremità il massimo che è disposto a ricevere. Quando imposti advmss, influisci solo sulla dimensione dei segmenti che riceverai e non sui segmenti che invierai. Il massimo che sei disposto a inviare non viene comunicato, perché non è necessario. Entrambi derivano il loro valore predefinito dall'MTU, con cui uno dei due può essere sostituito advmss. Non conosco un modo per una voce di routing di ignorare l'altra, ma se c'è un modo, mi piacerebbe imparare.
Kasperd,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.