Dwa default gateway w jednym systemie

Z Thomas-Krenn-Wiki
Przejdź do nawigacji Przejdź do wyszukiwania
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

Linki

Linux Advanced Routing & Traffic control

Powiązane artykuły

2U AMD single CPU SC825
Certyfikaty sprzętu Thomas Krenn
TK USB Stick - system do analizy i odzyskiwania danych