Linux port forwarding / NAT

Fórumok

Sziasztok!

Abban szeretném a segítségetek kérni, hogy szeretrnék port forwardingot csinálni egy linuxon.

Van egy, nevezzük: "A" Windows alkalmazás szerver szeretné elérni "C" és "D" Windows MS SQL szervereket management studióból.

Viszont be kell építeni egy köztes "port forwarding" linuxot ami egy az egyben továbbítja a kéréseket C és D szerverek felé.

A Linux gép legyen "B" szerver (amúgy Centos7), ebben van egy eth0 két(!) IP címmel. Azt szeretném megoldani, hogy ha A szerver felöl jön kérés a B linux szerver egyik IP címére akkor az forwardingoljon C szerver felé.

Ha pedig A szerver felől jön kérés a linux másik IP címére akkor az forwardingoljon D szerver felé.

IP címekkel szemléltetve:

192.168.1.100 (A szerver) --> 10.10.10.1 (linux eth0 egyik IP) --> 10.100.10.100:1433 (MS SQL server) 

192.168.1.100 (A szerver) --> 10.10.10.2 (linux eth0 másik IP) --> 10.100.10.200:1433 (MS SQL server)

Próbáltam firewall-cmd -vel de csak az egyik IP-re tudtam beállítani.

firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="192.168.1.100" forward-port to-addr="10.100.10.100" to-port="1433" protocol="tcp" port="1433"'

 

próbáltam IP tables megannyi parancsával de nem akar menni.

20+ órát googliztam, de nem találok megoldást. Tudnátok segíteni? Köszönöm!

Hozzászólások

Reverse proxyként beállított nginx-el esetleg, bár még csak webre próbáltam sql-re nem...

iptables -t nat -I PREROUTING -s 192.168.1.100 -d 10.10.10.1 -j DNAT --to-destination 10.10.10.100:1433

A másik meg a másik :)

Szerintem kene egy POSTROUTING SNAT is, hogy visszatalaljanak a csomagok. De fixme. Valami ilyesmi:

iptables -t nat -A POSTROUTING -p tcp -d 10.10.10.100 --dport 1433 -j SNAT --to-source 10.10.10.1

Es ez gondolom igy van beallitva:
# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0

Köszi, de sajnos nem jó :(

Csak az egyik IP-re megy. A másikra már nem. :(

firewall-cmd --add-rich-rule='rule family=ipv4 destination address=y.y.y.y forward-port port=1433 protocol=tcp to-port=1433 to-addr=x.x.x.x'

Sajnos a firewall-cmd nem tudja szétválasztani, hogy a linuxban melyik IP címre érkezik a kérés.

firewall-cmd --add-rich-rule='rule family=ipv4 destination address=y.y.y.y forward-port port=1433 protocol=tcp to-port=1433 to-addr=x.x.x.x'

=

destination address=y.y.y.y - ez a local cim, ide jön a kérés
forward-port port=1433 - ez a local port, ide jön a kérés

to-addr=x.x.x.x ez a remote cím, ahová továbbitani szeretnéd
to-port=1433 ez a remote port, ahová továbbítani szeretnéd

vi /etc/firewalld/direct.xml, és szépen bele a szabály, valahogy így:

<?xml version="1.0" encoding="utf-8"?>
<direct>
<rule priority="0" table="nat" ipv="ipv4" chain="PREROUTING">-p tcp -s 192.168.1.100 -d 10.10.10.1 -j DNAT --to-destination 10.10.10.100:1433</rule>
<rule priority="0" table="nat" ipv="ipv4" chain="PREROUTING">-p tcp -s 192.168.1.100 -d 10.10.10.2 -j DNAT --to-destination 10.10.10.200:1433</rule>
</direct>

a fenti teszteket kitörölted? az bezavarhat...
firewall-cmd --reload
+ remove mindenre amit permanentként hozzáadtál és nem müködött.

aztán:
firewall-cmd --add-rich-rule='rule family=ipv4 destination address=10.10.10.1forward-port port=1433 protocol=tcp to-port=1433 to-addr=10.10.10.100'
 

masquerade be van kapcsolva?
firewall-cmd --list-all
ha nincs
firewall-cmd --zone=<zone> --add-masquerade

Köszönöm mindenkinek, jó lett a PRE és POST routing-gal. Kitöröltem mindent, újraindítottam a szervert. Én voltam béne hogy ezeket nem tettem meg.

Köszi !!!