Equal Cost MultiPath

Z HKfree wiki
Přejít na: navigace, hledání

Autor: Pavkriz

V tomto článku je podchycen problém s routováním mezi dvěma místy v síti mezi kterými existují dvě ekvivaletní cesty.

Symptomy

V Zebře byly nastavene costy tak, že ze Stěžer na Špár (i opačně) to bylo dvěma cestami stejně daleko. To se pozná z výpisu Zebry tak, že tam jsou pro danou cílovou síť dva řádky:

stezery> show ip route
.....
O>* 10.107.2.0/27 [110/210] via 10.107.0.129, eth0, 00:28:53
  *                         via 10.107.0.130, eth0, 00:28:53
.....

Alespoň jeden router po alespoň jedné cestě do cíle měl rp_filter nastaven na 1 (to bylo zřejmě kvůli přeinstalování routeru, Debian má defaultně 1; u Linuxu obecně je defaultně nastaveno 0, pouze některé distribuce toto mění na default 1), zjistí se z výpisu:

# cat /proc/sys/net/ipv4/*/conf
1
1
1
1
1

Příčiny

Zebra se znažila routovat chvíli jednou cestou a chvíli druhou. Pozor na to, že to není zřejmé z výpisu příkazu 'route'!!!!! To mě nejvíc šokovalo (jsem lama - viz to že se mají používat modernější iproute2 utility). Tam byl router pro cílovou podsíť pořád stejný ačkoliv jádro routovalo chvíli na jeden router a chvíli na druhý!!! Takže to lze odhalit třeba z výpisu ze Zebry >show ip route nebo pomocí iproute2 # ip route.

Fakt že to routovalo pokaždé jinudy se nelíbil rp_filteru v routru na Špáru (kde byl zapnutý) a proto jednu z těch cest neakceptoval a (s)prostě zahodil packety co dorazily "podivnou" cestou.

Řešení

Mít vypnutý (0) rp_filter na interfacech které jsou součástí nějakého topologického kolecka, např.:

# echo "0" > /proc/sys/net/ipv4/wlan1/conf/rp_filter
# echo "0" > /proc/sys/net/ipv4/wlan2/conf/rp_filter

Ověřit si, že v "klidu" (když není žádný výpadek nějaké linky) to routuje trvale tudy kudy bych očekával, případně poladit costy (nezapomenout na obou stranách spoje, pokud neprovozujete "kruhák") tak aby to (ne)routovalo tudy kudy (ne)chcete.

Hlavní poučení

  1. v našich kolečkách všude vypínat rp_filter
  2. co je ve výstupu příkazu 'route' uplně neplatí - platí to co píše Zebra pres telneta při 'show ip route' nebo co píše iproute2 při 'ip route' (v případě duplicitních cest stejné délky)
  3. koukat občas do Zebry, zda neexistují někam dvě úplně ekvivalentní (z pohledu Zebry) cesty do téhož cíle a případně se zamyslet, zda to tak opravdu má být, nebo zda by se měly costy poupravit

Pro ty co chtějí vědět víc