Portforwarding mit IPTABLES

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
jogiebaer
Beiträge: 32
Registriert: 30.10.2012 09:35:23

Portforwarding mit IPTABLES

Beitrag von jogiebaer » 06.07.2015 10:47:54

Hallo,
da ich seit dieser Woche Mitglied, dank meines neues Providers, eines Carrier-Grade NAT bin versuche ich mir einer Lösung zu bauen um dennoch von extern auf meinen Debian Server zu hause im LAN zuzugreifen.
Ich habe einen vServer bei Strato und einen Debian Server zu hause.
Diese habe ich mit openvpn einen Tunnel aufbauen lassen.
Der Ping in beide Richtungen auf die tun Adresse funktioniert.
Jetzt kommt der Moment wo ich eure Hilfe brauche.

Ich habe auf dem vServer noch eine 2. v4 Adresse die ungenutzt ist.
Auf der 1. Adresse liegen die Domains. etc.
Auf die 2. Adresse möchte ich meinen Dyndns Alias weiterleiten. Der vServer soll dann alle Anfragen die an die Dyn Andresse über einen bestimmten Port kommen an den Debian Server im Tunnel weiterleiten und mit diesem kommunizieren.

Ist das möglich und wenn ja wie?

Danke und Grüß
Edit:
Was ich breits rausgefunden habe müsste es mit iptables funktionieren. Ich weiß es nur noch nicht anzuwenden.
Was ich vor habe:
Alle Anfragen auf dem Interface venet0:1 auf Port 1234 sollen weitergeleitet werden auf Interface tun0 Port 1234
So dass die Anfragen Client mit dem Zielclient hinter tun0 kommunizieren kann.

Ich hab jetzt folgendes eingetragen, aber leider funktioniert es nicht.

Code: Alles auswählen

iptables -A PREROUTING -t nat -i venet0:1 -p tcp --dport 1234 -j DNAT --to 172.10.5.1:1234
iptables -A INPUT -p tcp -m state --state NEW --dport 1234 -i venet0:1 -j ACCEPT

eggy
Beiträge: 3334
Registriert: 10.05.2008 11:23:50

Re: Portforwarding mit IPTABLES

Beitrag von eggy » 06.07.2015 20:43:05

So ganz versteh ich nicht, warum du den "Umweg" über den V-Server und Tunnel willst, reicht es Dir nicht die IP vom "Heim-Server" per DynDNS aufzulösen? Die "Ausfallzeit" beim Ip-Wechsel liegt je nach eingestellter Cachezeit bei vielleicht 5 Min, das ist für die meisten Anwendungsfälle doch locker vertretbar.

jogiebaer
Beiträge: 32
Registriert: 30.10.2012 09:35:23

Re: Portforwarding mit IPTABLES

Beitrag von jogiebaer » 06.07.2015 21:06:35

Da ich in einem Carrier Grade NAT bin hab ich keine eigene öffentliche IP sondern teile mir eine Adresse mit anderen Kunden meines Providers.
Der DynDNS Alias bleibt dann beim Router des Providers hängen und findet nicht den weg zu meiner Fritz Box

dufty2
Beiträge: 1714
Registriert: 22.12.2013 16:41:16

Re: Portforwarding mit IPTABLES

Beitrag von dufty2 » 06.07.2015 22:02:15

jogiebaer hat geschrieben:

Code: Alles auswählen

iptables -A PREROUTING -t nat -i venet0:1 -p tcp --dport 1234 -j DNAT --to 172.10.5.1:1234
iptables -A INPUT -p tcp -m state --state NEW --dport 1234 -i venet0:1 -j ACCEPT
1. Zeile passt.
Da Du ja das (PRE-)routing geändert hast, geht der traffic nicht mehr an den vserver ( = INPUT), sondern vorbei,
somit in das FORWARDING. (IP-Forwarding einschalten nicht vergessen, z. B. temporär per
echo 1 > /proc/sys/net/ipv4/ip_forward
)
Statt der 2. Zeile musst Du aber noch schauen, dass die Rückpakete (vom Server zum vServer) auch wieder richtig "ins Internet geschickt" werden, z. B. per

Code: Alles auswählen

iptables -t nat -A POSTROUTING -o venet0 -s 1.2.3.4/32 -j SNAT --to-source "IP von venet0:1"
mit "1.2.3.4" die IP Deines Debian-Servers zuhause.
Zuletzt geändert von dufty2 am 06.07.2015 22:09:29, insgesamt 1-mal geändert.

