Cisco, Linux i Vlans

9

Wydaje mi się, że mam pewne fundamentalne nieporozumienie dotyczące działania sieci VLAN w systemie Linux i mam nadzieję, że dobrzy ludzie tutaj mnie nauczą.

Obsada: jeden Cisco 3560, jeden VLAN i jeden moduł Linux [1].

Cisco  ---------------  Linux
    ge0/1           eth0

Cisco ma interfejs Vlan 37 o adresie IP 10.40.37.252/24. Chcę umieścić 10.40.37.1/24 na Linux-ie.

Gdy Cisco dekapsułkuje vlan 37, wszystko działa dobrze [2]:

# Cisco 
interface Vlan37
    ip address 10.40.37.252/24

interface GigabitEthernet 0/1
    switchport mode access
    switchport access vlan 37

# Linux
ip link set eth0 up
ip addr add 10.40.37.1/24 dev eth0

$ ping 10.40.37.252 && echo It works

Jednak gdy ustawię port na trunking i przypisuję vlan 37 po stronie Linuksa, przestaje on działać:

# Cisco
interface GigabitEthernet 0/1
    switchport trunk encapsulation dot1q
    switchport mode trunk
    ! [3] [4] [7]

# Linux
vconfig add eth0 37
ip link set eth0.37 up
ifconfig eth0 0.0.0.0 up # ensure no address
ip addr add 10.40.37.1/24 dev eth0.37

$ ping 10.40.37.252 || echo Why does this not work

Czego tu brakuje?

Edycja: Rozwiązania:

Pytanie Shane'a o tablicę adresów mac doprowadziło mnie do rozwiązania: użyj „ip addr”, aby ustawić różne unikalne adresy L2 (MAC) na każdym z pod-interfejsów VLAN, i to nagle działa.

Innym możliwym rozwiązaniem, którego nie próbowałem (ponieważ mój sprzęt jest za stary), jest użycie „ethtool” do wyłączenia odciążania sieci VLAN przez samą kartę sieciową i zmuszenie jądra do obsługi tagów.

Dziękuję Shane!

Edycja: Więcej informacji zgodnie z komentarzami:

Ogólnym celem jest, aby trzy vlany (publiczny, prywatny, OAM i p) kończyły się na trzech indywidualnych adresach IP w systemie Linux, z różnymi aplikacjami powiązanymi z lokalnymi adresami. W razie potrzeby mogę dalej rozwijać, ale staram się, aby opis problemu i dyskusja były proste, ponieważ zanim będę mógł uruchomić trzy sieci vlan, potrzebuję jednej z nich. :)

Antoine -> ifup kontra ifconfig nie ma znaczenia.

Pepoluan -> Zakładam, że tego właśnie szukałeś. Zauważ, że brak referencji sterowników phy jest pozornie normalny. [5]

$ lsmod | grep 802
    8021q   25545 1 cxgb3

Złota rączka ->

$ ifconfig eth0
    eth0  Link encap: Ethernet HWaddr 00:17:08:92:87:22
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    RX packets:0 [...]
    TX packets:31932 errors:0 dropped:0 overruns:0 carrier:0 

$ ifconfig eth0.37
    eth0.37 Link encap: Ethernet HWaddr 00:17:08:92:87:22
    UP BROADCAST RUNNING MULTICAST MUT:1500 Metric:1
    RX packets: 0 [...]
    TX packets:32024 errors:90 dropped:0 overruns:0 carrier:0

$ cat /proc/net/vlan/config
    VLAN Dev Name | VLAN ID
    Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
    eth0.37 | 37 | eth0

Chuck -> wireshark i / lub tcpdump nie pokazują tagów, ale najwyraźniej jest to normalne ograniczenie w Linuksie, ze względu na kolejność przetwarzania vlan i pcap w jądrze [6]. Ponadto nieoznaczony VLAN jest ustawiony na 1 [7].

[1] Próbowałem tego z CentOS 5.5 i Ubuntu 11.04 i oba mają ten sam problem.

[2] Uwaga: konfiguracje nie są metodą wycinania i wklejania, więc wszelkie literówki tutaj są po prostu moją złą pamięcią.

[3] Włączenie lub wyłączenie „nonegotiate” nie ma wpływu na problem.

[4] Vlan 37 jest pokazany jako aktywny i nie przycięty na łączu, więc „dozwolone” nie stanowi problemu.

[5] serverfault: Włączanie 8021q na nic

[6] http://wiki.wireshark.org/CaptureSetup/VLAN#Linux

[7] Natywna (nieoznaczona) sieć VLAN to 1. Ręczne ustawienie jej za pomocą „switchport trunk native vlan 1” nie ma wpływu.

Darren H.
źródło
Czy próbowałeś ifup eth0 zamiast ifconfig eth0 0.0.0.0 w górę?
Antoine Benkemoun
Czy możesz opublikować dane wyjściowe w lsmodpolu Linux?
pepoluan
2
Jak wygląda ifconfig eth0.37i / lub ifconfig -ajak wygląda?
Złota rączka 5
Proszę również pisać /proc/net/vlan/config?
Złota rączka 5
1
sho mac address-table vlan 37?
Shane Madden,

Odpowiedzi:

2

Czy chcesz, aby host miał dostęp tylko do vlan 37, czy chcesz, aby host miał dostęp do wielu sieci vlan?

Ta konfiguracja IOS oznacza ustawienie natywnego (nieoznaczonego) vlan na 37.

interface GigabitEthernet 0/1
    switchport mode access
    switchport access vlan 37

Po stronie linux polecenie vconfig tworzy alias interfejsu dla ruchu oznaczonego jako vlan 37.

