Auf einem Debian-Server mit nginx erhalte ich keine Antwort von einem Webserver über HTTPS und IPv6. HTTP funktioniert gut.
- netstat meldet, dass Port 443 die IPv6-Adresse abhört
- Die Firewall ist geöffnet. IPv6scanner.com meldet, dass Port 443 geöffnet ist
- lokal (über Terminal) erhalten wget und curl eine korrekte Antwort, sodass die Nginx-Konfiguration in Ordnung ist
- Keine Anzeichen eines Fehlers von nginx error.log
- Kein Datensatz in access.log, wenn dies fehlschlägt, sodass die Kommunikation wahrscheinlich nicht den Webserver erreicht
- DNS ist in Ordnung. Die Übersetzung funktioniert und die Verbindung funktioniert auch dann nicht, wenn direkt auf die IP-Adresse zugegriffen wird
Jeder Versuch, eine Verbindung von "außerhalb" (dh außerhalb des Netzwerks, über das Internet) herzustellen, schlägt fehl (Webbrowser, Telnet, ipv6-test.com, Curl ...). Es gibt überhaupt keine Antwort.
Es kann auf www.ekasparova.eu getestet werden. Ich bin ahnungslos. Was kann ich noch überprüfen?
bearbeiten:
Die Ausgabe von traceroute6 --mtu www.google.com
ist wie folgt:
traceroute to www.google.com (2a00:1450:4014:800::2004), 30 hops max, 65000 byte packets
1 * F=1500 * *
2 * * *
~
30 * * *
Es erreicht also nie das Ende ...
edit2:
Meine ip6tables-Save-Ausgabe (lokale Firewall):
# 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:
Dank der Hilfe aller konnte ich den Betreiber des Rechenzentrums davon überzeugen, dass das Problem in seiner Infrastruktur liegt. Das Problem lag wirklich in der MTU-Einstellung auf einem virtuellen Router auf dem Weg zum Internet.
ip6table-save
relevant.ip6tables-save
ich sehen wollte. Dieser Befehl gibt die vollständigen Regeln aus.Antworten:
Sie haben ein MTU-Problem.
Ich habe getestet,
wget -O /dev/null https://www.ekasparova.eu
während ich den Verkehr mit beobachtet habetcpdump
. Das habe ich gesehen:Die ersten 3 Pakete sind der Handschlag. Beide Enden kündigen an,
mss 1440
was bedeutet, dass sie Pakete mit 1440 Byte TCP-Nutzlast empfangen können, wobei auch die Header gezählt werden. Dies entspricht 1500 Byte IP-Verkehr, was Ethernet üblicherweise unterstützt.Die nächsten 2 Pakete sind Client-Hallo und Bestätigung, dass es vom Server empfangen wurde.
In den letzten beiden Paketen werden die Dinge interessant. Standardmäßig
tcpdump
werden relative Sequenznummern angezeigt , die in diesem Fall das Lesen der Erfassung erleichtern. Im Paket vom Server ist dies der interessante Teilseq 2857:3678
. Wir sehen einen Sprung von1
zu,2857
was bedeutet, dass es eine Lücke von 2856 Bytes gibt, die der Client noch nicht empfangen hat. 2856 Bytes entsprechen zwei Paketen mit 1428 Bytes. Der Unterschied zwischen 1440 und 1428 ist die Größe einer Zeitstempeloption.Also schickte der Server den Server Hallo aufgeteilt auf 3 Pakete. Die ersten beiden waren jedoch zu groß für das Netzwerk und wurden nicht an den Client geliefert.
Im letzten Paket vom Client zum Server sehen wir dies
sack 1 {2857:3678}
. Dies ist eine selektive Bestätigung, die vom Client gesendet wird und den Server darüber informiert, dass es eine Lücke in den Daten gibt, die er bisher empfangen hat.Wahrscheinlich sendet der Server die beiden verlorenen Pakete immer wieder. Unabhängig davon, wie oft dieselben zwei Pakete erneut übertragen werden, bleiben sie für das Netzwerk zu groß. Und wahrscheinlich sendet ein Router auf dem Pfad eine Fehlermeldung an den Server zurück und informiert ihn, dass die Pakete zu groß sind und in kleineren Paketen erneut übertragen werden müssen.
Wenn der Server diese Fehlermeldungen empfängt, überträgt er die Pakete nach Bedarf erneut. Und es würde sich an die kleinere PMTU erinnern, so dass sie bei nachfolgenden Anforderungen diesen Erkennungsschritt nicht wiederholen muss.
Eine mögliche Erklärung für all dies ist, dass Sie eine falsch konfigurierte Firewall haben, die alle Fehlermeldungen löscht, die Ihren Server darüber informieren, dass er die Daten in kleineren Paketen erneut übertragen muss.
quelle
traceroute6 --mtu www.google.com
suchenF=####
, in denen überhaupt keine Antwort zurückkommt. Führen Sie es beim zweiten Gedanken einfach aus und bearbeiten Sie Ihre Frage mit der Ausgabe.Ich stimme @kasperd zu, dass es sich um ein MTU-Problem handelt. Zum Beispiel
wget -6 -O/dev/null http://www.ekasparova.eu
würde standardmäßig nicht funktionieren (es würde eine kurze Umleitunghttps://www.babysoul.cz/
auf dieselbe IP erhalten, aber dann würde es am nächstgrößeren Paket hängen bleiben). Dann habe ich MSS für Ihren Host erzwungen:und danach
wget
funktioniert normal. Es ist also ein MTU-Problem. Ein Vergleich der Ausgabe vonmtr -6 -n --psize 1410 www.ekasparova.eu
(was funktioniert) mitmtr -6 -n --psize 1411 www.ekasparova.eu
würde anzeigen, dass das Problem entweder auf Ihrem Host2a04:f310:100:3:f816:3eff:fea3:4553
oder in dessen Upstream bei liegt2a04:f310:100::125
Was Sie als Problemumgehung tun könnten (abgesehen von der Kontaktaufnahme mit Ihrem Upstream):
Testen Sie, bei welcher Paketgröße es kaputt geht (dh
wget -6 -O/dev/null http://v6.testmyipv6.com/MTUtest/1500.dat
es wird wahrscheinlich nicht für Sie funktionieren, solange es sollte, aber eswget -6 -O/dev/null http://v6.testmyipv6.com/MTUtest/1000.dat
wird gut funktionieren), und dann entweder:ifconfig eth0 mtu 1200
). Dies sollte für alle Pakete funktionieren. Das Problem ist, dass Sie nicht mit ihnen kommunizieren können, wenn etwas auf dem Weg eine noch niedrigere MTU hat. Und eine Verringerung der MTU führt zu einer etwas geringeren Leistung (keine große Sache, es sei denn, Sie sind normalerweise eine große Site).quelle
ip6tables
). Sie sollten das nicht tun, aber es stellt sich heraus, dass das Festklemmen des MSS während des Transports auf maximal 1220 eine sehr effiziente Problemumgehung für MTU-Probleme darstellt. Dies kann entweder an einem Endpunkt oder an einem beliebigen Zwischenrouter erfolgen und verringert die MTU-Probleme für TCP in beide Richtungen.advmss
, beeinflussen Sie nur die Größe der Segmente, die Sie empfangen möchten, nicht die Segmente, die Sie senden möchten. Das Maximum, das Sie senden möchten, wird nicht mitgeteilt - da dies nicht erforderlich ist. Beide leiten ihren Standardwert von der MTU ab, einer der beiden kann mit überschrieben werdenadvmss
. Ich weiß nicht, wie ein Routing-Eintrag den anderen überschreiben kann, aber wenn es einen Weg gibt, würde ich gerne lernen.