Keine Verbindung bei Loopback über die WAN-IP

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
syssi
Beiträge: 2951
Registriert: 24.12.2010 16:50:59
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Rheinland

Keine Verbindung bei Loopback über die WAN-IP

Beitrag von syssi » 05.02.2017 17:05:34

Hi,

ich habe Schwierigkeiten mit einer Portweiterleitung, zur Abwechslung mal aus einer anderen Perspektive. ;-) Im lokalen Netzwerk befinden sich zwei Maschinen, sowie eine Fritzbox als Gateway. Auf einer Maschine läuft ein Webserver, der sowohl von außerhalb, als auch innerhalb des Netzwerks über die gleiche Domain angesprochen wird. Die Fritzbox wird dabei als DNS-Server eingesetzt, deshalb gibt sie stumpf immer die gleiche Antwort (die WAN-IP). Dies möchte ich einfach akzeptieren. In beiden Fällen läuft deshalb der Verkehr über die Fritzbox, da die WAN-IP plus Port adressiert wird. Die erste Hürde, welche man nehmen muss, ist die Domain auf der Fritzbox in den Netzwerkeinstellungen unter "DNS-Rebound-Schutz" zu hinterlegen, so dass die Fritzbox die Auflösung der Domain nicht verweigert.

Nun zum Problem: Verbindet man sich von außen, so antwortet der Webserver. Versucht man einen Verbindungsaufbau aus dem lokalen Netzwerk heraus, so erreichen den Webserver zwar Pakete, jedoch bleibt eine Antwort aus. Spare ich mir den Umweg über den Loopback der Fritzbox und adressiere die lokale IP-Adresse, so kommt eine Verbindung zustande. Schaut man am Webserver auf den Verkehr, dann sieht es so aus:

Code: Alles auswählen

# Verbindungsversuch über den lokalen Loopback der Fritzbox
# "telnet example.com 80" == "telnet 93.232.xxx.xxx 80"
16:34:47.822697 24:65:11:yy:yy:yy > 60:50:40:xx:xx:xx, ethertype IPv4 (0x0800), length 74: 93.232.xxx.xxx.39578 > 192.168.1.100.80: Flags [S], seq 634981000, win 29200, options [mss 1452,sackOK,TS val 751829 ecr 0,nop,wscale 7], length 0
16:34:48.824978 24:65:11:yy:yy:yy > 60:50:40:xx:xx:xx, ethertype IPv4 (0x0800), length 74: 93.232.xxx.xxx.39578 > 192.168.1.100.80: Flags [S], seq 634981000, win 29200, options [mss 1452,sackOK,TS val 752080 ecr 0,nop,wscale 7], length 0
16:34:49.921250 24:65:11:yy:yy:yy > 60:50:40:xx:xx:xx, ethertype IPv4 (0x0800), length 74: 93.232.xxx.xxx.39580 > 192.168.1.100.80: Flags [S], seq 2064851007, win 29200, options [mss 1452,sackOK,TS val 752354 ecr 0,nop,wscale 7], length 0
16:34:50.936995 24:65:11:yy:yy:yy > 60:50:40:xx:xx:xx, ethertype IPv4 (0x0800), length 74: 93.232.xxx.xxx.39580 > 192.168.1.100.80: Flags [S], seq 2064851007, win 29200, options [mss 1452,sackOK,TS val 752608 ecr 0,nop,wscale 7], length 0

# Verbindung aus dem Internet auf Port 80
# "telnet example.com 80" == "telnet 93.232.xxx.xxx 80"
16:42:32.765010 24:65:11:yy:yy:yy > 60:50:40:xx:xx:xx, ethertype IPv4 (0x0800), length 74: 7z.zz.zzz.zzz.52264 > 192.168.1.100.80: Flags [S], seq 248381277, win 14600, options [mss 1452,sackOK,TS val 36217946 ecr 0,nop,wscale 7], length 0
16:42:32.765059 60:50:40:xx:xx:xx > 24:65:11:yy:yy:yy, ethertype IPv4 (0x0800), length 74: 192.168.1.100.80 > 7z.zz.zzz.zzz.52264: Flags [S.], seq 26630417, ack 248381278, win 28960, options [mss 1460,sackOK,TS val 110044 ecr 36217946,nop,wscale 8], length 0
16:42:32.789574 24:65:11:yy:yy:yy > 60:50:40:xx:xx:xx, ethertype IPv4 (0x0800), length 66: 7z.zz.zzz.zzz.52264 > 192.168.1.100.80: Flags [.], ack 1, win 115, options [nop,nop,TS val 36217952 ecr 110044], length 0
Eine Idee war, dass die Anwendung zwar antwortet, jedoch über ein andere Gateway läuft. Meine Routen sind jedoch sehr einfach und auf den anderen Interfaces habe ich per tcpdump auch sicherheitshalber mal gelauscht:

Code: Alles auswählen

$ route -n
Kernel-IP-Routentabelle
Ziel            Router          Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.254   0.0.0.0         UG    0      0        0 br0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 br0
Der Linux-Kernel wirft einfach die SYN-Pakete weg. Aber wieso? An welchem Parameter muss ich per sysctl drehen, dass sich das Problem in Luft auflöst? Vielen Dank im Voraus!

Gruß syssi

syssi
Beiträge: 2951
Registriert: 24.12.2010 16:50:59
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Rheinland

Re: Keine Verbindung bei Loopback über die WAN-IP

Beitrag von syssi » 05.02.2017 17:19:48

Ich habe den Eindruck, dass ein

Code: Alles auswählen

# /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 3
net.ipv4.tcp_timestamps = 0
das Problem gelöst hat. Ich verstehe aber nicht warum und lasse mich gerne erleuchten.

mat6937
Beiträge: 2927
Registriert: 09.12.2014 10:44:00

Re: Keine Verbindung bei Loopback über die WAN-IP

Beitrag von mat6937 » 05.02.2017 18:31:33

syssi hat geschrieben: Der Linux-Kernel wirft einfach ...
Ist das eine alte FritzBox bzw. Firmware, die evtl. noch kein Hairpin-NAT (NAT-Loopback) kann?

Versuch mal statt mit telnet, mit:

Code: Alles auswählen

nc -zv 93.232.xxx.xxx 80

syssi
Beiträge: 2951
Registriert: 24.12.2010 16:50:59
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Rheinland

Re: Keine Verbindung bei Loopback über die WAN-IP

Beitrag von syssi » 05.02.2017 19:44:15

Bei der Fritzbox handelt es sich um das letzte Flaggschiff (7390) vom AVM. Netcat bleibt ebenso stehen, wie telnet und wartet auf das ausbleibende Feedback. Auch der Webserver macht alles richtig, wenn ich stattdessen mit netcat auf Port 80 lausche (auf der Webserver-Maschine), dann bekommt die lauschende Prozess nichts vom Versuch des Verbindungsaufbaus mit. Der Kernel verwirft alles "brav".

Antworten