NGINX SSL nie odpowiada przez IPv6

10

Na serwerze Debian z nginx nie otrzymuję odpowiedzi z serwera WWW przez HTTPS i IPv6. HTTP działa dobrze.

  • netstat zgłasza, że ​​port 443 nasłuchuje na adresie IPv6
  • zapora jest otwarta, ipv6scanner.com informuje, że port 443 jest otwarty
  • lokalnie (przez terminal) wget i curl otrzymują poprawną odpowiedź, więc konfiguracja nginx jest OK
  • brak oznak błędu z nginx error.log
  • brak zapisu w access.log, gdy się nie powiedzie, więc komunikacja prawdopodobnie nie dociera do serwera WWW
  • DNS jest w porządku. Tłumaczenie działa, a połączenie nie działa, nawet jeśli adres IP jest dostępny bezpośrednio

Każda próba połączenia z „zewnętrznego” (czyli poza siecią, z Internetu) kończy się niepowodzeniem (przeglądarka internetowa, telnet, ipv6-test.com, curl ...). W ogóle nie ma odpowiedzi.

Można to przetestować na stronie www.ekasparova.eu. Nie mam pojęcia. Co jeszcze mogę sprawdzić?

edytować:

wynik traceroute6 --mtu www.google.comjest następujący:

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

Więc nigdy nie osiąga końca ...

edycja2:

Moje wyjście ip6tables-save (lokalna zapora ogniowa):

# 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

edycja3:

Dzięki pomocy wszystkich udało mi się przekonać operatora centrum danych, że problem tkwi w ich infrastrukturze. Problem naprawdę polegał na ustawieniu MTU na routerze wirtualnym na drodze do Internetu.

j.kaspar
źródło
Outside = Poza siecią w oddzielnym segmencie LAN, czy z komputera siedzącego w tym samym segmencie LAN?
IceMage,
1
@IceMage Outside oznacza z Internetu. Poza siecią. Mam zamiar edytować pytanie, aby wyjaśnić
j.kaspar
Czy skonfigurowałeś zaporę na serwerze? Jeśli na serwerze działa Linux, wynik ip6table-savebędzie odpowiedni.
kasperd
@kasperd Do pytania dodałem wszystkie reguły związane z icmp
j.kaspar
@ j.kaspar To wyjście, ip6tables-savektóre chciałem zobaczyć. To polecenie wyświetli pełne reguły.
kasperd

Odpowiedzi:

19

Masz problem z MTU.

Testowałem wget -O /dev/null https://www.ekasparova.eupodczas obserwacji ruchu tcpdump. Oto co zobaczyłem:

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

Pierwsze 3 pakiety to uścisk dłoni. Oba końce ogłaszają, mss 1440co oznacza, że ​​są w stanie odbierać pakiety z 1440 bajtami ładunku TCP, licząc również nagłówki, co łącznie daje 1500 bajtów ruchu IP, co zwykle obsługuje Ethernet.

Następne 2 pakiety to hello klienta i potwierdzenie, że zostało odebrane przez serwer.

Ostatnie 2 pakiety są tam, gdzie robi się ciekawie. Domyślnie tcpdumppokazuje względne numery sekwencji, które w tym przypadku ułatwiają odczytanie. W pakiecie z serwera jest to interesująca część seq 2857:3678. Widzimy skok od 1do 2857którego środek znajduje się szczelina 2856 bajtów której klient jeszcze nie otrzymują. 2856 bajtów odpowiada dwóm pakietom po 1428 bajtów. Różnica między 1440 a 1428 jest rozmiarem opcji znacznika czasu.

Tak więc serwer wysłał serwer hello podzielony na 3 pakiety. Ale pierwsze dwa były za duże dla sieci i nie zostały dostarczone do klienta.

Widzimy to w końcowym pakiecie od klienta do serwera sack 1 {2857:3678}. Jest to selektywne potwierdzenie wysyłane przez klienta informujące serwer, że istnieje luka w danych, które otrzymał do tej pory.

