iptables csomagtovábbítás ipváltoztatással...

Sziasztok!

Van két hálózatom: 10.99.0.0/16 és 192.168.1.0/24. A gateway-em a 10.99.1.1-en (eth0), 10.99.5.5-ön (eth0:1) és a 192.168.1.1-en (eth1) van. (továbbítja a csomagokat a két hálózat között) Van két gépem a két oldalon: 10.99.5.6-en és a 192.168.1.234-en. Hogy lehet azt megoldani iptables-el, hogyha a 192.168.1.234-ről küldött csomagot a 10.99.5.6-ra küldje, de úgy mintha a 10.99.5.5-ről jött volna. Ha viszont a 10.99.5.6 küld csomagot a 10.99.5.5-re, akkor az továbbküldje a 192.168.1.234-re. Ez ha jól sejtem IP hamisítás, de mégis használnom kell, mert csak így tudom megoldani, hogy a kliens-szerver között ide-oda lehessen kommunikálni pontosan az adott géppel.

Előre is köszönöm a segítséget!

Hozzászólások

Jogos! :)

Viszont mivel ide nem tudok képet küldeni, ezért megpróbálom karakteresen lerajzolni:

--------------------------
| 192.168.1.234 (kliens) |
--------------------------
|
-----------------
| 192.168.1.1 |
| (eth1) |
| |
| (tűzfal) |
| |
| 10.99.5.5 |
| (eth0:1) |
| 10.99.1.1 |
| (eth0) |
-----------------
|
-----------------------
| 10.99.5.6 (szerver) |
-----------------------

Bocsi a csúnya rajzért. Elvileg az a cél, hogy a gépek (kliens-szerver) ne lássák hogy egy tűzfalon mennek keresztül, hanem a 10.99.5.6-os szerver azt higyje, hogy a kliens a 10.99.5.5-ről jön. (holott az a 192.168.1.234-en figyel) Ezt persze meg lehetne úgy oldani, hogy az eth0-ára felveszem a 10.99.5.5-öt és az eth0:1-re a 10.99.1.1-et, viszont mivel több ilyen klienssel is kell tartanom a kapcsolatot (például a 192.168.1.235-el, amire azt szeretném hogy mondjuk a 10.99.5.4-nek lássa a szerver), ezért ez nem jó megoldás.
Remélem most már kicsivel érthetőbb, de nyugodtan kérdezz, ha nem érted a problémát, mert nem hétköznapi, az biztos...

Áhh, szétesett... Szóval van 3 doboz (gép), aminek a közepén a tűzfal van...

---------------------------
|192.168.1.234(kliens)|
---------------------------
|
|
|
----------------
|192.168.1.1
|(eth1)
|
|(tűzfal)
|
|10.99.5.5
|(eth0:1)
|10.99.1.1
|(eth0)
----------------
|
|
|
-----------------------
|10.99.5.6 (szerver)|
-----------------------

Ha a kérés nem csak az egyes csomagokra vonatkozik, hanem működő kétirányú kapcsolat kell, akkor SNAT/DNAT. Illetve ha az az megfelelő értelmezése a "a 192.168.1.234-ről küldött csomagot a 10.99.5.6-ra küldje"-nek, hogy a 192.168.1.234-ről a 10.99.5.5-nek küldött csomagot a 10.99.5.6-ra küldje, valamint a "192.168.1.234-ről küldött csomagot a 10.99.5.6-ra küldje" helyett 192.168.1.234-ről a 10.99.5.6 felé küldött csomagot a 10.99.5.6-ra küldje. Körülbelül valami ilyesmi lehet:

Az eth0->eth1 irány egy source NAT:

iptables -o eth0 -t nat -A POSTROUTING -s 192.168.1.234 -d 10.99.5.6 -j SNAT --to-source 10.99.5.5

Az eth1->eth0 irány pedig egy destination NAT:

iptables -i eth1 -t nat -A PREROUTING -s 10.99.5.6 -d 10.99.5.5 -j DNAT --to-destination 192.168.1.234

Kipróbáltam és valami nem okés. Megpróbálom leírni a csomagok
útvonalát, hátha úgy érthetőbb a kérdésem.

A 192.168.1.234-en fut egy kliens. (mondjuk egy Linux, ami-n fut egy FTP szerver) A 10.99.5.6-on fut mondjuk egy SSH szerver, amit szeretne elérni, viszont közöttük van egy gateway tűzfal, aminek az eth1-én a 192.168.1.1, míg az eth0-n a 10.99.1.1 az elsődleges ip-je. Emellett van még a tűzfal-nak 2 további IP-je, mondjuk a 192.168.1.5 az eth1:1-en és a 10.99.5.5 az eth0:1-en.

Tehát a 192.168.1.234-en beírja ezt: ssh 192.168.1.5, akkor ez a 10.99.5.6-os szerverhez fog megérkezni, de úgy, hogy azt hiszi, hogy a 10.99.5.5 küldte. Ezután beírja a 10.99.5.6-os szerverre valaki hogy ftp 10.99.5.5, akkor az megérkezik a 192.168.1.234-eshez, de úgy hogy azt hiszi, hogy a 192.168.1.5-ösön lévő szerver küldte. Így nem látják hogy a tűzfalon át mentek a csomagok...

Remélem így egy kicsivel világosabb lesz a problémám.
Előre is köszi a segítséget!

Így teljesen tiszta a kép. Mindkét irányba kell source és destination NAT is. A protokollra és portra vonatkozó feltételek természetesen elhagyhatóak.

iptables -i eth1 -t nat -A PREROUTING -p tcp -s 192.168.1.234 -d 192.168.1.5 --destination-port 22 -j DNAT --to-destination 10.99.5.6
iptables -o eth0 -t nat -A POSTROUTING -p tcp -s 192.168.1.234 -d 10.99.5.6 --destination-port 22 -j SNAT --to-source 10.99.5.5

iptables -i eth0 -t nat -A PREROUTING -p tcp -s 10.99.5.6 -d 10.99.5.5 --destination-port 21 -j DNAT --to-destination 192.168.1.234
iptables -o eth1 -t nat -A POSTROUTING -p tcp -s 10.99.5.6 -d 192.168.1.234 --destination-port 21 -j SNAT --to-source 192.168.1.5