Ich habe anscheinend ein grundlegendes Missverständnis darüber, wie VLANs unter Linux funktionieren, und ich hoffe, dass die guten Leute hier mich aufklären können.
Besetzung: Eine Cisco 3560-, eine VLAN- und eine Linux-Box [1].
Cisco --------------- Linux
ge0/1 eth0
Der Cisco verfügt über eine Vlan 37-Schnittstelle mit der IP-Adresse 10.40.37.252/24. Ich möchte 10.40.37.1/24 auf der Linux-Box platzieren.
Wenn Cisco VLAN 37 entkapselt, funktioniert alles einwandfrei [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
Wenn ich den Port jedoch auf Trunking setze und vlan 37 auf der Linux-Seite zuweise, funktioniert es nicht mehr:
# 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
Was fehlt mir hier?
Edit: Lösungen:
Die Frage von Shane nach der Mac-Adresstabelle führte mich zu einer Lösung: Verwenden Sie "ip addr", um verschiedene eindeutige L2 (MAC) -Adressen auf jeder der VLAN-Subschnittstellen festzulegen, und es funktioniert plötzlich.
Eine andere mögliche Lösung, die ich nicht ausprobiert habe (weil meine Hardware zu alt ist), ist die Verwendung von "ethtool", um das VLAN-Offloading durch die Netzwerkkarte selbst zu deaktivieren und den Kernel zu zwingen, mit den Tags umzugehen.
Danke Shane!
Bearbeiten: Weitere Informationen gemäß Kommentar:
Das übergeordnete Ziel besteht darin, dass drei vlans (öffentlich, privat, oam & p) auf drei einzelnen IP-Adressen auf der Linux-Box enden und unterschiedliche Anwendungen an die lokalen Adressen gebunden sind. Ich kann bei Bedarf weiter expandieren, aber ich versuche, die Problembeschreibung und Diskussion einfach zu halten, da ich, bevor drei Vlans arbeiten können, einen brauche, um zu arbeiten. :) :)
Antoine -> ifup versus ifconfig macht keinen Unterschied.
Pepoluan -> Ich gehe davon aus, dass Sie danach gesucht haben. Beachten Sie, dass das Fehlen von Referenzen durch Phy-Treiber offensichtlich normal ist. [5]
$ lsmod | grep 802
8021q 25545 1 cxgb3
Handwerker ->
$ 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 und / oder tcpdump zeigen die Tags nicht an, aber dies ist anscheinend eine normale Einschränkung unter Linux, aufgrund der Verarbeitungsreihenfolge von VLAN-Handling und PCAP im Kernel [6]. Außerdem ist das VLAN ohne Tags auf 1 gesetzt [7].
[1] Ich habe dies sowohl mit CentOS 5.5 als auch mit Ubuntu 11.04 versucht und beide haben das gleiche Problem.
[2] Beachten Sie, dass die Konfigurationen kein Ausschneiden und Einfügen sind, daher sind Tippfehler hier einfach mein schlechtes Gedächtnis.
[3] "Nicht verhandeln" ein oder aus hat keine Auswirkung auf das Problem.
[4] Vlan 37 wird auf dem Link als aktiv und nicht beschnitten angezeigt, daher ist "erlaubt" nicht das Problem.
[5] Serverfehler: Aktivieren von 8021q auf einem Netzwerk
[6] http://wiki.wireshark.org/CaptureSetup/VLAN#Linux
[7] Das native (nicht getaggte) VLAN ist 1. Das manuelle Festlegen mit "Switchport Trunk Native VLAN 1" hat keine Auswirkung.
lsmod
auf der Linux-Box veröffentlichen?
ifconfig eth0.37
und / oder ifconfig -a
wie?
/proc/net/vlan/config
?
sho mac address-table vlan 37
?