Dwa default gateway w jednym systemie
Uwaga: Prosimy zwrócić uwagę, że ten artykuł / kategoria nie jest już aktualizowana, gdyż odnosi się do starszych komponentów oprogramowania / sprzętu. Ta strona jest nadal dostępna jedynie w celach informacyjnych. |
---|
Artykuł ten opisuje konfigurację 2 lub więcej default gateway w Linuksie.
Opis problemu
W systemie Linux znajdują się 2 lub więcej kart sieciowych i każda ma własny default gateway. Standardowo w systemie możliwy jest tylko jeden default gateway, w opisanym przypadku dochodzi do asynchronicznego routingu, przy którym router nie przekazuje pakietów dalej.
Rozwiązanie
Do rozwiązania tego problemu może zostać wykorzystany program iproute2, który zawarty jest we wszystkich nowoczesnych dystrybucjach Linuksa i jest z reguły już zainstalowany. Normalnie system Linux ma tablice tras, w której może być zapisany tylko jeden default gateway. iproute2 umożliwia założenie dodatkowych tablic i pozwala na ich wykorzystanie przez system według innych reguł.
Punkt wyjścia
Zakładamy, że posiadamy 2 Interfaces, eth0 i eth1. Obie sieci, które mają być wykorzystywane to 192.168.0.0/24 i 10.10.0.0/24, zawsze .1 ma być gateway danej sieci. W Debianie konfiguracja wyjściowa sieci wygląda następująco: /etc/network/interfaces
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug eth0 iface eth0 inet static address 192.168.0.10 netmask 255.255.255.0 gateway 192.168.0.1 # The secondary network interface allow-hotplug eth1 iface eth1 inet static address 10.10.0.10 netmask 255.255.255.0
Dodanie drugiej tablicy tras
Aby dodać drugą tablicę tras należy zedytować plik /etc/iproute2/rt_tables. W przykładzie nazwiemy tablicę tras "rt2" i nadamy referencję 1. Wspomniany plik powinien wyglądać następująco:
# # reserved values # 255 local 254 main 253 default 0 unspec # # local # #1 inr.ruhep 1 rt2
Konfiguracja nowej tablicy tras
Do osiągnięcia celu brakuje teraz jedynie 4 poleceń. Jako pierwsze powinna zostać wypełniona nowa tablica, co może zostać przeprowadzone następującym poleceniem:
ip route add 10.10.0.0/24 dev eth1 src 10.10.0.10 table rt2 ip route add default via 10.10.0.1 dev eth1 table rt2
Pierwszym poleceniem ustala się, że sieć 10.10.0.0/24 dostępna jest przez interfejs eth1, drugie polecenie ustala default gateway.
Reguły routingu
Aby system wiedział, że ma wykorzystywać nowa tablicę tras muszą zostać skonfigurowane 2 reguły:
ip rule add from 10.10.0.10/32 table rt2 ip rule add to 10.10.0.10/32 table rt2
Przez to ustalane jest, że zarówno ruch z IP 10.10.0.10 jak i ruch, który przebiega z/do IP 10.10.0.10 ma korzystać z tablicy tras rt2.
Uczynienie konfiguracji trwałą
Polecenia "ip rule" i "ip route" nie są aktualne po restarcie, dlatego powinien zostać napisany skrypt (np. /etc/rc.local), który zostanie podczas uruchamiania wykonany. W Debianie to polecenie może zostać dodane w /etc/network/interfaces, co wygląda następująco:
iface eth1 inet static address 10.10.0.10 netmask 255.255.255.0 post-up ip route add 10.10.0.0/24 dev eth1 src 10.10.0.10 table rt2 post-up ip route add default via 10.10.0.1 dev eth1 table rt2 post-up ip rule add from 10.10.0.10/32 table rt2 post-up ip rule add to 10.10.0.10/32 table rt2
Więcej niż 2 karty sieciowe / gateway
Jeżeli jest dostępnych więcej kart sieciowych niż 2, to dla każdej następnej może zostać utworzona nowa tablica tras, analogicznie do przedstawionego przykładu.
Kontrola konfiguracji
Dla upewnienia się, że zarówno reguły jak i wpisy w tablicy są poprawnie stosowane, można wykorzystać następujące polecenie:
ip route list table rt2 ip rule show