Prawdopodobnie serwer ciągle wysyła dwa utracone pakiety w kółko. Ale bez względu na to, ile razy retransmituje te same dwa pakiety, pozostają one zbyt duże dla sieci. I prawdopodobnie router na ścieżce wysyła komunikat o błędzie z powrotem do serwera, informując go, że pakiety są zbyt duże i muszą zostać ponownie przesłane w mniejszych pakietach.

Jeśli serwer otrzyma te komunikaty o błędach, w razie potrzeby retransmituje pakiety mniejsze. I pamięta mniejszą PMTU, tak że przy kolejnych żądaniach nie musi powtarzać tego kroku wykrywania.

Możliwym wyjaśnieniem tego wszystkiego jest to, że masz źle skonfigurowaną zaporę ogniową, która odrzuca wszystkie komunikaty o błędach informujące serwer, że musi ponownie przesłać dane w mniejszych pakietach.

kasperd
źródło
1
Ciekawy. Dziękuję Ci! Te komunikaty o błędach - Myślę, że to protokół ICMP ... Czy istnieje sposób, aby go przetestować? Zapora ogniowa na serwerze i zapora ogniowa między serwerem a Internetem powinny być otwarte dla całej komunikacji ICMP.
j.kaspar
@ j.kaspar Co to są zapory ogniowe? Jak są skonfigurowani? Jak je przetestowałeś?
Michael Hampton
@MichaelHampton jest zapora ogniowa iptables zainstalowana bezpośrednio na serwerze. Drugi należy do centrum danych i jestem w stanie zarządzać jego regułami. Naprawdę nie wiem, jak przetestować ICMP. Ale zasady dla obu są ustawione na dowolne <-> gdziekolwiek dozwolone dla ICMP
j.kaspar
1
@ j.kaspar Na serwerze Linux spróbuj traceroute6 --mtu www.google.composzukać F=####wstawionych do linii wyjściowych lub linii wyjściowych, w których nie ma odpowiedzi. Po zastanowieniu, po prostu uruchom go i edytuj swoje pytanie za pomocą wyniku.
Michael Hampton
@MichaelHampton Gotowe. Nie jestem jednak pewien, jak interpretować wynik. Czy to oznacza, że ​​komunikacja wcale nie przechodzi przez drugi przeskok?
j.kaspar
1

Zgadzam się z @kasperd, że jest to problem MTU. Na przykład domyślnie wget -6 -O/dev/null http://www.ekasparova.eunie działałby (otrzyma krótkie przekierowanie do tego https://www.babysoul.cz/samego adresu IP, ale zawiesi się na kolejnym większym pakiecie). Następnie zmniejszyłem MSS dla twojego hosta:

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

a potem wgetdziała normalnie. To jest kwestia MTU. Porównanie danych wyjściowych mtr -6 -n --psize 1410 www.ekasparova.eu(które działa) mtr -6 -n --psize 1411 www.ekasparova.euwskazuje, że problem występuje albo na twoim hoście, 2a04:f310:100:3:f816:3eff:fea3:4553albo w jego górnej części2a04:f310:100::125

Co możesz zrobić jako obejście (oprócz skontaktowania się z dostawcą):

