Utwórz sieć pętli Ethernet - jak skonfigurować trasy

2

Mam sieć, która musi być skonfigurowana jako pętla. Składa się z 3 węzłów, z których każdy ma dwa interfejsy. Poniższy schemat to wyjaśnia.

+--->(eth0) Node 1 (eth1)--->(eth0) Node 2 (eth1)--->(eth0) Node 3 (eth1)--->+
|    10.0.3.1     10.0.1.1  10.0.1.2     10.0.2.2  10.0.2.3      10.0.3.3    |
+--<----------------------------<--------------------------------------------+

Chcę wykonać polecenie ping z węzła 1 do węzła 3, więc żądanie przechodzi przez węzeł 2, a odpowiedź trafia bezpośrednio do węzła 1 z węzła 3.

node1$ ping 10.0.2.3

Skonfigurowałem węzły jako:

node1# route add -net 10.0.2.0/24 gw 10.0.1.2

node2# route add -net 10.0.3.0/24 gw 10.0.2.3

node3# route add -net 10.0.1.0/24 gw 10.0.3.1

Podczas uruchamiania polecenia ping z Węzła 1 dociera do Węzła 3. Jednak Węzeł 3 nie odpowiada, nie generuje nawet odpowiedzi (przynajmniej, że mogę przechwycić za pomocą wireshark).

Czy mógłbyś mi dać jakąś wskazówkę?

TA

jlanza
źródło

Odpowiedzi:

2

Kiedy węzeł wybiera źródłowy adres IP pakietu, z którego pochodzi, chyba że jest to ograniczone, zwykle wybiera adres IP „najbliższy” do następnego przeskoku na drodze do miejsca docelowego pakietu.

Z punktu widzenia Węzła 1 następny przeskok do Węzła 3 to 10.0.1.2. Adres IP węzła 1 najbliższy 10.0.1.2to 10.0.1.1nie 10.0.3.1. (Adres IP w tej samej podsieci, co miejsce docelowe, jest uważany za „bliższy” do miejsca docelowego niż adres IP spoza tej samej podsieci.)

Sprawdź źródłowy adres IP polecenia ping. Najprawdopodobniej 10.0.1.1nie 10.0.3.1. Jeśli Węzeł 3 nie ma trasy do 10.0.1.1, nie może odpowiedzieć.

David Schwartz
źródło
Udało mi się zrobić pętlę. Muszę dołączyć net.ipv4.conf.all.rp_filter = 0, aby uzyskać odpowiedź. Jednak gdy pakiet dotrze do węzła docelowego na drugim interfejsie, polecenie ping nie uważa pakietu za dobry, a zatem polecenie ping nie powiedzie się, ale pakiet się tam dostał. Miejsce docelowe i adres źródłowy odpowiedzi nie zgadzają się z adresami na żądanie. To chyba powód.
jlanza
To dziwne. Jeśli nie wykonujesz żadnej translacji NAT, adresy nie będą się zgadzać.
David Schwartz
pakiet otrzymany, jeśli sobie przypominam (nie w tej chwili przed systemem) ma te same adresy (przepraszam), problem polega na tym, że ponieważ pakiet jest odbierany przez inny interfejs, wydaje się, że go nie potwierdza. Muszę sprawdzić, czy czas mi na to pozwala.
jlanza
1

Węzły poprawnie się nie powtarzają, aby zapobiec niekontrolowanemu nadawaniu mostu. Polecam uruchomić protokół Spanning Tree Protocol. Umożliwi to wprowadzenie w pełni funkcjonujących tras między wszystkimi węzłami. Nie mogę wymyślić innego sposobu, aby to zrobić, chyba że chcesz ograniczyć łączność między niektórymi łączami w warstwie 2 lub 3.

OCDtech
źródło
Ucieka, nie łączy. Jego węzły nigdy się nie powtarzają.
David Schwartz
Myślałem o użyciu mostka, ale jak mówi @David Schwatz, muszę mieć różne przepływy dla każdego interfejsu. Poza tym jednym z interfejsów jest interfejs wlan, więc nie mogę go włączyć do mostu.
jlanza
0

( /sbin/routejest przestarzałe, użyj ip routezamiast niego).

Jeśli chcesz, aby Twoje pakiety podróżowały tylko w jednym kierunku, oznacza to, że każdy węzeł musi używać następnego węzła jako bramy, niezależnie od miejsca docelowego.

node1# ip route add 10.0.0.0/22 via 10.0.1.2
node2# ip route add 10.0.0.0/22 via 10.0.2.3
node3# ip route add 10.0.0.0/22 via 10.0.3.1

Jednak w większości dystrybucji filtrowanie ścieżek zwrotnych jest często domyślnie włączone. Filtrowanie ścieżki zwrotnej jest filtrem dla przychodzącego pakietu, który próbuje sprawdzić, czy odpowiedź na ten pakiet trafiłaby do tego samego interfejsu, w którym pakiet został odebrany. Jest to dobra rzecz w zwykłej sieci, w której routing jest symetryczny, ale w twoim przypadku potrzebujesz routingu asymetrycznego, więc możesz po prostu wyłączyć filtrowanie ścieżek zwrotnych w interfejsie, w którym odbierasz pakiety, lub przynajmniej je zmniejszyć, aby po prostu sprawdził, czy źródłowy adres IP jest routowalny:

node1# sysctl -w net.ipv4.conf.eth0.rp_filter=2
node2# sysctl -w net.ipv4.conf.eth0.rp_filter=2
node3# sysctl -w net.ipv4.conf.eth0.rp_filter=2

Dokumentacja na temat filtrowania ścieżek zwrotnych i innych pokręteł jest dostępna w dokumentacji jądra, pod adresem Documentation/networking/ip-sysctl.txt. Gdzie znaleźć to zależy od twojej dystrybucji (lub po prostu przeglądaj sieć ip-sysctl.txt).

Szczęśliwego zapętlania!

BatchyX
źródło
jakie jest znaczenie net.ipv4.conf.eth0 = 2 ??? gdzie mogę znaleźć więcej informacji?
jlanza
@jlanza: Ups, te linie były błędne ( rp_filterbrakowało). Naprawiono to i zaktualizowano odpowiedź o wskaźniki dokumentacji.
BatchyX