V-Smart - Twój partner w biznesie internetowym

LMS Router – dwa łącza WAN w trybie load balancing, sterowania usługami oraz ruchem IP z LAN

Temat dość często poruszany wśród adminów, którzy obsługują małe sieci lokalne, gdzie trzeba męczyć się z DSLami. Jest to również temat, o który Wy (użytkownicy moich rozwiązań) pytacie w komentarzach na tym blogu. Zatem spróbujmy powolutku wyjaśnić o co w tym tak na prawdę kaman. Omówimy tutaj trzy podstawowe możliwości obsługi dwóch lub więcej łączy WAN.

Opis znajdujący się poniżej operuje na jednej dodatkowej tabeli routingu. Lepsze podejście znajdziecie na forum (klik).

Dla uproszczenia sprawy obczajmy najpierw system do zarządzania routerem w wersji podstawowej, którego w miarę pełny i aktualizowany na bieżąco opis znajdziecie tutaj (kliknij). Po instalacji powinniśmy mieć dwie karty sieciowe w kompie czyli 1xWAN i 1xLAN. Następnie dokładamy kolejny interfejs (karta sieciowa, śledzik czy jak to tam zwą) do maszynki, który w systemie przyjmie po restarcie nazwę eth2. Podczas dalszego pisania bajki o multi-wan będziemy wykonywać następujące kroki niezależnie od oczekiwanego efektu końcowego:

  • przypisanie adresacji IP do nowego łącza WAN oraz utworzenie kolejnego interfejsu IMQ dla HTB
  • utworzenie tablicy routingu dla nowego łącza (sprawa konieczna absolutnie) oraz reguł routingu opartych o markowanie pakietów/połączeń
  • ustawienie parametrów NATa dla nowego łącza
  • ustawienia parametrów HTB czyli dynamicznego podziału ruchu na tym drugim łączu WAN
  • wreszcie i nareszcie metody sterowania przepływem pakietów poprzez multi-wan.

Załóżmy bez większego zastanowienia, że drugie łącze ma następującą adresację IP:

ADRES IPv4: 89.10.11.12
MASKA PODSIECI: 255.255.255.240 (/28)
ADRES IP SIECI: 89.10.11.0/28
ADRES BRAMY DOMYŚLNEJ: 89.10.11.1
ADRES BROADCAST (ROZGŁOSZENIOWY): 89.10.11.15

Załóżmy też, że podłączyłeś kabel sieciowy do eth2 😛 No to jedziemy z tym.

1. Przypisanie adresacji IP do nowego łącza WAN

W pliku /etc/modules zamieniamy wpis "imq numdevs=3" na

imq numdevs=4

W pliku /etc/rc.local dopisujemy pod "/usr/sbin/ip link set eth1" up następujące dwie linijki:

/usr/sbin/ip a a 89.10.11.12/28 brd 89.10.11.15 dev eth2
/usr/sbin/ip link set eth2 up

2. Utworzenie tablicy routingu dla nowego łącza

W pliku /etc/iproute2/rt_tables na końcu dopisujemy numer oraz nazwę nowej tabeli routingu:

200 wan2

Następnie znów w pliku /etc/rc.local po wpisie z pkt. 1 dopisujemy trasy dla tej tabeli oraz reguły dla niej. Musimy wbić do głowy linuksowi, że jeśli będzie korzystał z nowej tabeli routingu wan2 to musi wiedzieć, w jaki sposób obsłużyć ruch do każdej podsieci LAN z dostępem do Internetu, skonfigurowanej na routerze. Domyślnie na routerze skonfigurowana jest podsieć 192.168.100.0/24 z bramą 192.168.100.254 na interfejsie eth1. Jeśli dodałeś/łaś więcej podsieci LAN - musisz je tutaj również dopisać. Dodatkowo występuję znacznik pakietu 0x1, który będzie dalej wykorzystywany w firewallu do oznaczania ruchu.

# trasy dla tabeli wan2
/usr/sbin/ip ro a table wan2 89.10.11.0/28 dev eth2 src 89.10.11.12
/usr/sbin/ip ro a table wan2 192.168.100.0/24 dev eth1 src 192.168.100.254
# trasa domyslna dla tabeli wan2
/usr/sbin/ip ro a table wan2 default via 89.10.11.1
# regula zwrotna dla podsieci na wan2
/usr/sbin/ip ru a from 89.10.11.0/28 table wan2
# przypisanie znacznika (marka) pakietow dla tej tabeli
/usr/sbin/ip ru a fwmark 0x1 table wan2

