( tselmeci | 2010. 11. 08., h – 13:51 )

Az esetemben nem azzal van a baj, hogy hol van a PPP routeolási szabálya, és nem is azzal, hogy hol az etherneté.

Furcsán működik a routolás. Jelenlegi tudásom szerint a mangle tábla PREROUTING lánca a routolás előtt kell, hogy lefusson, és az eth-wifi esetben ez meg is történik tökéletesen. Viszont a ppp-eth esetben nem, azaz a PREROUTING csak azután fut le, hogy a main táblából már kivette a default route-ot, ez pedig így számomra nagyon nem világos és nem is jó. Mindenesetre még mindig úgy gondolom, hogy én rontottam el valamit, csak nem tudom, mit, hogy miért viselkedik máshogy a mangle tábla/routolás, mint eth-wifi esetben.

De miből tűnik úgy, hogy rosszul működik?

Adott ez (ppp + eth eset):


ip route show:
10.64.64.64 dev ppp0 proto kernel scope link src 94.44.62.203
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.2 metric 202
default dev ppp0 scope link

(Kitöröltem a szabályt, ami default gw ethernet felé irányít, az utolsó szabály szerint a default csomagok a ppp0-n mennek ki)

A többi lépés:

ip route add default via 192.168.2.1 table eth

(ip route show table eth:
default via 192.168.2.1 dev eth0)

iptables -t mangle -A PREROUTING -i eth0 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -i ppp0 -j MARK --set-mark 1

ip rule add fwmark 1 table eth

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

ip route flush cache

A beállítások szerinti routing policy értelmében _minden_ csomagot az eth0-n kellene kiküldenie. Indítok néhány letöltést, és mégis _mindig_ a ppp0-n megy ki, pedig az eth-n kellene kimennie, mert az 1-es mark az eth táblára mutat.

Módosítás:

ip rule add fwmark 1 table eth --> ip rule add from 94.44.62.203 table eth

Azaz olyan szabályt alkotok, ami a ppp0 interfészről (94.44.62.203 a címe) jövő csomagokat az eth tábla szerint routolja minden korábbi előzmény és feltétel nélkül, és láss csodát, ekkor az eth0-n mennek ki a csomagok! (tehát szépen kiveszi az eth altáblából és alkalmazza is)

Ezek szerint itt mindenképpen valami gond van. Úgy tűnik, mintha az iptables PREROUTING a mangle táblára a routolás _után_ futna le ebben az esetben, mert az iptables -t mangle -nvL kimenetben látszik, hogy nőttek a számlálók, tehát be lett állítva az fwmark értéke, de már későn, mert a routolás megtörtént.

Ezt magyarázza meg nekem valaki, mert ugyanezzel a felépítéssel/logikával eth + wifi esetben tökéletesen működik minden!


Az a gond, hogy a 'CONNECTED' típusú route-ok (amik nem gateway-re, hanem interfészre mutatnak) a main táblába kerülnek, és azokat preferálni kéne a távolabbi route-okkal szemben (a gateway-re mutató, pl. a default route), különben meglepő élmények tudnak következni.

Ez lehet, hogy egy olyan ún. "meglepő élmény"?
--
http://www.open-st.eu