eggy
Beiträge: 3334
Registriert: 10.05.2008 11:23:50

Re: Portforwarding mit IPTABLES

Beitrag von eggy » 06.07.2015 22:03:56

aehm ja ups, das aktuelle Wetter ist nix für mich...

172.10.5.1 ist die Ip für Deine Maschine zu Hause wenn man über den Tunnel geht?
Mal mit tcpdump oder ähnlichem geschaut ob Deine Umleitung für den Hinweg richtig ist, und evtl nur die Antworten nicht wissen wohin? Oder gibts vielleicht noch andere Iptablesregeln die wegen dem -A vorher greifen?

jogiebaer
Beiträge: 32
Registriert: 30.10.2012 09:35:23

Re: Portforwarding mit IPTABLES

Beitrag von jogiebaer » 07.07.2015 10:14:51

@eggy
Ich habe keine sonstigen Routen weder auf dem vServer noch auf dem kleinen Debian zu hause eingetragen. Alles Default bisher.

@dufty2
Wenn ich dich richtig verstehe schalte ich nur meine 1. Zeile und die 2. Zeile lasse ich weg??
2.

Code: Alles auswählen

iptables -t nat -A POSTROUTING -o venet0 -s 1.2.3.4/32 -j SNAT --to-source "IP von venet0:1"
mit "1.2.3.4" die IP Deines Debian-Servers zuhause.
Meinst du damit die private IP des Debian zu Hause? Also 192.x.x.x ?
Soll ich diese Route auf dem vServer oder zu Hause eintragen? Sind überhaupt Routen zu hause notwendig?

dufty2
Beiträge: 1714
Registriert: 22.12.2013 16:41:16

Re: Portforwarding mit IPTABLES

Beitrag von dufty2 » 07.07.2015 21:24:21

Das Interface "venet0" wird's wohl nur auf Deinem VServer geben, der Debian zu Hause wird ein eth0 oder so haben, vermute ich mal ;)
=> daher die Regeln auf den VServer eintragen bitte.

Ob Du noch zusätzlich Route(n) zuhause brauchst? Wird u. a. von Deinen Anforderungen abhängen:
Soll der Debian-Heimserver nur von außen erreichbar sein aber selbst keine Verbindungen nach außen _über den Tunnel_ aufbauen, brauchst wohl keine mehr.
Dafür müßte man wohl noch 'ne 3. iptables-Regeln hinzufügen, welche "das Internet nat-tet", also in etwa

Code: Alles auswählen

iptables -A PREROUTING -t nat -i venet0:1 -p tcp --dport 1234 -j DNAT --to 172.10.5.1:1234
iptables -t nat -A POSTROUTING -o venet0 -s 172.10.5.1/32 -j SNAT --to-source "IP von venet0:1"
iptables -t nat -A POSTROUTING -o tun0 -j SNAT --to-source 172.10.5.2

jogiebaer
Beiträge: 32
Registriert: 30.10.2012 09:35:23

Re: Portforwarding mit IPTABLES

Beitrag von jogiebaer » 07.07.2015 21:33:33

Der Debian Heimserver soll mit dem Internet nichts machen außer über den angegebenen Port zu kommunizieren in beide Richtungen.
Leider funktionieren die beiden Regeln nicht.
Wie kann ich denn prüfen ob bei dem Heimserver etwas ankommt?

gbotti
Beiträge: 846
Registriert: 16.07.2010 14:24:43
Wohnort: München

Re: Portforwarding mit IPTABLES

Beitrag von gbotti » 08.07.2015 08:59:29

hi.

Beispielsweise mit (einfacher):
Debianiptraf
Debianiftop
und advanced:
Debiantcpdump
Debianwireshark

Oder in den Logs vom Webserver Beispielsweise, wenn du den ansprichst...
Georg
RTFM, LMGTFY, Orakel... Ach... Warum muss man suchen...
Schrödingers Backup --- "Der Zustand eines Backups ist unbekannt, solange man es nicht wiederherstellt" --- Quelle: Nixcraft

jogiebaer
Beiträge: 32
Registriert: 30.10.2012 09:35:23

Re: Portforwarding mit IPTABLES

Beitrag von jogiebaer » 08.07.2015 20:32:36