Ponieważ każde połączenie PPP (zarówno PPPoE jaki i PPtP) dodaje swoja własną trasę do domyślnej tablicy routingu, musimy je zmusić do dodania jej także do tablicy dla drugiego łącza. W tym celu do pliku /etc/ppp/ip-up dopisujemy następująca linijkę:

/usr/sbin/ip r a table wan2 ${5} dev ${1}

oraz do pliku /etc/ppp/ip-down podobną (ale nie taką samą!):

/usr/sbin/ip r d table wan2 ${5} dev ${1}

3. Ustawienie parametrów NATa dla nowego łącza

Najpierw dla porządku dodajmy co nieco do pliku /serwer/serwer.conf w miejscu według uznania:

EXTDEV2=eth2
DOWNLOAD2=2000
UPLOAD2=500

Następnie do pliku /serwer/skrypty/nat.sh w sekcji "# MASKARADA dla wszystkiego" dopisujemy:

$IPTABLES -t nat -A POSTROUTING -s $INTNET1 -o $EXTDEV2 -j MASQUERADE
$IPTABLES -t nat -A POSTROUTING -s $NOWI -o $EXTDEV2 -j MASQUERADE

4. Ustawienia parametrów HTB dla drugiego łącza WAN

W pliku /serwer/skrypty/mangle.sh dopisujemy w sekcji "# podniesienie IMQ" następującą linijkę:

$IP link set imq3 up

oraz w sekcji "# ruch przez IMQ" linijkę:

$IPTABLES -t mangle -A PREROUTING -i $EXTDEV2 -j IMQ --todev 3

Następnie w pliku /serwer/skrypty/htbwan.sh w sekcji "# czyszczenie kolejek" dodajemy:

$TC qdisc del root dev imq3 2> /dev/null > /dev/null
$TC qdisc del root dev $EXTDEV2 2> /dev/null > /dev/null

oraz poniżej w sekcji "# ograniczenia WAN" doklejamy:

htbwan imq3 sport ctnatchg $DOWNLOAD2
htbwan $EXTDEV2 dport ctnatchg $UPLOAD2

Teraz czas na reboot. Po ponownym odpaleniu zabawki powinniśmy mieć już przygotowaną obsługę dwóch łączy WAN. No i teraz zaczynamy ciekawe sprawy 😀

5. Load balancing pomiędzy dwa łącza

Load balancing na poziomie routingu polega na keszowaniu tras. Więc jeśli po restarcie routera jakaś trasa (np do strony v-smart.pl) zostanie raz skeszowania to będzie istnieć do upływu pewnego czasu (nie wiem ile to) lub do restartu maszyny. Otwórz plik:

/etc/network/interfaces

Znajdź tam wpis dotyczący "gateway adres_twojej_bramy". Zakomentuj go znakiem #. Przy okazji jak już tu jesteś to zwróć uwagę co jest napisane w "dns-nameservers". Powinien tu być adres serwera DNS który będzie ogólnodostępny i nie blokowany przez operatorów. W szczególności przez operatorów, od których masz 2 wany 😉 Polecam googlowy 8.8.8.8 tutaj wpisać. W przeciwnym wypadku może wystąpić problem z rozwiązywaniem nazw domenowych podczas sterowania ruchem.

Następnie do /etc/rc.local wrzuć gdzieś na samym dole (po podniesieniu interfejsów eth1 i eth2):

/usr/sbin/ip r a default scope global nexthop via adres_twojej_bramy dev eth0 weight 1 nexthop via 89.10.11.1 dev eth2 weight 1

Reebot i gotowe :) Masz super load-balancing. Parametr weight możesz dostosować do stopnia rozłożenia ruchu np 1:2.

6. Sterowanie usługami oraz ruchem z IP lanowego

Polega na wyrzuceniu ruchu do jakiegoś adresu IP, ruchu od jakiegoś adresu z LAN lub ruchu do jakiegoś portu docelowego (np 80 - www) na drugie łącze. W tym celu do /serwer/skrypty/mangle.sh dopisujemy:

# ruch z wybranego IP lanowego po drugim laczu
#$IPTABLES -A PREROUTING -t mangle -s 192.168.100.1 -j MARK --set-mark 0x1

# ruch do wybranego adresu docelowego po drugim laczu
#$IPTABLES -A PREROUTING -t mangle -d 195.205.4.134 -j MARK --set-mark 0x1

# ruch po wybranym porcie (80) docelowym po drugim laczu
#$IPTABLES -A PREROUTING -t mangle -p tcp --dport 80 -j MARK --set-mark 0x1

Nastepnie odpalamy skrypcik: /serwer/start_all i powinno działać 😀

Be Sociable, Share!
Tagged as: , , , , , ,    autor: yarzombo Comments Off