vconfig add eth0 37

Czy widzisz problem? Przełącznik wysyła do hosta nieoznaczony ruch, a host szuka / generuje otagowany ruch.

Musisz po prostu użyć eth0 w natywnym vlan 37 lub zmienić conf switch, aby przekazywał otagowany ruch, np.

interface GigabitEthernet 0/1
    switchport trunk allowed vlan 37
    switchport mode trunk

Na dość starych urządzeniach IOS musisz ustawić hermetyzację ciężarówki na 8021q, ponieważ domyślnie ISL.

Joshua Hoblitt
źródło
Dostęp działał dobrze, trunking nie. Celem było posiadanie trzech lub więcej sieci VLAN, każda z własną podsiecią, kończących się na Linux-ie. Rozwiązaniem / obejściem było upewnienie się, że każda sieć VLAN po stronie Linux ma odrębny adres MAC.
Darren H
To zależy od tego, co rozumiesz przez „pracę”. Gdy urządzenie IOS ma port w trybie dostępu, oznacza to, że „wszystkie pakiety wprowadzone do tego portu będą oznaczone [wewnętrzne do przełącznika] jako vlan X”. Oznacza to, że kiedykolwiek usuwane są nagłówki 802.1q dodane z hosta Linux. Możesz to łatwo udowodnić, uruchamiając tcpdump na innym porcie, również ustawionym na tryb dostępu na vlan 37; powinieneś być w stanie zobaczyć ruch rozgłoszeniowy ze wszystkich trzech interfejsów „vlan” na Linux-ie.
Joshua Hoblitt,
Powinienem był wspomnieć o dwóch rzeczach. 1) Używam tagów vlan na centos 5 z przełącznikami Cisco i Blade Networks w moim środowisku wirtualizacji produkcyjnej. 2) switch port mode accessusunie również wszystkie tagi 802.1q na ruchu wychodzącym. Właśnie dlatego musiałeś bawić się w adresy MAC, żeby komunikacja w ogóle działała. Bez miejsc docelowych z różnymi adresami mac wszystkie kończyły się na natywnym interfejsie vlan, ponieważ pakiety przychodzą do hosta Linux bez tagów vlan .
Joshua Hoblitt
Dla jasności w systemie IOS „trunk” oznacza używanie tagów vlan 802.1q.
Joshua Hoblitt
0

Teraz nie jestem ekspertem od Linuksa, jeśli chodzi o moją wiedzę na temat przełączania, czy masz interfejs eth0 na komputerze z Linuksem skonfigurowany do trunkingu dot1q? Nie wiem, czy istnieje przepis na wiele sieci vlan do działania na maszynie z systemem Linux, ale zakładam, że masz jeden interfejs skonfigurowany do pracy jako część Vlan37, dzięki czemu karta sieciowa na komputerze z Linuksem ma być portem dostępu. Port dostępu nie może komunikować się bezpośrednio z portem trunk, nie będzie w stanie utworzyć ani zrozumieć enkapsulacji trunkingu.

Z tego, co rozumiem, chcesz, aby maszyna Linux działała w Vlan 37. Po prostu przywróć port ge0 / 1, aby był portem dostępu pod Vlan37 i rutynowo przypisuj maszynie linux dowolne IP w podsieci Vlan37. Naprawdę nie potrzebujesz trunkingu, który służy tylko do przesyłania wielu informacji Vlan za pomocą jednego łącza.

gokul varma nk
źródło
1
Część vconfig konfiguruje trunking dot1q :)
Antoine Benkemoun
Ostatecznym celem jest posiadanie wielu sieci VLAN kończących się w systemie Linux; Najpierw muszę uruchomić jeden;)
Darren H
Masz na myśli, że chcesz, aby twój komputer z systemem Linux był częścią wielu Vlanów lub że pozostanie w Vlan37 musi być dostępne z wielu innych Vlanów?
gokul varma nk
Pierwszy - maszyna z systemem Linux powinna mieć wiele nie nakładających się adresów IP, każdy we własnej sieci VLAN. Główny korpus został zredagowany, aby to wyjaśnić.
Darren H
0

Myślę, że problem dotyczy konfiguracji przełącznika. Po ustawieniu portu w tryb trunk za pomocą znaczników 802.1q należy skonfigurować przełącznik tak, aby wysyłał vlan 37 jako ruch oznaczony, a może być również konieczne skonfigurowanie portu do używania innego vlan dla ruchu nieoznaczonego. Kiedy to ustawiłem, musiałem również ustawić, które vlan są dozwolone / zabronione na tym porcie. Moje IOS jest trochę zardzewiałe, ale myślę, że tego właśnie szukasz.

Powinieneś także być w stanie potwierdzić konfigurację przełącznika za pomocą wireshark na eth0, ponieważ pokażą ci tagi VLAN na pakietach. Pakiety Cisco LLDP mogą również dać ci wskazówkę, co robi port ge0 / 1.

głaskanie pod brodę
źródło
Podczas pisania nie zauważyłem punktów 3 i 4. Nadal spróbuję wireshark, ponieważ pozwoli ci to sprawdzić, czy ruch przeznaczony dla przełącznika jest wysyłany na vlan 37.
chuck
Wireshark na Linuksie często nie może wyświetlać tagów VLAN, i niestety tak jest w tym przypadku. Zobacz nowy przypis [6] w edytowanym pytaniu powyżej.
Darren H
Domyślne ustawienia zgodnie z konfiguracją pytającego będą miały vlan 1 jako natywny vlan, a wszystkie inne jako oznaczone vlany.
MikeyB,