DNAT-Setup mit OpenVPN

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
Benutzeravatar
Natureshadow
Beiträge: 2157
Registriert: 11.08.2007 22:45:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Radevormwald
Kontaktdaten:

DNAT-Setup mit OpenVPN

Beitrag von Natureshadow » 01.09.2009 17:32:28

Hallo zusammen,

zum Aufbau eines kleinen "Helpdesks" habe ich auf meinem Notebook einen VNC-Viewer im Listen-Modus laufen. Da ich mit dem Notebook an unterschiedlichen Orten hinter NAT-Routern hänge, aber ständig mit meinem OpenVPN verbunden bin, habe ich mir gedacht, dass man das mit DNAT von meinem Server aus lösen könnte. Ich habe also auf meinem Server (Firewall) zwei Zonen, trans für das Internet und ovpn für das VPN. Die Interfaces sind eth1 und tap0.

In der Shorewall habe ich in /etc/shorewall/interfaces:

Code: Alles auswählen

#ZONE	INTERFACE	BROADCAST	OPTIONS
trans   eth1            detect          nosmurfs,tcpflags,blacklist,routeback
ovpn    tap0            detect          nosmurfs,tcpflags,routeback
(und noch diverse andere).

Das OpenVPN ist sogar (per Eintrag in /etc/shorewall/masq) hinter dem NAT gemasqueradet:

Code: Alles auswählen

#INTERFACE              SUBNET          ADDRESS         PROTO   PORT(S) IPSEC
eth1                    tap0
Und schließlich in /etc/shorewall/rules die alles entscheidende Eintrag:

Code: Alles auswählen

#ACTION SOURCE          DEST            PROTO   DEST    SOURCE          ORIGINAL        RATE            USER/
#                                               PORT    PORT(S)         DEST            LIMIT           GROUP
DNAT	trans	ovpn:192.168.136.51	tcp	5500
192.168.136.51 ist mein OpenVPN-Client. Der Port 5550 ist vom Server aus erreichbar, aus der großen weiten Welt bekomme ich aber allenfalls ein "Conenction refused".

Meine Vermutung ist, dass das daran liegt, dass die Antwort-Pakete vom Notebook über eine andere Route und mit anderer Absender-IP zurück kommen. Ich dachte aber, dass das mit der routeback-Option verhindert würde.

Die relevanten Auszüge aus iptables -L -t nat auf der Firewall/OpenVPN-Server zeigen ein eigentlich korrektes Setup:

Code: Alles auswählen

Chain trans_dnat (1 references)Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
trans_dnat  all  --  anywhere             anywhere            

target     prot opt source               destination         
DNAT       tcp  --  anywhere             anywhere            tcp dpt:5500 to:192.168.136.51 
Woran kann das noch haken?

Grüße,
Nik

Benutzeravatar
DynaBlaster
Beiträge: 958
Registriert: 25.03.2004 18:18:57
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: DF0://dynablaster.adf

Re: DNAT-Setup mit OpenVPN

Beitrag von DynaBlaster » 02.09.2009 16:05:52

Was ist mit der FORWARD-CHAIN?

Ich kenne mich mit Shorewall nicht aus, aber es könnte durchaus sein, dass das "Umbiegen" in der PREROUTING-Chain allein nicht ausreicht. Je nachdem, welche Default-Policies Shorewall festlegt (oder wie das Ding iptables überghaupt konfiguriert), kann es sein, dass die FORWARD-Chain deine "umgebogenen" Pakete blockiert, sobald diese dort ankommen.

Eine entsprechende Regel für iptables sähe dann in etwa so aus:

Code: Alles auswählen

iptables -A FORWARD -i eth1-o tap0 -p TCP -d 192.168.136.51--dport 5500 -j ACCEPT
Siehe dazu auch: http://debianforum.de/forum/viewtopic.p ... 30#p615629

Benutzeravatar
Natureshadow
Beiträge: 2157
Registriert: 11.08.2007 22:45:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Radevormwald
Kontaktdaten:

Re: DNAT-Setup mit OpenVPN

Beitrag von Natureshadow » 02.09.2009 17:51:43

Hallo,

die Policy der FORWARD-Chain ist tatsächlich DROP:

Code: Alles auswählen

server:/home/nik# iptables -L FORWARD
Chain FORWARD (policy DROP)
target     prot opt source               destination         
eth0_fwd   all  --  anywhere             anywhere            
eth1_fwd   all  --  anywhere             anywhere            
tap0_fwd   all  --  anywhere             anywhere            
tap1_fwd   all  --  anywhere             anywhere            
ppp_fwd    all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
Drop       all  --  anywhere             anywhere            
LOG        all  --  anywhere             anywhere            LOG level info prefix `Shorewall:FORWARD:DROP:' 
DROP       all  --  anywhere             anywhere            
In eth1_fwd sieht das Ganze dann so aus:

Code: Alles auswählen

server:/home/nik# iptables -L eth1_fwd
Chain eth1_fwd (1 references)
target     prot opt source               destination         
dynamic    all  --  anywhere             anywhere            state INVALID,NEW 
smurfs     all  --  anywhere             anywhere            state INVALID,NEW 
tcpflags   tcp  --  anywhere             anywhere            
trans2lan  all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
trans2msvpn  all  --  anywhere             anywhere            
trans2ovpn  all  --  anywhere             anywhere            
trans2vfrst  all  --  anywhere             anywhere          
Und letztendlich der EIntrag in trans2ovpn:

Code: Alles auswählen

server:/home/nik# iptables -L trans2ovpn  
Chain trans2ovpn (1 references)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     tcp  --  anywhere             192.168.136.51      tcp dpt:5500 
Reject     all  --  anywhere             anywhere            
reject     all  --  anywhere             anywhere            
Das sieht für mich alles so aus als würde es passen.

-nik

Antworten