Ich komme leider zu keinem Ergebnis.

gbotti
Beiträge: 846
Registriert: 16.07.2010 14:24:43
Wohnort: München

Re: Portforwarding mit IPTABLES

Beitrag von gbotti » 08.07.2015 20:52:16

Also.

Du kannst über VPN von A nach B und B nach A pingen. Du hast die IPTables-Rules eingestellt mit NAT. Hat der Homeserver eine Route zu der Nicht-VPN-IP des Servers im Rechenzentrum? Mach auf dem Homeserver mal in etwa sowas:

Code: Alles auswählen

ip route add IP_DES_SERVERS/SUBNETMASK via VPN_IP_AUF_HOMESERVERSITE
EDIT: Mach mal mit traceroute oder mtr tests, welche Route genutzt wird...
Georg
RTFM, LMGTFY, Orakel... Ach... Warum muss man suchen...
Schrödingers Backup --- "Der Zustand eines Backups ist unbekannt, solange man es nicht wiederherstellt" --- Quelle: Nixcraft

jogiebaer
Beiträge: 32
Registriert: 30.10.2012 09:35:23

Re: Portforwarding mit IPTABLES

Beitrag von jogiebaer » 08.07.2015 21:16:26

Genau. Also ich kann von beiden Maschinen den VPN Partner erreichen. Durch ping auf die VPN IP
Auf dem VServer hab ich diese beiden Routern eingetragen

Code: Alles auswählen

iptables -A PREROUTING -t nat -i venet0:1 -p tcp --dport 14058 -j DNAT --to 172.10.5.2:14058
iptables -t nat -A POSTROUTING -o venet0 -s 172.10.5.2/32 -j SNAT --to-source "IPdesVServers auf Karte venet0:1"
auf dem Heimserver hab ich diese Route eingetragen

Code: Alles auswählen

route add "IPdesVServers auf Karte venet0:1" gw 172.10.5.1
Ergebnis der traceroute ist ganz komisch

Code: Alles auswählen

traceroute "IPdesVServers auf Karte venet0:1"
traceroute to "IPdesVServers auf Karte venet0:1" ("IPdesVServers auf Karte venet0:1"), 30 hops max, 60 byte packets
 1  "IPdesVServers auf Karte venet0:1" ("IPdesVServers auf Karte venet0:1")  74.947 ms  78.740 ms  75.404 ms

dufty2
Beiträge: 1714
Registriert: 22.12.2013 16:41:16

Re: Portforwarding mit IPTABLES

Beitrag von dufty2 » 08.07.2015 21:58:00

Nur dass wir vom gleichen reden:
172.10.5.1 ist tun0@heimserver
und
172.10.5.2 ist tun0@vserver
Richtig?

Wenn dem so ist, dann sind Deine zuletzt geposteten iptables-rules nicht richtig.

jogiebaer
Beiträge: 32
Registriert: 30.10.2012 09:35:23

Re: Portforwarding mit IPTABLES

Beitrag von jogiebaer » 09.07.2015 10:20:44

tun0.conf vom VServer

Code: Alles auswählen

dev tun0
ifconfig 172.10.5.1 172.10.5.2
secret /etc/openvpn/static.key
persist-key
persist-tun
keepalive 10 120
comp-lzo
tun0.conf vom Heimserver

Code: Alles auswählen

remote "IPvondesVServers"
dev tun0
ifconfig 172.10.5.2 172.10.5.1
secret /etc/openvpn/static.key
persist-key
persist-tun
keepalive 10 120
comp-lzo

dufty2
Beiträge: 1714
Registriert: 22.12.2013 16:41:16

Re: Portforwarding mit IPTABLES

Beitrag von dufty2 » 10.07.2015 18:28:28

So, anscheinend darf man keine virtuellen Interfaces bei iptables benutzen, dann auf ein neues:

Code: Alles auswählen

iptables -t nat -A PREROUTING -i venet0 -p tcp -d "IP von venet0:1" --dport 14058 -j DNAT --to 172.10.5.2:14058
iptables -t nat -A POSTROUTING -o tun0 -j SNAT --to-source 172.10.5.1
Weiterhin muss sichergestellt sein, dass Dein Service (auf Port 14058) auch auf dem tun0@heimserver, also
172.10.5.2:14058 auch lauscht, das kannst Du mittels "netstat -tulpen" überprüfen.

Antworten