TLS Handshake wird für einige Websites zurückgesetzt, wenn der OpenWRT-Router verwendet wird
767
Andrey Sapegin
Momentan habe ich ein sehr seltsames Problem mit meinem Router. Ich habe TP-Link TL-WDR4300 rev. 1.7 OpenWRT ausführen 18.06.1.
Das Problem begann ursprünglich vor 1-2 Monaten, als ich OpenWRT 15.05 hatte und die letzte Konfigurationsänderung (vor dem Upgrade auf 18.06.1) am Router vor etwa einem Jahr war.
Vor 1-2 Monaten habe ich festgestellt, dass einige Websites auf ALLEN Geräten (iPhone mit iOS, Android-Handy, Ubuntu-Laptop, Windows-Laptop) in ALLEN Browsern nicht geladen werden. Wenn das Gerät jedoch nicht mit dem WLAN verbunden ist und beispielsweise ein Mobilfunknetz verwendet, wird die Website sofort geladen.
Mein ISP ist die Deutsche Telekom. Ein gutes Beispiel für eine Website, die nicht geladen wird, ist https://telekom.de, die normalerweise erreichbar ist.
Ich habe ein Upgrade auf die neueste stabile OpenWRT-Version durchgeführt und mit der Untersuchung des Problems begonnen. Es gibt keine Pakete in Protokollen oder andere Fehlermeldungen auf dem Router, die sich auf das Problem beziehen. Curl kann den Inhalt einer betroffenen Website (telekom.de) direkt auf dem Router abrufen:
root@OpenWrt:~# curl --tlsv1.0 -v https://telekom.de > GET / HTTP/1.1 > Host: telekom.de > User-Agent: curl/7.60.0 > Accept: */* > < HTTP/1.1 301 Moved Permanently < Date: Sat, 01 Sep 2018 20:56:23 GMT < Server: Apache < Location: https://www.telekom.de/start < Content-Length: 236 < Content-Type: text/html; charset=iso-8859-1 < <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>301 Moved Permanently</title> </head><body> <h1>Moved Permanently</h1> <p>The document has moved <a href="https://www.telekom.de/start">here</a>.</p> </body></html>
Auf allen Kunden hat es immer noch nicht funktioniert:
$ curl --tlsv1.0 -v https://telekom.de * Rebuilt URL to: https://telekom.de/ * Hostname was NOT found in DNS cache * Trying 46.29.100.76... * Connected to telekom.de (46.29.100.76) port 443 (#0) * successfully set certificate verify locations: * CAfile: none CApath: /etc/ssl/certs * SSLv3, TLS handshake, Client hello (1): * Unknown SSL protocol error in connection to telekom.de:443 * Closing connection 0 curl: (35) Unknown SSL protocol error in connection to telekom.de:443
Ich habe versucht, den Windows-Laptop direkt an das PPPoE-Glasfasermodem der Deutschen Telekom anzuschließen, und die Webseiten wurden normal geladen. Ich habe auch einen Windows-Laptop in einen WiFi-Router verwandelt, und alle Clients konnten problematische Websites laden.
Meine ursprüngliche Idee war, dass das Problem möglicherweise mit IPv6 zusammenhängt (ein anderes möglicherweise damit zusammenhängendes Problem ist hier ), und ich habe es konfiguriert (bevor es nicht ordnungsgemäß konfiguriert wurde). Es hat nicht geholfen, und auch das Deaktivieren von IPv6 in den Adaptereinstellungen für den Windows-Client hilft nicht.
Wenn Sie OpenWRT als Router verwenden, versucht der Browser für einige Zeit (1-2 Minuten), einen TLS-Handshake durchzuführen, und zeigt dann die Meldung "Sichere Verbindung fehlgeschlagen" an.
Ausgabe von iptables -L -v (Ich verwende keine standardmäßige OpenWRT-Firewall-Konfiguration, da sie viele Ketten enthält und für mich zu kompliziert ist, daher schreibe ich sie beim Booten erneut mit dem Befehl iptables-restore):
Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 5651 481K ACCEPT all -- lo any anywhere anywhere 137K 17M ACCEPT all -- any any anywhere anywhere ctstate RELATED,ESTABLISHED 184 10370 logdrop all -- any any anywhere anywhere ctstate INVALID 0 0 ACCEPT udp -- pppoe-wan any anywhere anywhere udp dpt:bootpc 0 0 ACCEPT udp -- l2tp-voip any anywhere anywhere udp dpt:bootpc 67318 4219K ACCEPT all -- br-lan any anywhere anywhere 5423 290K logdrop all -- any any anywhere anywhere Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 423K 49M ACCEPT all -- br-lan pppoe-wan anywhere anywhere 0 0 ACCEPT all -- br-lan l2tp-voip anywhere anywhere 0 0 ACCEPT all -- br-lan br-lan anywhere anywhere 1324K 1610M ACCEPT all -- pppoe-wan br-lan anywhere anywhere ctstate RELATED,ESTABLISHED 0 0 ACCEPT all -- l2tp-voip br-lan anywhere anywhere ctstate RELATED,ESTABLISHED 0 0 logdrop all -- any any anywhere anywhere Chain OUTPUT (policy ACCEPT 188K packets, 25M bytes) pkts bytes target prot opt in out source destination Chain logdrop (3 references) pkts bytes target prot opt in out source destination 5607 300K LOG all -- any any anywhere anywhere LOG level warning prefix "dropped: " 5607 300K DROP all -- any any anywhere anywhere
Ausgabe von iptables -t nat -L -v :
Chain PREROUTING (policy ACCEPT 59800 packets, 4849K bytes) pkts bytes target prot opt in out source destination Chain INPUT (policy ACCEPT 39692 packets, 2880K bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 29226 packets, 2171K bytes) pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 2123 packets, 232K bytes) pkts bytes target prot opt in out source destination 35523 2660K MASQUERADE all -- any pppoe-wan anywhere anywhere 2 1098 MASQUERADE all -- any l2tp-voip anywhere anywhere
Update: Nach Anregungen aus einer ähnlichen Frage habe ich versucht, verschiedene MTUs (1400,1476,1480) für pppoe-wan ( ifconfig pppoe-wan mtu xxxx ) einzustellen . Leider hat es nicht geholfen.
"Ich verwende keine OpenWRT-Standardkonfiguration" und was passiert, wenn Sie Ihre Konfiguration sichern, auf die Werkseinstellungen zurücksetzen und die Standardregeln von Luci iptables verwenden?
Tim_Stewart vor 6 Jahren
2
In Ihrem Auszug versucht curl, SSLv3 zu verwenden. SSLv3 ist tot. Es ist höchstwahrscheinlich völlig unabhängig von Ihrem Router.
Daniel B vor 6 Jahren
0
@Daniel B, danke, ich habe die Frage aktualisiert und dort die Ausgabe von curl mit TLS 1.0 gestellt
Andrey Sapegin vor 6 Jahren
0
"--tlsv1.0" ist jetzt veraltet. Bitte ersetzen Sie in Ihrem Post die Ausgabe von curl auf einem Client und das Wireshark-Capture durch eine mit --tlsv1.2 oder zumindest --tlsv1.1.
harrymc vor 6 Jahren
0
Die Wireshark-Aufnahme wurde für Firefox unter Windows durchgeführt. Wenn ich mit --tlsv1.2 oder --tlsv1.1 curl versuche, ist die Ausgabe absolut gleich.
Andrey Sapegin vor 6 Jahren
0
Schönes Detail !!!!!!
Pimp Juice IT vor 6 Jahren
0
Funktioniert die Standardkonfiguration?
SILENT vor 6 Jahren
0
2 Antworten auf die Frage
2
RalfFriedl
Dies scheint ein Problem bei der MTU und der Fragmentierung zu sein. Ethernet-MTU ist 1500, während PPPoE-MTU (1500-8) = 1492 ist.
Das Einstellen der MTU auf dem Router allein hilft nicht. Sie reduzieren die MSS-Größe in ausgehenden Paketen.
Fügen Sie diese Regel hinzu iptables, vorausgesetzt, ppp0Ihre PPPoE-Schnittstelle ist:
-A VORWÄHLEN -o ppp0 -p tcp -m tcp --tcp-Flags SYN, RST SYN -j TCPMSS --clamp-mss-to-pmtu
Eine Alternative ist eine feste Größe:
-A VORWÄHLEN -o ppp0 -p tcp -m tcp -tcp-Flags SYN, RST SYN -j TCPMSS --set-mss 1400
Ja, du hast recht! Ich habe es gerade selbst gefunden und werde eine weitere Antwort mit weiteren Details zur Angelegenheit geben. Sie erhalten immer noch die akzeptierte Antwort und alle Kopfgeldpunkte, vielen Dank!
Andrey Sapegin vor 6 Jahren
0
2
Andrey Sapegin
Wie RalfFriedl bereits schrieb, handelt es sich tatsächlich um das MTU-Problem. Die einfache Änderung der MTU hilft jedoch nicht. PPPoE hat immer weniger MTU als Ethernet, z. B. Ethernet MTU 1488 -> PPPoverEthernet MTU 1480. Selbst wenn der Router die richtige MTU für PPPoE kennt, funktioniert er irgendwie, und die Verbindung wird vom Router selbst, allen Client-Maschinen, hergestellt sendet weiterhin Pakete mit der MTU 1500 und iptables muss wissen, dass eine MTU-Anpassung beim Weiterleiten der Pakete erforderlich ist.
Der wichtige Punkt ist, dass diese mss- Klemmregel am Anfang der FORWARD-Regeln stehen sollte, um zu verhindern, dass Pakete von anderen Regeln erfasst werden (z. B. Conntrack-Regeln usw.).
In meinem Fall ist dies die erste Regel dort:
-A FORWARD -i br-lan -o pppoe-wan -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu