• This forum has a zero tolerance policy regarding spam. If you register here to publish advertising, your user account will be deleted without further questions.

Shorewall: IPSec Umleitung

Hexcode

New Member
Hallo zusammen,

folgendes Konstrukt:

- Ich habe Zuhause auf der Fritzbox einen VPN-Tunnel laufen (IPSec, UDP, Ports 4500 und 500). Da diese an einem Telekom-Anschluss angebunden ist erhält man folglich regelmäßig neue IPs
- Das Fritzbox DynDNS ist aktiviert, per CNAME unter meiner eigenen Domäne erreichbar. VPN über diese Domain problemlos möglich.
- Weiterhin ein Webserver mit Shorwall / IPTables laufen.

Ich möchte erreichen, dass ich statt der Domain (mit ständig wechselndet IP) die fixe IP des Servers angeben kann und dann die Daten an Port 4500 und 500 durgereicht werden an meine Fritzbox zuhause.
Das hatte ich jetzt simple per DNAT-Route in Shorewall (/etc/shorewall/rules.conf) probiert.
Code:
ACCEPT          net       $FW           UDP     500
ACCEPT          net       $FW           UDP     4500
DNAT            net       net:xx.xx.xx.xxx:500         UDP     500
DNAT            net       net:xx.xx.xx.xxx:4500        UDP     4500
Jedoch funktioniert es so scheinbar nicht, sowohl mit, als auch ohne die vorhergehende ACCEPT-Rules kommen keine UDP Pakete durch :/
Hat einer eine Idee, wie ich die UDP Pakete einfach und simpel vom Server zur Fritzbox bekomme? Im ersten Schritt über die IP, später nach Möglichkeit über die Domain?

Grüße
Hex
 
IPSec benutzt auch Protokoll 50 (ESP) für die Phase I-Schlüsselaushandlung.
Das müsstest du natürlich zusätzlich auch forwarden.
 
Laut diversen Foren und auch laut Sicherheitsübersicht der Box selbst braucht die Fritzbox nur Port 500 und 4500.
ESP liegt hier scheinbar auf Port 500.
 
Was mir gerade auffällt: Du machst ein DNAT.
Damit bleibt die Source-IP erhalten und genau das wird dir dein Hoster wegfiltern (hoffentlich).
Probier mal, zusätzlich auch ein SNAT zu machen.
 
Die beiden Ports sollten ausreichen, wenn ESP nicht funktioniert, kann man es ein UDP-Paketen verpacken - dafür ist Port 4500 da. Das Problem dürfte aber daran liegen, dass du nur in einer Richtung NAT einsetzt, d.h. mit DNAT schreibst du meines Wissens die IP-Adresse des VPN-Servers auf die der Fritzbox um. Die Fritzbox sieht dann aber als Quell-Adresse weiter die IP des Clients und schickt ihre Pakete direkt dort hin statt über den Webserver. Du leitest also nur eine Richtung, mußt aber beide umleiten.
Besser wäre es vermutlich, auf dem Webserver einen VPN-Server zu installieren und die Fritzbox sich auch dorthin verbinden zu lassen (die Fritzbox kann ja auch als IPsec-Client arbeiten).
 
Zum Herumspielen könntest du auch kurz versuchen die zwei Ports mit socat umzuleiten:
Code:
$ socat UDP4-RECVFROM:500,fork UDP4-SENDTO:fritz.box:500
$ socat UDP4-RECVFROM:4500,fork UDP4-SENDTO:fritz.box:4500

Gruss
 
Mit socat funktioniert es soweit ohne Probleme... Praktisch auch dabei, dass die Domain aufgelöst wird.

Frage wäre halt, wie man es schafft das jetzt mit Shorewall umzusetzen.
SNAT ist denke ich schon der richtige Ansatz - nur find ich gerade keinen Ansatz das umzusetzen, geht es laut manual ja davon aus, dass man beide Endpunkte kennt.
 
Um das ganze nochmal hochzuholen:

Ich hab jetzt folgende Regeln
Code:
ACCEPT         net       $FW           UDP     500
ACCEPT         net       $FW           UDP     4500
DNAT           net       net:ziel-ip:500         UDP     500
DNAT           net       net:ziel.ip:4500        UDP     4500

Und als SNAT Regel
Code:
SNAT(server-ip)     -               eth0        UDP       500
SNAT(server-ip)     -               eth0        UDP       4500

Das führt in iptables (iptables -t nat -L -n -v) zu folgender Ausgabe
Code:
Chain eth0_masq (1 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 SNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:500 to:server-ip
    0     0 SNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:4500 to:server-ip

und
Code:
Chain net_dnat (1 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:500 to:ziel-ip:500
    0     0 DNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:4500 to:ziel-ip:4500

Sieht mir eigentlich soweit richtig aus :/ Trotzdem klappt es nicht... Einer ne Idee warum? Wenn man vorne pkts und bytes glaubt, dann wäre ja dadurch noch absolut kein paket behandelt wurden :/

//Edit: So gerade gesehen: Die DNAT Rule für Port 500 rgeift scheinbar:
Code:
pkts bytes target     prot opt in     out     source               destination

   12  7872 DNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:500 to:ziel-ip:500
Aber eigentlich müsste dann ja in gleichem Maße die SNAT-Regel greifen, was nicht der Fall ist :/

//Edit 2: Ahhh - das Log sagt "Shorewall:FORWARD:REJECT:IN=eth0 OUT=eth0" klar dass dann das SNAT nicht greifen kann.

//Edit 3: Auch wenns vermutlich niemanden interessiert: Die Lösung war ein "routeback" als Option zum Interface hinzuzufügen, jetzts klappts.
 
Last edited by a moderator:
Back
Top