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