Hilfe mit iptables und Weiterleitung von Ports...

Schattenlilie

Registered User
Hallo serversupportforum :confused:

ich habe da mal eine Frage zu iptables.

Auf einen meiner Test Server läuft ein Programm was nur lokal (127.0.0.1) hört auf dem Port 1445 ich kann die externe IP auch nicht ändern nur den Port.

Jetzt würde ich gerne wenn auf eth0 eine anfrage an diesen Port geht das diese auch nach eth0 eine Antwort sendet.

Ist dies möglich und wenn wie ?

Da ich zu selten mit iptables arbeite habe ich leider keine Idee.

Vielen Dank schon mal :D
 
Wenn Du bereits xinetd zu laufen hast kannst Du dessen "redirect" Feature nutzen oder Du installiest Dir "rinetd". So kannst Du ohne den Einsatz von iptables TCP-Verbindungen weiterleiten.
 
Hi dotme

danke für den Tipp es ist jedoch eine UDP anfrage (habe ich ganz vergessen) wo mit rinetd nicht in frage kommt...
 
Hi,

ich verstehe nicht so ganz, was Du von wo nach wo umbiegen möchtest.

wenn Du den Traffic von IP:PORT umleiten möchtest, dann versuch mal was in der Art:

iptables -t nat -A PREROUTING -i INTERFACE -p udp --dport PORT -j REDIRECT --to-port POR2


oder

iptables -t nat -A PREROUTING -i INTERFACE -p udp --dport PORT -j DNAT --to IP:PORT2
iptables -A FORWARD -d IP -p udp --dport PORT2 -j ACCEPT
 
Moin, sagt mal.. Kann es sein das man eine eingehende Verbindung über eine VPN Verbindung nicht auf 127.0.0.1 weiterleiten kann..? :o

