Bekijk Volledige Versie : Ubuntu port forwarding
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
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
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.
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.
Kan je vanaf de webserver met telnet wel een verbinding opzetten naar port 3306 op de mysql server?
Dat werkt ook probleemloos.
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?)
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.
ok, voor de duidelijkheid voor mij, je probeert de servers dus te benaderen vanaf je wekstation thuis?
iptables -F
iptables -A FORWARD -p tcp -i eth0 -d 192.168.3.10 --dport 3306 -j ACCEPT
Werkt niet??
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.
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 :)