Sprawdź, przy jakim rozmiarze pakietu się psuje (tzn. wget -6 -O/dev/null http://v6.testmyipv6.com/MTUtest/1500.datPrawdopodobnie nie zadziała dla ciebie, kiedy powinno, ale wget -6 -O/dev/null http://v6.testmyipv6.com/MTUtest/1000.datbędzie dobrze), a następnie:

  • (gorzej) zablokuj MSS dla domyślnej trasy IPv6 (tak jak zrobiłem powyżej). Zauważ, że to działa tylko dla TCP; na przykład pakiety UDP DNS nadal będą uszkodzone, lub
  • (lepiej) zmniejsz MTU interfejsu (na przykład ifconfig eth0 mtu 1200). To powinno działać dla wszystkich pakietów. Problem polega na tym, że jeśli coś po drodze ma jeszcze niższy MTU, nie będziesz w stanie się z nimi komunikować. A obniżenie MTU spowoduje nieco niższą wydajność (nie jest to wielka sprawa, chyba że zazwyczaj jesteś dużą witryną)
  • (najlepiej) spróbuj, jeśli usunięcie zapory ogniowej IPv6 (twojej i twojego zespołu) pomaga; a kiedy się dowiesz, spróbuj złożyć je krok po kroku, nie przerywając odkrycia PMTU, aż znajdziesz problematyczną linię. Problem polega na tym, że wymaga on więcej pracy i współpracy od usługodawcy internetowego (a otwarcie zapory może narazić Cię na niebezpieczeństwo).
Matija Nalis
źródło
Zmniejszenie MSS na domyślnej trasie nie jest złą sugestią. To jest coś, co robię w środowiskach produkcyjnych, aby obejść problemy MTU w sieciach innych osób. Nie schodzę tak nisko jak 1000. 1220 jest wystarczająco mały, aby utrzymać pełny pakiet w 1280 bajtach, co gwarantuje, że IPv6 będzie działać od początku do końca. Jednak problem ten nie zostałby złagodzony poprzez zmniejszenie MSS na domyślnej trasie, ponieważ wpływa on tylko na rozmiary pakietów w jednym kierunku.
kasperd
Można zmienić MSS w tranzycie (powinno być to możliwe ip6tables). Nie powinieneś tego robić, ale okazuje się, że zablokowanie MSS w tranzycie do maksymalnie 1220 jest bardzo skutecznym obejściem problemów MTU. Można to zrobić w punkcie końcowym lub dowolnym routerze między nimi, a to złagodzi problemy MTU dla TCP w obu kierunkach.
kasperd
Obniżenie MTU w punkcie końcowym wpłynie na wychodzący MSS, a także ograniczy wysyłane pakiety, nawet jeśli otrzymałeś wyższy MSS. Zatem niższe MTU w punkcie końcowym może złagodzić problemy MTU dla TCP w obu kierunkach. Jednak pomaga tylko UDP w jednym kierunku. Zmniejszenie MTU między routerami może złagodzić problem MTU lub wprowadzić nowe problemy MTU w zależności od okoliczności. Zmniejszenie MSS to jedyne ograniczenie, które może pomóc bez potencjalnego wprowadzenia nowych problemów MTU.
kasperd
@kasperd nie powinien obniżać MSS z jednej strony dla ruchu przepływającego w obie strony, ponieważ jest negocjowany (jako niższy MSS) dla całej sesji TCP podczas 3-drogowego uzgadniania? Jeśli chodzi o obniżanie MTU i łamanie przychodzących UDP, chociaż prawdą jest, że to nie rozwiąże problemu, nie powinno stwarzać dodatkowych problemów, ponieważ te zbyt duże UDP i tak by nie działały (ponieważ jego zepsuty upstream i tak je upuścił) .
Matija Nalis
1
Nie. MSS jest negocjowany niezależnie dla dwóch kierunków. Każda ze stron zna maksimum, które są skłonne wysłać, i informuje drugą stronę o maksimum, jakie są skłonne otrzymać. Po ustawieniu advmsswpływasz tylko na wielkość segmentów, które otrzymujesz, a nie na segmenty, które będziesz wysyłać. Maksymalna liczba osób, które chcesz wysłać, nie jest przekazywana - ponieważ nie ma takiej potrzeby. Obie wyprowadzają swoją wartość domyślną z MTU, jedną z dwóch można zastąpić advmss. Nie znam sposobu, aby wpis routingu zastąpił inny, ale jeśli istnieje sposób, chciałbym się nauczyć.
kasperd