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 / oderifconfig -a
wie?/proc/net/vlan/config
?sho mac address-table vlan 37
?Antworten:
Möchten Sie, dass der Host nur auf vlan 37 Zugriff hat, oder möchten Sie, dass der Host Zugriff auf mehrere vlans hat?
Diese IOS-Konfiguration bedeutet, dass das native (nicht getaggte) VLAN auf 37 gesetzt wird.
Auf der Linux - Seite erzeugt der Befehl ein EIN - Schnittstelle vconfig Alias für Verkehr markiert als VLAN 37.
Sehen Sie das Problem? Der Switch sendet Ihrem Host Datenverkehr ohne Tags und der Host sucht / generiert Datenverkehr mit Tags.
Sie müssen entweder nur eth0 im nativen vlan 37 verwenden oder den Switch conf so ändern, dass er markierten Datenverkehr weiterleitet, z.
Auf ziemlich alten IOS-Geräten muss die LKW-Kapselung auf 8021q eingestellt werden, da standardmäßig ISL verwendet wird.
quelle
switch port mode access
auch alle 802.1q-Tags im Ausgangsverkehr. Aus diesem Grund mussten Sie mit den Mac-Adressen herumspielen, um die Kommunikation überhaupt zum Laufen zu bringen. Ohne die Ziele mit unterschiedlichen Mac-Adressen landeten sie alle auf der nativen VLAN-Schnittstelle, da die Pakete ohne VLAN-Tags auf den Linux-Host gelangen .Jetzt bin ich kein Experte auf der Linux-Seite. Haben Sie nach meinem Switching-Wissen die eth0-Schnittstelle auf dem Linux-Computer für dot1q-Trunking konfiguriert? Ich weiß nicht, ob mehrere vlans auf einem Linux-Computer ausgeführt werden können, aber ich gehe davon aus, dass Sie über eine einzige Schnittstelle verfügen, die so konfiguriert ist, dass sie als Teil von Vlan37 funktioniert, sodass die Netzwerkkarte Ihres Linux-Computers im Wesentlichen ein Zugriffsport ist. Ein Access-Port kann nicht direkt mit einem Trunk-Port kommunizieren. Er kann die Trunking-Kapselung nicht erstellen oder verstehen.
Soweit ich weiß, soll der Linux-Computer in Vlan 37 funktionieren. Setzen Sie den ge0 / 1-Port einfach als Zugriffsport unter Vlan37 zurück und weisen Sie dem Linux-Computer routinemäßig eine beliebige IP-Adresse unter dem Subnetz von Vlan37 zu. Sie brauchen wirklich kein Trunking, das nur verwendet wird, um mehrere Vlan-Informationen über eine einzige Verbindung zu übertragen.
quelle
Ich denke, das Problem liegt in Ihrer Switch-Konfiguration. Nachdem Sie den Port mit 802.1q-Tags in den Trunk-Modus versetzt haben, müssen Sie den Switch so konfigurieren, dass vlan 37 als getaggerter Verkehr gesendet wird, und Sie müssen den Port möglicherweise so einstellen, dass ein anderer vlan für nicht getaggten Verkehr verwendet wird. Als ich dies einrichtete, musste ich auch festlegen, welche VLANs an diesem Port zugelassen / verweigert wurden. Mein IOS ist etwas verrostet, aber ich denke, das ist es, wonach Sie suchen.
Sie sollten auch in der Lage sein, Ihre Switch-Konfiguration mit wireshark auf eth0 zu bestätigen, da Ihnen die VLAN-Tags in den Paketen angezeigt werden. Die Cisco LLDP-Pakete geben Ihnen möglicherweise auch einen Hinweis darauf, was Port ge0 / 1 tut.
quelle