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ó.
Én is ezt hittem, aztán elolvastam a doksit. Persze a tapasztalataiddal sem vág egybe, de enyéimmel igen: a mangle/PREROUTING a forwardolt (in -> out) packetokra fut le a routing előtt, a mangle/OUTPUT a helyben generált (-> out) packetokra fut le a routing előtt. A nevükkel ellentétben... Van még egy tudnivaló: a routing döntés a route cache miatt az első packetnél eldől, onnantól kezdve már hiába variálsz.
mangle:
This table is used for specialized packet alteration. Until
kernel 2.4.17 it had two built-in chains: PREROUTING (for
altering incoming packets before routing) and OUTPUT (for
altering locally-generated packets before routing). Since
kernel 2.4.18, three other built-in chains are also sup-
ported: INPUT (for packets coming into the box itself), FOR-
WARD (for altering packets being routed through the box),
and POSTROUTING (for altering packets as they are about to
go out).
Ez lehet, hogy egy olyan ún. "meglepő élmény"?
Nem, az általam ismertetett élmény az lehet pl., hogy az ethernet hálózatodon van egy 192.168.1.1/24-es cím, a gépedről induló 192.168.1.2-re címzett forgalom meg az ethernet láb helyett kimegy a default route-on keresztül a ppp másik végpontjára, mert a default route "előbbre való" lesz a rule-ok miatt.
Persze ezt ki lehet védeni, ha tudod, hogy milyen címek vannak direktben az ethernet lábon, de ha pl. dhcp-vel kapod a címet egy kábelnetes szolgáltatótól, aki néha más címtartományból oszt, akkor arra nem tudsz szabályt írni, ott mindenképpen a main routing táblát kell előre sorolnod - de akkor viszont abban nem lehet default route.