Cisco et Linux et Vlans

9

Il me semble que j'ai une incompréhension fondamentale du fonctionnement des VLAN sous Linux, et j'espère que les bonnes personnes ici pourront m'éduquer.

Distribution: un Cisco 3560, un VLAN et un boîtier Linux [1].

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

Le Cisco a une interface Vlan 37, avec l'adresse IP 10.40.37.252/24. Je veux placer 10.40.37.1/24 sur la boîte Linux.

Lorsque Cisco désencapsule le vlan 37, tout fonctionne bien [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

Cependant, lorsque je configure le port sur jonction et attribue vlan 37 du côté Linux, il cesse de fonctionner:

# 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

Qu'est-ce que j'oublie ici?

Edit: Solutions:

La question de Shane sur la table d'adresses mac m'a conduit à une solution: Utilisez "ip addr" pour définir différentes adresses L2 (MAC) uniques sur chacune des sous-interfaces VLAN, et cela fonctionne soudainement.

Une autre solution possible que je n'ai pas essayée (parce que mon matériel est trop ancien) est d'utiliser "ethtool" pour désactiver le déchargement de VLAN par la carte réseau elle-même, et de forcer le noyau à gérer les balises.

Merci Shane!

Modifier: Plus d'informations selon les commentaires:

L'objectif global est d'avoir trois vlans (public, privé, oam & p) se terminant sur trois adresses IP individuelles sur la box linux, avec différentes applications se liant aux adresses locales. Je peux développer davantage si nécessaire, mais j'essaie de garder la description du problème et la discussion simples, car avant de pouvoir faire fonctionner trois réseaux locaux virtuels, j'en ai besoin d'un pour fonctionner. :)

Antoine -> ifup versus ifconfig ne fait aucune différence.

Pepoluan -> Je suppose que c'est ce que vous cherchiez. Notez que le manque de références par les pilotes phy est apparemment normal. [5]

$ lsmod | grep 802
    8021q   25545 1 cxgb3

Homme à tout faire ->

$ 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 et / ou tcpdump ne montrent pas les balises, mais il s'agit apparemment d'une limitation normale sous Linux, en raison de l'ordre de traitement de la gestion des VLAN et du PCAP dans le noyau [6]. En outre, le VLAN non balisé est défini sur 1 [7].

[1] J'ai essayé ceci avec CentOS 5.5 et Ubuntu 11.04, et les deux ont le même problème.

[2] Notez que les configurations ne sont pas un copier-coller, donc toutes les fautes de frappe ici sont simplement ma mauvaise mémoire.

[3] "nonegotiate" activé ou désactivé n'a aucun effet sur le problème.

[4] Vlan 37 est affiché comme actif et non élagué sur le lien, donc "autorisé" n'est pas le problème.

[5] défaut de serveur: activation de 8021q sur un nic

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

[7] Le VLAN natif (non balisé) est 1. Le définir manuellement avec "switchport trunk native vlan 1" n'a aucun effet.

Darren H
la source
Avez-vous essayé ifup eth0 au lieu de ifconfig eth0 0.0.0.0 up?
Antoine Benkemoun
Pouvez-vous publier la sortie de lsmodsur la boîte Linux?
pepoluan
2
À quoi ressemblent ifconfig eth0.37et / ou ifconfig -aressemblent?
Homme à tout
Veuillez également poster /proc/net/vlan/config?
Homme à tout
1
sho mac address-table vlan 37?
Shane Madden

Réponses:

2

Voulez-vous que l'hôte ait accès uniquement au VLAN 37 ou voulez-vous que l'hôte ait accès à plusieurs VLAN?

Cette configuration IOS signifie que le vlan natif (qui n'est pas balisé) à 37.

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

Côté linux, la commande vconfig crée un alias d'interface pour le trafic étiqueté comme vlan 37.

vconfig add eth0 37

Voyez-vous le problème? Le commutateur envoie à votre hôte du trafic non balisé et l'hôte recherche / génère du trafic balisé.

Vous devez simplement utiliser eth0 dans le vlan 37 natif ou modifier la configuration du commutateur pour qu'il passe le trafic balisé, par exemple.

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

Sur les appareils IOS assez anciens, vous devez définir l'encapsulation du camion sur 8021q car ils seront par défaut ISL.

Joshua Hoblitt
la source
L'accès a bien fonctionné, la jonction non. L'objectif était d'avoir trois VLAN ou plus, chacun avec son propre sous-réseau, se terminant sur la boîte Linux. La solution / solution de contournement consistait à s'assurer que chaque VLAN côté Linux avait une adresse MAC distincte.
Darren H
Eh bien, cela dépend de ce que vous entendez par «travail». Quand un périphérique IOS a un port en mode d'accès, cela signifie que "tous les paquets entrés dans ce port seront étiquetés [internes au commutateur] comme vlan X". Cela signifie que les en-têtes 802.1q que vous avez ajoutés à partir de l'hôte Linux sont supprimés. Vous pouvez facilement le prouver en exécutant tcpdump sur un port différent également configuré en mode d'accès sur vlan 37; vous devriez pouvoir voir le trafic diffusé à partir de vos trois interfaces "vlan" sur la boîte Linux.
Joshua Hoblitt
J'aurais dû mentionner deux choses. 1) Que j'utilise des balises vlan sur centos 5 avec des commutateurs Cisco & Blade Networks dans mon environnement de virtualisation de production. 2) switch port mode accesssupprimera également toutes les balises 802.1q sur le trafic de sortie. C'est pourquoi vous avez dû recourir à la manipulation des adresses mac pour que la communication fonctionne. Sans les destinations ayant des adresses mac différentes, elles se retrouvaient toutes sur l'interface vlan native car les paquets arrivent sur l'hôte Linux sans balises vlan .
Joshua Hoblitt
Pour plus de clarté, sur IOS "tronc" signifie utiliser des balises vlan 802.1q.
Joshua Hoblitt
0

Maintenant, je ne suis pas un expert du côté Linux, en passant par ma connaissance de la commutation, avez-vous l'interface eth0 sur la machine Linux configurée pour la jonction dot1q? Je ne sais pas s'il existe une disposition pour que plusieurs réseaux locaux virtuels fonctionnent sur une machine Linux, mais je suppose que vous avez une seule interface qui est configurée pour fonctionner dans le cadre de Vlan37, faisant donc essentiellement de la carte réseau de votre machine Linux un port d'accès. Un port d'accès ne peut pas communiquer directement avec un port de jonction, il ne pourra pas créer ou comprendre l'encapsulation de jonction.

D'après ce que je comprends, vous voulez que la machine Linux fonctionne dans Vlan 37. Rétablissez simplement le port ge0 / 1 pour être un port d'accès sous Vlan37 et attribuez régulièrement à la machine linux n'importe quelle IP sous le sous-réseau de Vlan37. Vous n'avez vraiment pas besoin de jonction qui n'est utilisée que pour transmettre plusieurs informations Vlan sur un seul lien.

gokul varma nk
la source
1
La partie vconfig configure la jonction dot1q :)
Antoine Benkemoun
L'objectif final est d'avoir plusieurs VLAN se terminant sur le système Linux; Je dois d'abord en faire travailler un;)
Darren H
Vous voulez dire que vous voulez que votre machine Linux fasse partie de plusieurs Vlans ou que rester dans Vlan37 doit être accessible à partir de plusieurs autres Vlans?
gokul varma nk
Le premier - La machine Linux doit avoir plusieurs adresses IP qui ne se chevauchent pas, chacune dans son propre VLAN. Le corps principal a été édité pour clarifier cela.
Darren H
0

