Praca w sieci z wieloma kartami sieciowymi

16

Mam serwer Ubuntu 12.04 z 4 kartami sieciowymi. Potrzebuję użyć każdej karty sieciowej do osobnej funkcji. Oto opis mojej konfiguracji:

etho = 10.234.0.2 netmask = 255.255.255.252 gw = 10.234.0.1 This is on vlan 234
eth1 = 10.235.0.2 netmask = 255.255.255.252 gw = 10.235.0.1 This is on vlan 235
eth2 = 10.236.0.2 netmask = 255.255.255.252 gw = 10.236.0.1 This is on vlan 236
eth3 = 10.237.0.2 netmask = 255.255.255.252 gw = 10.237.0.1 This is on vlan 237

Potrzebuję być w stanie skierować ruch do i z poszczególnych adresów IP dla oddzielnych usług internetowych. tj. 10.235.0.2 to strona internetowa, 10.236.0.2 to inna strona, a 10.237.0.2 to trzecia strona. 1. adres IP służy do zarządzania serwerem.

Myślę, że problem dotyczy routingu, ale jestem na tyle nowy w Linuksie, że nie mam pełnego zrozumienia tajników możliwości routingu.

Oto, co jest w moim /etc/network/interfacespliku:

auto lo
iface lo inet loopback

# WWW Management
auto eth0
iface eth0 inet static
address 10.234.0.2
netmask 255.255.255.252
gateway 10.234.0.1
nameseervers 10.230.1.103, 10.230.70.70

# WWW
auto eth1
iface eth1 inet static
address 10.235.0.2
netmask 255.255.255.252
gateway 10.235.0.1

# WTB
#auto eth2
#iface eth2 inet static
#address 10.236.0.2
#netmask 255.255.255.252
#gateway 10.236.0.1

# Moodle
#auto eth3
#iface eth3 inet static
#address 10.237.0.2
#netmask 255.255.255.252
#gateway 10.237.0.1

Wyłączyłem dwie ostatnie sieci, aby zmniejszyć zamieszanie.

Z góry dziękuję za całą pomoc, komentarze i sugestie.

użytkownik168645
źródło

Odpowiedzi:

15

Po wykonaniu normalnej konfiguracji samego eth0 wróciłem i dodałem config dla eth1. Przy zaledwie eth0 w tabeli tras było:

# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
default via 192.168.0.97 dev eth0 metric 100

Ale kiedy przywołałem eth1, kolejność domyślnych instrukcji tras określała, który interfejs był zawsze używany. Jak pokazano poniżej, zdarza się, że wybiera trasę eth1 do bramy 192.168.1.65.

# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.1.65 dev eth1 metric 100
default via 192.168.0.97 dev eth0 metric 100

tylko jedna instrukcja bramy

Pierwszym problemem może być dodatkowa domyślna trasa „przez 192.168.1.65”. Pojawia się tam, jeśli definicja eth1 w / etc / network / interfaces ma instrukcję „gateway 192.168.1.65”. Więc usuń wszelkie dodatkowe instrukcje bramy i odbij interfejs:

# ifdown eth1
# ifup eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.0.97 dev eth0 metric 100

skonfiguruj nową tabelę routingu

Utwórz nową oddzielną tabelę routingu zawierającą domyślną trasę odpowiednią dla całego ruchu wypływającego z eth1. Numer tabeli tutaj nie jest ważny; 101 po prostu nie jest główną tabelą routingu. Zrób to za pomocą polecenia „post-up” w konfiguracji eth1 w / etc / network / interfaces. Dodaj tylko jeden post-up na eth1; Nie dodawaj go do żadnego z interfejsów eth1:.

post-up ip route add default via 192.168.1.65 dev eth1 table 101

Bounce eth1. Główna tablica routingu pozostaje niezmieniona, a tablica 101 będzie zawierać domyślną trasę via 192.168.1.65, jeśli eth1 działa.

# ifdown eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
default via 192.168.0.97 dev eth0 metric 100

# ip route show table 101   (ie, table is empty, no output)
# ifup eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.0.97 dev eth0 metric 100

# ip route show table 101
default via 192.168.1.65 dev eth1

nowa reguła routingu

Dodaj regułę routingu, aby użyć tabeli 101 do wybrania domyślnej trasy dla pakietów, które powinny wyjść poza eth1.

# ip rule add from 192.168.1.64/27 lookup 101
# ip rule show
0:     from all lookup local
32765: from 192.168.1.64/27 lookup 101
32766: from all lookup main
32767: from all lookup default

Dodaj również regułę do /etc/network/interfacespliku:

post-up ip rule add from 192.168.1.64/27 lookup 101

Teraz pamiętaj, aby dodać czyszczenie, aby usunąć trasę i rządzić, gdy interfejs ulegnie awarii:

post-down ip rule del from 192.168.1.64/27
post-down ip route del default via 192.168.1.65 table 101

[EDYCJA dla Ubuntu 16.04+] Jak wskazano tutaj i z testu, który wykonałem z tej pomocy, ip route2 zmienił jego strukturę poleceń. Aby wykonać pracę, musisz trochę się dostosować, aby uporządkować man ip punkty .

up ip route add default table 101 dev eth1 via 192.168.1.65
up ip rule add from 192.168.1.64/27 lookup 101
down ip rule del from 192.168.1.64/27
down ip route del default table 101 via 192.168.1.65

Albo skończysz po komendzie ifdown - ifup z komunikatem o błędzie @ifdown (standardowy komunikat informujący, że urządzenia peryferyjne nie są poprawnie skonfigurowane), a @ifup brak trasy w tabeli 101.

Craig Constantine
źródło
Fajnie, ale nie lubię używać rc.local .. szukając bardziej eleganckiego końcowego kroku ..
drAlberT
Wydaje mi się, że był edytowany :) ..
drAlberT
Czy faktycznie istnieje plik / etc / interfaces, czy jest to literówka?
user100464
@ user100464/etc/network/interfaces
Zenexer
W odpowiedzi znajduje się odwołanie do pierwszego. Nie mogę tego edytować.
user100464