Ich habe es mit mehreren Varianten versucht, aber es scheint nicht zu gehen.
Code:
iptables -t nat -A PREROUTING -i tun0 -p tcp --dport 3306 -j DNAT --to 127.0.0.1:3306
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
das war mein erster Ansatz, und der funktionierte leider nicht. Wenn ich via nmap von einem anderen PC den Port anspreche, erkennt er das er "fildered" ist, aber eine Verbindung geht nicht :(

Mein nächster Ansatz sah dann ungefähr so aus, aber das funktionierte auch nicht...
Code:
iptables -t nat -A PREROUTING -i tun0 -p tcp --dport 3306 -j DNAT --to 127.0.0.1:3306
iptables -A FORWARD -i tun0 -p udp --dport 3306 -j ACCEPT

Im Prinzip habe ich nämlich zwei vServer, diese sind mit OpenVPN Verbunden, und nun möchte ich von Server 1 auf Server 2 zugreifen. Um es genau zu sagen, ich möchte auf die SQL Datenbank zugreifen, aber irgendwie macht iptables keine Weiterleitung :(

Ich möchte eigentlich das eingehende Verbindungen über tun0 an 127.0.0.1:3306 geschickt werden und dieser auch zurück antworten kann.. :)

Gruß, Domi
 
Code:
iptables -t nat -A PREROUTING -i tun0 -p tcp --dport 3306 -j DNAT --to 127.0.0.1:3306

Das ist soweit schon richtig. Möglich wäre natürlich, wie chris4000 sagte, dass da eventuell andere Rules vorher matchen. Beobachte doch mal mittels tcpdump, was sich auf den Interfaces tun0 und lo abspielt, während du den Verbindungsversuch hast.
Wieso hast du den mysqld eigentlich an 127.0.0.1 gebunden? Binde den doch an die VPN-IP und lass lokale Verbindungen über den Socket laufen. Spart die frickelei mit iptables.
 
So, moin moin...

Also das mit dem UDP war ein Tippfehler hier im Forum, hatte mir die Befehle in ein Text Dokument kopiert und dann rüber kopiert. Auf dem Server selbst habe ich gesehen das dort UDP stand, hab es dann in TCP geändert aber nicht im Dokument selbst :D

Was nun die diversen Fragen etc. angeht, also es existieren keine regeln, sowohl in der Standard Tabelle, als auch in der NAT Tabelle. Diese Regel mit der Weiterleitung ist die einzige die existiert... und das habe ich eben einmal ausprobiert.

Code:
root@xxx ~ # iptables -t nat -A PREROUTING -i tun0 -p tcp --dport 3306 -j DNAT --to 127.0.0.1:3306

root@xxx ~ # tcpdump -i tun0
listening on tun0, link-type RAW (Raw IP), capture size 65535 bytes
15:33:12.743660 IP 192.168.21.1.55883 > 192.168.21.6.mysql: Flags [S], seq 1739476731, win 5840, options [mss 1352,sackOK,TS val 1641345362 ecr 0,nop,wscale 7], length 0
15:33:15.742717 IP 192.168.21.1.55883 > 192.168.21.6.mysql: Flags [S], seq 1739476731, win 5840, options [mss 1352,sackOK,TS val 1641346112 ecr 0,nop,wscale 7], length 0
15:33:21.742783 IP 192.168.21.1.55883 > 192.168.21.6.mysql: Flags [S], seq 1739476731, win 5840, options [mss 1352,sackOK,TS val 1641347612 ecr 0,nop,wscale 7], length 0

root@xxx ~ # tcpdump -i lo
listening on lo, link-type EN10MB (Ethernet), capture size 65535 bytes
Also so wie es aussieht, wird meine Anfrage wohl gar nicht erst an 127.0.0.1 weitergeleitet :o

Ich weiß von einer Anleitung bezüglich OpenVPN aus dem Linux Forum, dass man noch einen Wert von 0 auf 1 setzen muss, was ich schon erledigt habe. Aber der Effekt bleibt bei null :(

Gruß, Domi
 
Wahrscheinlich musst du in der NAT Tabelle etwas wie

Code:
iptables [...] -j REDIRECT --to-ports 8080

verwenden, weil es eine Weiterleitung an localhost ist.
 
Ganz böse Falle. Ich hab da noch ein wenig mit experimentiert. Am einfachsten wird's für dich, wenn du den mysqld an die VPN-IP bindest ;)
iptables kennt in den Pre-/Postrouting-Chains das loopback-Interface nicht und routet dir den Traffic daher auch nicht weiter.
 
Ahh.. Das erklärt dann natürlich alles. Da kann man natürlich probieren, wie ein blöder :-D

Aber wenn ich jetzt statt "bind-address 127.0.0.1" die IP vom VPN Eintrag, komme ich doch lokal nicht mehr dort rein via php etc., oder doch..?
 
Du hast lokal immer noch den UNIX-Socket im Dateisystem liegen, welcher auch angesprochen werden kann.
MySQL geht dabei wie folgt vor:

Host: "127.0.0.1" - Öffnet die Verbindung via TCP-Socket. Dies funktioniert nach der Änderung nicht mehr.
Host: "localhost" - Verwendet den Unix-Socket, welcher weiterhin verwendbar ist.

Nachtrag: Hier findest du dazu noch etwas Lektüre in der MySQL-Doku.
 
Okay, aber das hatte ich schon mal versucht.. Also bind-address auf 192.168.21.6 (die IP des VPN Interface) zu stellen, aber dann gibt es probleme..
Code:
root@xxx ~ # nmap -p mysql 127.0.0.1

Starting Nmap 5.21 ( http://nmap.org ) at 2012-12-23 20:43 CET
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000043s latency).
PORT     STATE  SERVICE
3306/tcp closed mysql

Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds
root@xxx ~ # nmap -p mysql localhost

Starting Nmap 5.21 ( http://nmap.org ) at 2012-12-23 20:43 CET
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000038s latency).
PORT     STATE  SERVICE
3306/tcp closed mysql

Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds
 
Den TCP-Socket gibt es dann richtiger weise nicht mehr, da auf 127.0.0.1 ja der mysqld nicht mehr lauscht. Der UNIX-Socket im Dateisystem existiert aber noch (/var/run/mysqld/mysqld.sock o.ä.). Den genauen Pfad findest du in deiner MySQL-Konfiguration.

Was genau für Probleme hast du denn dann noch?
 
Jou, okay.. dann war das ein Fehler meiner Gedanken, ich dachte wenn "nmap" nicht geht, wird der Rest auch nicht funktionieren, aber ein Test mit
Code:
mysqldump -u root -pXxXxX --databases postfix > /srv/db.sql
hat Problemlos funktioniert. Zusätzlich hat auch die Verbindung über die VPN Verbindung funktioniert und Postfix-Admin konnte auch darauf zugreifen. Dann scheint es ja zu klappen, und ich muss mit iptables nicht rum zaubern :)

Ich weiß, dass "mysqldump" einmal nicht funktioniert, dass könnte aber auch daran liegen dass ich in meiner my.cnf folgendes drin hatte...
Code:
bind-address 127.0.0.1
bind-address 192.168.21.6
und dadurch konnte ich dann gar nicht mehr so wirklich an meine Datenbank :D
 
Ich weiß, dass "mysqldump" einmal nicht funktioniert, dass könnte aber auch daran liegen dass ich in meiner my.cnf folgendes drin hatte...
Code:
bind-address 127.0.0.1
bind-address 192.168.21.6
und dadurch konnte ich dann gar nicht mehr so wirklich an meine Datenbank :D

Tjoa... Auch das steht so in der Doku ;)

Code:
The MySQL server listens on a single network socket for TCP/IP connections. This socket is bound to a single address, but it is possible for an address to map onto multiple network interfaces.

Quelle
 
Klar, klingt logisch.. Sonst wäre "load balancing" ja etwas problematischer.

Aber ich habe doch noch etwas gefunden, was NICHT geht. Ich kann über SSH keinen Tunnel mehr aufbauen. Wenn ich eine SSH Verbindung zum Server aufgebaut habe, stellt dieser zu 127.0.0.1:3306 einen Tunnel her, was aber nicht mehr geht. Das geht jetzt nicht mehr :D :o

Nachtrag: Oder muss ich jetzt einfach einen Tunnel zu 192.168.21.6:3306 aufbauen?!
 
Last edited by a moderator:
Back
Top