Linux routing - podivná záhada

Pavel Troller patrol na sinus.cz
Čtvrtek Červenec 30 08:36:02 CEST 2015


Zdravím,
  jak asi víte, jsem v okolí považován za Linuxáka a dokonce o tom i učím :-).
Ale co se mi děje na jednom stroji v poslední době mne natolik mate, že se
s tím obrátím sem, schválně, jestli někdo přijde na to, čím to je a jak to
vyřešit bez rebootu stroje :-).
  Zbláznil se tam routing. Pakety si chodí, kudy chtějí a ne tudy, kudy mají.
Nastalo to po úpravách routingu kvůli vnějším zásahům.
  Takže, vzhůru k problému.
root na box:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         x.x.x.126       0.0.0.0         UG    1      0        0 eth0
10.0.0.0        x.x.x.8         255.0.0.0       UG    0      0        0 eth0
192.168.0.0     x.x.x.8         255.255.0.0     UG    0      0        0 eth0
x.x.x.0         0.0.0.0         255.255.255.128 U     0      0        0 eth0
  O co tu jde: Default gateway vede na jednu IP, privátní rozsahy jsou z toho
vyčleněny a mají separátní statické routy vedoucí na jiný router v téže síti.
x.x.x.0 je síť, v níž je stroj umístěn, jeho vlastní IP je x.x.x.5.

Ale, viz následující případy:
root na box:~# traceroute 192.168.20.3
traceroute to 192.168.20.3 (192.168.20.3): 1-30 hops, 46 byte packets
 1  x.x.x.8 (x.x.x.8)  0.130 ms (ttl=64!)  0.104 ms (ttl=64!)  0.91 ms (ttl=64!)
 2  192.168.192.200 (192.168.192.200)  12.2 ms  11.6 ms  11.9 ms
 3  192.168.20.27 (192.168.20.27)  13.3 ms  13.2 ms  16.3 ms
 4  192.168.20.3 (192.168.20.3)  13.1 ms (ttl=248!)  *  16.3 ms (ttl=248!)
Zde je vše OK, šlape to, jak má.

root na box:~# traceroute 192.168.20.4
traceroute to 192.168.20.4 (192.168.20.4): 1-30 hops, 46 byte packets
 1  x.x.x.126 (x.x.x.126)  0.819 ms  0.568 ms  0.500 ms
 2  x.x.x.161 (x.x.x.161)  7.7 ms  5.67 ms  5.65 ms
 3  * * *
 4  * * *
Bum! Místo do statické route se to snaží hnát do default route! A to se
prosím ta IP liší jen o 1 v posledním oktetu! Tím je osud paketu samozřejmě
zpečetěn.

A to nejlepší na konec:
root na box:~# traceroute 192.168.20.5
traceroute to 192.168.20.5 (192.168.20.5): 1-30 hops, 46 byte packets
 1  x.x.x.5 (x.x.x.5)  *  7.4 ms (ttl=64!) !H  *
Tak to už je úplně špatně - ten paket není poslán vůbec nikam a jeví se to,
jako by měl být doručen v lokální síti a příslušný stroj byl nedostupný.
A opět jde jen o velmi blízkou IP adresu.

S rozlišením na individuální IP adresy (viz tyto příklady) je "kdesi"
zapamatován tento nesmyslný routing. Je to v čase stálé, jednotlivé IP
failují vždy stejným způsobem (buď do default gw místo do statiky nebo
úplný fail). Jiné problémy to nemá, tj. routing mimo ty privátní rozsahy
správně vede do default route.

Networking uvedeného stroje byl několikráte zcela reinicializován - všechny
routy pryč, všechny interface down atd. a poté znovu zadán. Na tento problém
to však nemá žádný vliv, po zadání to začne routovat úplně stejně nesmyslně,
jako před tím.

Ještě poznámka - na stroji se používá "advanced routing", kdy na základě
pravidel (ip rule ...) se volí individuální směrovací tabulka (ip route
... table X). Avšak v těchto tabulkách jsou jen výjimky, 1 - 2 řádky. 
Napsal jsem si script na výpis všech 256 speciálních routovacích tabulek
jádra a tyto nesmysly nejsou v žádné z nich.

Ještě info - jádro 3.1.0. Celkem vykopávka, ale jde o produkční stroj, u
kterého jsou updaty značně nežádoucí, pokud stroj funguje, jak má :-).

Zdraví Pavel


Další informace o konferenci Hw-list