Je pense que le problème est avec votre configuration de commutateur. Après avoir défini le port en mode jonction avec des balises 802.1q, vous devez configurer le commutateur pour envoyer vlan 37 en tant que trafic balisé et vous devrez peut-être également définir le port pour utiliser un autre vlan pour le trafic non balisé. Lorsque j'ai configuré cela, j'ai également dû définir quels vlan étaient autorisés / refusés sur ce port. Mon IOS est un peu rouillé mais je pense que c'est ce que vous recherchez.

Vous devriez également être en mesure de confirmer votre configuration de commutateur à l'aide de Wireshark sur eth0 car il vous montrera les balises VLAN sur les paquets. Les paquets Cisco LLDP peuvent également vous donner une idée de ce que fait le port ge0 / 1.

mandrin
la source
Je n'ai pas remarqué les points 3 et 4 lors de la publication. J'essaierais toujours Wireshark car cela vous permettrait de vérifier que le trafic destiné au commutateur est envoyé sur le VLAN 37.
Chuck
Wireshark sur linux ne peut souvent pas afficher les balises VLAN, et malheureusement, c'est le cas ici. Voir la nouvelle note de bas de page [6] dans la question modifiée ci-dessus.
Darren H
Les valeurs par défaut selon la configuration du demandeur auront vlan 1 comme vlan natif et tous les autres comme vlans balisés.
MikeyB