iptables nat és forward ugynazon a gépen

Fórumok

Sziasztok!

Van egy gépem, amely eddig routerként működött, két interface-el. Most a belső interface-en két VLAN-t állítottam be, így most már 3 interface-em van:

interface-ek:

vlan1: 10.0.0.0/8
vlan2: 1.2.3.4/24
eth1: 1.2 7.8/30

A kernelben a forwarding be van kapcsolva.

Amit szeretnék:

- vlan2 és eth1 között routolás, csomagszűrés (ez már megy, a csomagok a filter tábla FORWARD láncán közlekednek, ott szűrve vannak)
- vlan1 és vlan2 között routolás (ez is megy, mindkét szubnetből pingelhető a másik, ehhez nem állítottam semmit. Ugyanúgy a FORWARD láncon megy, ugyanazokkal a csomagszűrő szabályokkal, mint az előbbi)
- vlan1 és eth1 között SNAT, tehát szeretném ha vlan1 kilátna az internetre.

Ami nekem nem világos, az az, hogy ha a nat tábla POSTROUTING láncába felveszem, hogy az eth1 kimenő interface-re SNAT-ot kérek, akkor ez nem fogja bezavarni a fent leírt 2 routolási beállítást?

Honnan tudja az iptables, hogy a filter táblán és FORWARD láncon, vagy pedig nat táblán és PREROUTING, majd POSTROUTING láncon haladjon a csomag? Talán abból, hogy az egyik oldalon privát szubnet van?

És mégegy kérdés, hol tudom szűrni a NAT-on keresztül haladó csomagokat? Szintén a POSTROUTING-ban?

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

Petya

Hozzászólások

"Honnan tudja az iptables, hogy a filter táblán és FORWARD láncon, vagy pedig nat táblán és PREROUTING, majd POSTROUTING láncon haladjon a csomag?"
Itt a teljes félreértés esete áll fent. A filter és a FORWARD lánc miért lenne vagylagos lehetőség?

"És mégegy kérdés, hol tudom szűrni a NAT-on keresztül haladó csomagokat? Szintén a POSTROUTING-ban?"
A kérdés ebben a formájában értelmetlen. Nem kiszűrni kell, hanem olyan NAT-szabályt írni, ami pontosan arra a forgalomra illeszkedik, mint amit NAT-olni szeretnél.

"ha a nat tábla POSTROUTING láncába felveszem, hogy az eth1 kimenő interface-re SNAT-ot kérek, akkor ez nem fogja bezavarni a fent leírt 2 routolási beállítást?"
Nem, ha megfelelőek az általad írt szabályok.

Hello!

"Honnan tudja az iptables, hogy a filter táblán és FORWARD láncon, vagy pedig nat táblán és PREROUTING, majd POSTROUTING láncon haladjon a csomag?"
Itt a teljes félreértés esete áll fent. A filter és a FORWARD lánc miért lenne vagylagos lehetőség?

Nem vagylagos, nyilván FORWARD lánc csak a filter és a mangle táblákban van. A kérdesem arra vonatkozozz, hogy:

(filter és FORWARD) vagy (nat és POSTROUTING)?

Vagyis hogy mi alapján kerül a fenti két zárójelezett kifejezés egyikére a csomag? Vagyis honnan tudja az iptables, hogy NAT-olni kell-e a csomagot? (ugye a POSTROUTING-nak csak kimenő interface-t lehet megadni, és ugyanazon a kimenő interface-en nálam NAT-olt, és nem NAT-olt forgalom is lesz)

"És mégegy kérdés, hol tudom szűrni a NAT-on keresztül haladó csomagokat? Szintén a POSTROUTING-ban?"
A kérdés ebben a formájában értelmetlen. Nem kiszűrni kell, hanem olyan NAT-szabályt írni, ami pontosan arra a forgalomra illeszkedik, mint amit NAT-olni szeretnél.

Ilyen NAT szabályokról hol találok leírást?

Petya

"(filter és FORWARD) vagy (nat és POSTROUTING)?"
Lehet, hogy félreérthetően fogalmaztam. Arra akartam rávilágítani, hogy nem az van, hogy vagy a filter tábla, vagy a nat tábla, hanem végigmegy mindegyiken, és ha illeszkedő szabályt talál, akkor az abban meghatározottakat végrehajtja.

"Vagyis honnan tudja az iptables, hogy NAT-olni kell-e a csomagot?"
Megfelelő feltételt fogalmazol meg a szabályban (pl. forráscím).

"Ilyen NAT szabályokról hol találok leírást?"
man iptables, illetve a netfilter honlapján, ezenkívül rengeteg helyen van róla információ a neten.

Netfilter(kernel packet filter) logika:


--->[1]--->[ROUTE]--->[3]--->[4]--->
| ^
| |
| [ROUTE]
v |
[2] [5]
| ^
v |
LOCAL_PROCESS

1, NF_IP_PRE_ROUTING hook (PREROUTING table /ipt/).
2 ,NF_IP_LOCAL_IN hook (INPUT table /ipt/).
3, NF_IP_FORWARD hook (FORWARD table /ipt/).
4, NF_IP_POST_ROUTING hook, (POSTROUTING table /ipt/).
5, NF_IP_LOCAL_OUT [5] hook, (OUTPUT table /ipt/)

Iptables logika(kernel packetfilter kezelo user interface)

--->PRE------>[ROUTE]--->FWD---------->POST------>
Conntrack | Mangle ^ Mangle
Mangle | Filter | NAT (Src)
NAT (Dst) | | Conntrack
(QDisc) | [ROUTE]
v |
IN Filter OUT Conntrack
| Conntrack ^ Mangle
| Mangle | NAT (Dst)
v | Filter

Ez egyébként a hivatalos doksi része.

(szerk: szarul látszik ezért: kattins ide)