Miałem drobny problem, z którym ostatnio brzęczałem na newsach.
Mam router, który routuje ze świata do dwu różnych fizycznie sieci.
Mam tam debiana z jądrem dystrybucyjnym, w którym nie ma IMQ.
Chcę mieć podział pasma dla użytkowników.
I wydawałoby się, że czeka mnie ręczne patchowanie jądra i tego typu
zabawy albo podział sztywny pomiędzy interfejsami.
Okazuje się, że jednak nie :-).
Przy odrobinie rzeźby można zrobić IMQ bez IMQ. Niestety, nie zadziała
to w przypadku pakietów, których celem jest nasz router, ponieważ cała
zabawa opiera się na policy routingu, a reguła 0 jest wykonywana zawsze
jako pierwsza, a wpisy typu local zawsze lądują w tablicy 0 (popraw mnie
ktoś, jeżeli bredzą ;->).
Generalnie sytuacja jest taka:
świat
|
+------------+
| eth0 |
local1------- | eth1 eth2 |-----local2
+------------+
Czego potrzebujemy? Potrzebujemy jakiejś rurki, którędy będą przechodzić
pakiety przychodzące ze świata.
A zatem sobie tę rurkę stwórzmy.
ip addr 127.0.0.2 dev lo
ip addr 127.0.0.3 dev lo
Dwa adresy są potrzebne, żeby zrobić dwa końce tunelu. Prawdopodobnie
można dodać tylko jeden, a jako drugi użyć 127.0.0.1, ale tak będzie
chyba porządniej. Mniejsza z tym w tej chwili.
Tworzymy sobie tunel (może być ipip może być gre, ja użyłem ipip).
ip tunnel add koniec1 mode ipip remote 127.0.0.3 local 127.0.0.2
ip tunnel add koniec2 mode ipip remote 127.0.0.2 local 127.0.0.3
ip link set koniec1 up
ip link set koniec2 up
ip addr add 10.0.0.1 dev koniec1
ip addr add 10.0.0.2 dev koniec2
Mamy zatem rurkę przypiętą po obu stronach do naszego routera. Teraz
pozostaje tylko zrobić małą manianę z routingiem i wyłączyć rp_filter
(bez tego pakiety przechodzące przez rurkę zostaną odrzucone!)
ip rule add iif eth0 lookup 10
ip rule add iif koniec2 lookup main
ip route add default dev koniec1 table 10
ip route flush cache
echo 0 >/proc/sys/net/ipv4/conf/koniec2
I teraz wszystkie pakiety wchodzące z interfejsu eth0 (poza tymi, które
mają zakończyć bieg na routerze) będą najpierw przesłane przez rurkę
koniec1->koniec2, a dopiero potem wyroutowane gdzie trzeba.
Interfejs koniec1 jest o tyle miły, że jest to normalny interfejs, na
którym możemy sobie pozakładać qdiski i kształtować ruch ile wlezie :-)
Pozdrawiam i mam nadzieję, że się komuś przyda
--
/\-\/\-\/\-\/\-\/\-\/\-\/\ Księżyc jest księżycem także bez sonaty
\ Kr...@epsilon.eu.org / (Zbigiew Herbert)
/ http://epsilon.eu.org/ \
\/-/\/-/\/-/\/-/\/-/\/-/\/
Generalnie sytuacja jest taka:
echo 0 >/proc/sys/net/ipv4/conf/koniec2/rp_filter