/ Linux Reviews / Networking / Kształtowanie Ruchu i Zaawansowany Routing HOWTO - en - pl Rozdział 10. Rozkładanie obciążenia na wiele interfejsówIstnieje kilka sposobów na zrealizowanie tego zagadnienia. Jednym z najprostszych jest `TEQL' - `Trywialny wyrównywacz łącza' (ang. "Trivial link equalizer"). Podobnie jak większość rzeczy, które działają z kolejkami - musi działać z obu stron. Obie strony łącza będa musiały współpracować dla pełnego efektu. Wyobraź sobie taką sytuację:
+-------+ eth1 +-------+
| |==========| |
'sieć 1' ----| A | | B |---- 'sieć 2'
| |==========| |
+-------+ eth2 +-------+
A i B to routery i załóżmy na moment, że pracują w oparciu o Linux. Jeśli ruch przechodzi z sieci 1 do sieci 2, ruter A będzie musiał rozłożyć pakiety na oba połączenia z ruterem B. Ruter B musi wiedzieć, że taka sytuacja ma miejsce i być na to przygotowany (skonfigurowany). Dokładnie taka sama sytuacja zachodzi w drugą stronę, gdy pakiety z sieci 2 przechodzą do sieci 1 - muszą zostać wysłane zarówno przez interfejsy eth1 jak i eth2. Część zajmująca się dystrybucją pakietów obsługiwana jest przez urządzenie `TEQL', które konfiguruje się w następujący sposób:
# tc qdisc add dev eth1 root teql0 # tc qdisc add dev eth2 root teql0 # ip link set dev teql0 up Nie zapomnij wydać polecenia ip link set up! Trzeba to oczywiście wykonać na obu komputerach. Urządzenie teql0 to dystrybutor działający na zasadzie round-robin w oparciu o interfejsy eth1 i eth2. Żadne dane nigdy nie przychodzą przez urządzenie teql, istnieje ono tylko w postaci `surowej' na interfejsach eth1 i eth2. Mamy urządzenia, potrzebujemy teraz odpowiedniego routingu. Jednym ze sposobów, jest przedzielenie sieci /31 do obu łączy i do urządzenia teql0: Na routerze A: # ip addr add dev eth1 10.0.0.0/31 # ip addr add dev eth2 10.0.0.2/31 # ip addr add dev teql0 10.0.0.4/31 Na routerze B: # ip addr add dev eth1 10.0.0.1/31 # ip addr add dev eth2 10.0.0.3/31 # ip addr add dev teql0 10.0.0.5/31 Router A powinien móc wykonać ping do 10.0.0.1, 10.0.0.3 i 10.0.0.5 przez dwa fizyczne łącza i jedno urządzenie wyrównujące. Router B powinien móc wykonać ping do 10.0.0.0, 10.0.0.2 i 10.0.0.4. Jeśli to działa, router A powinien ustawić trasę 10.0.0.5 na domyślną do sieci 2, a router B trasę 10.0.0.4 do sieci 1. W tym szczególnym przypadku, w którym sieci 1 jest twoją siecią domową, a sieć 2 Internetem, router A powinien ustawić sobie 10.0.0.5 jako domyślną bramkę. 10.1. ProblemyNic nie jest takie proste jak wygląda. eth1 i eth2 na obu routerach muszą mieć wyłączone filtrowanie dla ścieżek powrotnych, ponieważ w innym przypadku będą odrzucały pakiety przeznaczone dla innych adresów IP niż ich własne:
# echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter # echo 0 > /proc/sys/net/ipv4/conf/eth2/rp_filter Następną sprawą jest zmiana kolejności pakietów. Powiedzmy, że musimy wysłać 6 pakietów z A do B. eth1 obsłuży 1, 3 i 5. eth2 obsłuży 2, 4 i 6. W idealnym świecie, router B otrzyma je w takiej kolejności: 1, 2, 3, 4, 5, 6. Ale w świecie rzeczywistym większe prawdopodobieństwo ma inna sytuacja, np. taka kolejność: 2, 1, 4, 3, 6, 5. Problem polega na tym, że myli to TCP/IP. O ile nie jest to problem dla łączy przez które przechodzi wiele różnych sesji TCP/IP, to nie będziesz w stanie połączyć obu fizycznych łączy w jedno logiczne by uzyskać np. szybsze transfery ftp chyba, że wysyłającym lub odbierającym systemem operacyjnym jest Linuks, który nie daje się takim prostym problemom. Oczywiście, dla wielu aplikacji, równoważenie obciążenia łącza to wspaniały pomysł.
/ Linux Reviews / Networking / Kształtowanie Ruchu i Zaawansowany Routing HOWTO |