Cisco und Linux und Vlans


9

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.


Haben Sie ifup eth0 anstelle von ifconfig eth0 0.0.0.0 up versucht?
Antoine Benkemoun

Können Sie die Ausgabe von lsmodauf der Linux-Box veröffentlichen?
Pepoluan

2
Wie ifconfig eth0.37und / oder ifconfig -awie?
Handyman5

Auch bitte posten /proc/net/vlan/config?
Handyman5

1
sho mac address-table vlan 37?
Shane Madden

Antworten:


2

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.

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

Auf der Linux - Seite erzeugt der Befehl ein EIN - Schnittstelle vconfig Alias für Verkehr markiert als VLAN 37.

vconfig add eth0 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.

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

Auf ziemlich alten IOS-Geräten muss die LKW-Kapselung auf 8021q eingestellt werden, da standardmäßig ISL verwendet wird.


Der Zugang funktionierte einwandfrei, Trunking nicht. Ziel war es, drei oder mehr VLANs mit jeweils eigenem Subnetz auf der Linux-Box zu beenden. Die Lösung / Problemumgehung bestand darin, sicherzustellen, dass jedes VLAN auf der Linux-Seite eine eigene MAC-Adresse hatte.
Darren H

Nun, das hängt davon ab, was Sie unter "Arbeit" verstehen. Wenn ein IOS-Gerät einen Port im Zugriffsmodus hat, bedeutet dies, dass "alle in diesen Port eingegebenen Pakete [vell des Switches] als vlan X gekennzeichnet werden". Das bedeutet, dass alle 802.1q-Header, die Sie vom Linux-Host hinzugefügt haben, entfernt werden. Sie können dies leicht beweisen, indem Sie tcpdump auf einem anderen Port ausführen, der auch auf den Zugriffsmodus auf vlan 37 eingestellt ist. Sie sollten in der Lage sein, Broadcast-Verkehr von allen drei Ihrer "vlan" -Schnittstellen auf der Linux-Box zu sehen.
Joshua Hoblitt

Ich hätte zwei Dinge erwähnen sollen. 1) Ich verwende VLAN-Tags auf Centos 5 mit Cisco & Blade Networks-Switches in meiner Produktionsvirtualisierungsumgebung. 2) entfernt switch port mode accessauch 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 .
Joshua Hoblitt

Aus Gründen der Klarheit bedeutet "Trunk" unter IOS die Verwendung von 802.1q-VLAN-Tags.
Joshua Hoblitt

0

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.


1
Der vconfig Teil konfiguriert das dot1q Trunking :)
Antoine Benkemoun

Das Endziel besteht darin, dass mehrere VLANs auf dem Linux-System beendet werden. Ich muss erst einen zum Laufen bringen;)
Darren H

Sie möchten, dass Ihr Linux-Computer Teil mehrerer Vlans ist oder dass der Aufenthalt in Vlan37 von mehreren anderen Vlans aus zugänglich sein muss?
Gokul Varma Nk 18.

Ersteres - Der Linux-Computer sollte mehrere nicht überlappende IP-Adressen haben, jede in ihrem eigenen VLAN. Hauptteil bearbeitet, um dies zu verdeutlichen.
Darren H

0

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.


Ich habe die Punkte 3 und 4 beim Posten nicht bemerkt. Ich würde immer noch Wireshark ausprobieren, da Sie so überprüfen können, ob der für den Switch bestimmte Datenverkehr auf VLAN 37 gesendet wird.
Chuck

Wireshark unter Linux kann die VLAN-Tags oft nicht anzeigen, und dies ist hier leider der Fall. Siehe neue Fußnote [6] in der bearbeiteten Frage oben.
Darren H

Die Standardeinstellungen gemäß dem Setup des Fragestellers haben vlan 1 als natives vlan und alle anderen als getaggte vlans.
MikeyB
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.