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.
lsmod
polu Linux?
ifconfig eth0.37
i / lub ifconfig -a
jak wygląda?
/proc/net/vlan/config
?
sho mac address-table vlan 37
?