IPTables - Port forward, ha nem en vagyok a default gateway

Valahol olvastam egy leirast a cimbeli problemarol, de keptelen vagyok ujra megtalalni.

A problemam a kovetkezo: ki kellene forwardolnom egy darab portot egy olyan geprol, aminek nem a portot forwardolo gep a default gatewaye, hanem egy masik gep. A celgep default gatewaye nem valtoztathato, a celgepen tuzfal nem konfiguralhato. Emlekszem, hogy a dolog igy is megoldhato, sot ezt mar egyszer ki is probaltam, viszont most elesben lenne szuksegem erre a beallitasra.

Annyi remlik, hogy kell SNAT es DNAT is - ezek meg is vannak fixen - viszont nem tudom, mi az a loket, ami ezt az egeszet mukodesbe hozza.

A problema a jelenlegi setuppal ugye rem egyszeru: a SYN packetek elmennek a celgep fele, de az ACK nem jon vissza, hanem - jo esellyel - a default gateway fele akarnak kimenni. Valahogy ra kellene venni a celgepet, hogy errefele kuldje vissza is a csomagot. A naiv kiindulas az volt, hogy az SNAT-nak kellene ezert felelnie, hiszen a celgepnek az SNAT miatt ugy kellene latnia, hogy a forwardolos gep akar vele kommunikalni - amivel egy alhalon van - igy vegkepp nem ertem, hogy miert nem akarnak a csomagok visszafele jonni. Mintha nem valna ettol meg teljeserteku proxyva a cucc.

A celgepen semmilyen erdemi tuzfal nincsen, a celport tokeletesen elerheto akarhonnan.

Hozzászólások

Nem értek minden részletet, de talán ilyesmi kellene a proxy-gépen:

iptables -t nat -A POSTROUTING -s <kliens> -d <szerver> --dport <szerverport> -j MASQUERADE

ekkor a szerver úgy látja, hogy a proxy-gép a kliens, ezért annak is küldi a választ.

Szerk: Értelemszerűen ehhez a kliens gépen a proxy-t router-ként kell beállítani.

Nem látom, hogy ez miért probléma, hiszen a célgép a proxy-t tekinti kliensnek. Épp az imént végeztem egy mérést a saját két gépemen, kb ilyesmi:

gép#1: Windows
IP=99.99.99.2
default router=99.99.99.1

gép#2: Linux
eth0.IP=normálcégesIP
eth0:1.IP=99.99.99.1

ifconfig eth0:1 99.99.99.1 netmask 255.255.255.0 broadcast 99.99.99.255 up
iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -s 99.99.99.2 -j MASQUERADE
iptables -t nat -L POSTROUTING -n
echo 1 >/proc/sys/net/ipv4/ip_forward

ezután a Windows-ról bárhova eljutok a proxy-n át (mondjuk az FTP-hez még kellene valamit hangolni, de annyira nem értek hozzá)

Hoppá, a -s és és a -d mögül kimaradt a <ipcím>

Egyébként meg lehet, hogy itt az ellenkezője kellene, vagyis olyan port-forward, amikor a kliens hiszi azt, hogy a proxy a szerver. Bevallom, ilyeneket mindig az rinetd-vel szoktam csinálni, nem az iptables-sel, bár nagyon valószínű, hogy azzal is lehet.

Az az SNAT tuti stimmel? Ha a portot forward-oló gép belső lábán SNAT-olod a célgép felé menő forgalmat a router privát IP-jére, akkor mennie kell! (Az más kérdés, hogy a routerről kifele menő forgalmat is SNAT-olod a router publikus IP-jére, de az alapból is kell)

Tutira, a belso halon a forwardos gep belso ip-je laccik. De az a vicc, hogy az SNAT-ra meg sok behatasom nincs is, mert azt egy automatizmus allitja elo, tehat nem nagyon fordulhat elo az, hogy benezek valamit. Es mas esetekben mukodik, amikor a forwardolos gep a default gw.

Szerintem itt a Teve altal felvetett MASQUERADE lesz a megoldas kulcsa.
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. 

Nah, közben ránéztem már én is, aztán gyorsan összekukáztam neked ezt:
Első körben kell neked egy ilyen, mivel masquerade-t használunk és forwardolunk.
# echo 1 >/proc/sys/net/ipv4/ip_forward

Átirányítjuk a forgalmat:
# iptables -t nat -D PREROUTING -p tcp –dport [port] -j DNAT –to-destination [Masik gep IP cime]

Igy routing elott megmondjuk, hogy a forgalom ami ide erkezne haladjon a masik gep iranyaba.
Mivel natolunk, a conntrack alapjan tudjuk hogy a visszafele irany merre van, es ezt jol meg is mondjuk neki hogy e szerint jarjon el:
# iptables -t nat -D POSTROUTING -p tcp -d [Masik gep IP cime] –dport [port] -j MASQUERADE

és végül:

# echo happy!

// Happy debugging, suckers
#define true (rand() > 10)