PDA

Bekijk Volledige Versie : Ubuntu port forwarding



baseh
07/08/10, 19:39
Hallo,

Ik ben al hele middag bezig, en denk dat ik een klein foutje maak maar kan maar niet achterhalen wat.

Ik heb een vmware server met een ubuntu webserver. Deze ubuntu webserver heeft een externe ip.
Nu heb ik een 2e ubuntu Database server, en die wil ik geen extern ip geven.

Ubuntu webserver:
eth0
extern ip adres

eth1
192.168.3.9

Ubuntu dbserver
eth0
192.168.3.10

Nu kunnen de 2 servers elkaar gewoon pingen, dus dat werk goed.

Maar toch wil ik graag extern de mysql server kunnen benaderen.
Dus mijn idee was om extip:3306 te forwarden naar 192.168.3.10:3306

Dit lukt dus niet. Forwarding staat gewoon aan volgens mij:

#sudo sysctl net.ipv4.ip_forward geeft als resultaat
net.ipv4.ip_forward = 1

Ik heb het volgende ook geprobeerd:
sudo iptables -A PREROUTING -t nat -p tcp --dport 3306 -i eth0 -j DNAT --to-destination 192.168.3.10:3306

Wat doe ik fout :(.

dennis0162
07/08/10, 20:03
Remote access van MySQL ff aanzetten?

http://www.cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html

baseh
07/08/10, 20:05
Ja dat is gedaan. Maar ik moet er wel voor zorgen dat externeip:port op server 1 geforward wordt naar internip:port op server2

dennis0162
07/08/10, 20:13
iptables -A FORWARD -p tcp -i eth0 -d 192.168.3.10 --dport 3306 -j ACCEPT

baseh
07/08/10, 21:15
Ook dat werkt niet :(

Paul Z.
07/08/10, 22:38
Welk host systeem OS gebruik je? Welke versie van VMWare?
Je moet goed opletten dat de verschillende ethernet kaarten wel op dezelfde "virtual switch" zijn aangesloten anders zien ze elkaar niet... Maar aangezien je de servers ondeling kan pingen lijkt dat goed te zitten. Probeer voor de zekerheid eens een SSH verbinding van de ene machine naar de andere machine op te zetten....
Doe anders eens vanaf de webserver "telnet 192.168.3.10 3306" en vanaf de db server "telnet 192.168.3.9 80" ... Op die manier worden onderlinge connectivity problemen uitgesloten.

baseh
07/08/10, 22:42
Bedankt voor je reactie.

Ik kan gewoon vanaf server 1 een ssh connectie naar server 2 opzetten.
Ik heb op dit moment ook gewoon alle porten open (dus niks wordt geblokkeerd.)

Maar doorlussen werkt nog niet echt :(

Ik gebruik vmware esxi server 4.1 en Ubuntu server



Welk host systeem OS gebruik je? Welke versie van VMWare?
Je moet goed opletten dat de verschillende ethernet kaarten wel op dezelfde "virtual switch" zijn aangesloten anders zien ze elkaar niet... Maar aangezien je de servers ondeling kan pingen lijkt dat goed te zitten. Probeer voor de zekerheid eens een SSH verbinding van de ene machine naar de andere machine op te zetten....
Doe anders eens vanaf de webserver "telnet 192.168.3.10 3306" en vanaf de db server "telnet 192.168.3.9 80" ... Op die manier worden onderlinge connectivity problemen uitgesloten.

Paul Z.
07/08/10, 22:52
Kan je vanaf de webserver met telnet wel een verbinding opzetten naar port 3306 op de mysql server?

baseh
07/08/10, 22:57
Dat werkt ook probleemloos.

Paul Z.
07/08/10, 23:00
Hoe test je de port forwarding?
Ik neem aan dat je niet probeert te connecten vanaf hetzelfde externe IP adres? (Ik ken je setup niet... Misschien dat er ook nog routering gebeurt vanaf datzelfde externe ip adres naar je werkstation?)

baseh
07/08/10, 23:10
In het kort

Server 1
eth0 100.100.100.100 (externe ip(verzonnen))
eth1 192.168.3.9

Server 2
eth0 192.168.3.10

Op server 1 draait Apache
Die kan ik vanaf externe ip bereiken

op server 2 draait mysql
Die wil ik via externe ip van server 1 bereiken.

Dit werkt dus niet. Ik heb om te testen op server 2 OOK apache geinstalleerd op port 90.
Dus ik probeer 100.100.100.100:90 te koppelen aan server 2. Zodat ik het via browser kan testen. Maar niks werkt.

Beide servers draaien op een vmware server in het datacenter, dus geen rare port blockings.

Paul Z.
07/08/10, 23:15
ok, voor de duidelijkheid voor mij, je probeert de servers dus te benaderen vanaf je wekstation thuis?

baseh
07/08/10, 23:32
Klopt.

Paul Z.
07/08/10, 23:38
iptables -F
iptables -A FORWARD -p tcp -i eth0 -d 192.168.3.10 --dport 3306 -j ACCEPT

Werkt niet??

Mark17
08/08/10, 02:00
Heb je het wel werkend voor andere poorten? Zo niet kijk dan eens op http://www.debian-administration.org/articles/23 en installeer ipmasq, die combinatie zou het vrij simpel moeten maken ga ik vanuit.

Mocht het nog niet duidelijk zijn dan verzoek ik je de output van iptables-save hier neer te zetten, vergelijk ik dat even met onze opzet hier.

baseh
08/08/10, 11:05
Bij deze output van de iptables-save



# Generated by iptables-save v1.4.4 on Sun Aug 8 11:04:35 2010
*mangle
:PREROUTING ACCEPT [74:5564]
:INPUT ACCEPT [65:4577]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [56:6708]
:POSTROUTING ACCEPT [56:6708]
COMMIT
# Completed on Sun Aug 8 11:04:35 2010
# Generated by iptables-save v1.4.4 on Sun Aug 8 11:04:35 2010
*filter
:INPUT ACCEPT [8207:873829]
:FORWARD ACCEPT [6:304]
:OUTPUT ACCEPT [1671:1495101]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT ! -i eth0 -m state --state NEW -j ACCEPT
-A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth1 -o eth0 -j ACCEPT
-A FORWARD -d 192.168.3.10/32 -i eth0 -p tcp -m tcp --dport 90 -j ACCEPT
COMMIT
# Completed on Sun Aug 8 11:04:35 2010
# Generated by iptables-save v1.4.4 on Sun Aug 8 11:04:35 2010
*nat
:PREROUTING ACCEPT [31403:3342722]
:POSTROUTING ACCEPT [51:3388]
:OUTPUT ACCEPT [49:3284]
COMMIT
# Completed on Sun Aug 8 11:04:35 2010

asusk7m550
08/08/10, 13:15
Als je default policy op ACCEPT staat, hoef je maar twee dingen te doen:

1. Zorgt dat forwarding voor ipv4 aanstaat in de regels (echo 1 > /proc/sys/net/ipv4/ip_forward)
2. Maak een regel aan, zodat de firewall de forward inderdaad ook forward (iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 3306 -j DNAT --to 192.168.3.10:3306 of iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 90 -j DNAT --to 192.168.3.10:80)

Mocht je default policy op DROP staan, zul je de volgende regels nog moeten toevoegen.

1. iptables -A INPUT -i eth0 -d 100.100.100.100 -p tcp -m tcp --dport 3360 -j ACCEPT
2. iptables -A FORWARD -d 192.168.3.10 -i eth0 -o virbr0 -j ACCEPT
3. iptables -t nat -A POSTROUTING -o virbr0 -p tcp -m tcp --dport 3360 -j ACCEPT
4. iptables -A FORWARD -s 192.168.3.10 -i virbr0 -o eth0 -j ACCEPT
5. iptables -A OUTPUT -o virbr0 -d 192.168.3.10 -p tcp --sport 3360 -j ACCEPT

De regels 1, 2 en 3 zorgen ervoor dat het verkeer vanaf buiten naar binnen gestuurd worden.
De regels 4 en 5 zorgen ervoor dat het verkeer vanaf binnen weer naar buiten kan.

Mocht dit allemaal nog niet werken, dan raad ik je aan om logging aan te zetten, zodat je precies kan zien wat er foutgaat.
Voor logging voeg je de volgende regels toe aan het einde van alle regels:
1. iptables -A INPUT -j LOG
2. iptables -A FORWARD -j LOG
3. iptables -A OUTPUT -j LOG
4. iptables -t nat -A PREROUTING -j LOG
5. iptables -t nat -A POSTROUTING -j LOG
6. iptables -t nat -A OUTPUT -j LOG

Ramon Fincken
11/08/10, 18:38
Vergeet naast je mysql poort naar buiten ook niet dat je user vanaf buiten mag connecten :)