ip rule add fwmark i kernel > 2.6.30

1 03 2011

Jak to bywa w naszych otwartych systemach przychodzi czasami pora na kompilacje kernela. U mnie ostatnio też nadszedł taki dzień, a raczej noc, bo w serwerowni pojawiłem się o 2:00 żeby zrestartować serwer, aby w razie niepowodzenia móc szybko przywrócić starego. Wersja nowego kernela to  2.6.33, a do tej pory wszystko działało na 2.6.28.

Do rzeczy – po restarcie wszystko wstało, jednak nie działał mi routing na dwa łącza. Rozwiązane to miałem tak że pakiety markowałem w firewallu i dawałem im mark 1 a później w regułach routingu taki pakiet kierowałem do odpowiedniej tablicy routingu:

ip rule add fwmark 1 table T1

Szukając rozwiązania problemu trafiłem na wpis w bibli: http://lartc.org/howto/lartc.netfilter.html oraz na masę zapytań na forach właśnie o ten problem. W kernelu powyżej 2.6.30 zniknęła opcja CONFIG_IP_ROUTE_FWMARK – sugestia z trzepaka, że od tej wersji jądra po prostu została ona włączona na stałe i faktycznie tak jest bo w końcu jak się zaraz okaże wszystko działa.

Po dalszych poszukiwaniach problemu i dziesiątkach zapytań do wuja google trafiłem na wątek: http://forums.gentoo.org/viewtopic-t-813308.html gdzie w ostatnim poście znajduje się rozwiązanie! Wpisanie dwóch magicznych linii:

sysctl net.ipv4.conf.default.rp_filter = 2
sysctl net.ipv4.conf.all.rp_filter = 2

Po tym zabiegu działanie routingu wróciło do normy! Jeszcze mała informacja dla tych którzy używają skryptów barro (inet.one.pl) w firewallu jest linia:

echo "1" >/proc/sys/net/ipv4/conf/all/rp_filter

Należy wartośc 1 zamienić na 2, gdyż po przeładowaniu skryptów routing nie będzie działał.