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.
lsmod
sur la boîte Linux?ifconfig eth0.37
et / ouifconfig -a
ressemblent?/proc/net/vlan/config
?sho mac address-table vlan 37
?Réponses:
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.
Côté linux, la commande vconfig crée un alias d'interface pour le trafic étiqueté comme vlan 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.
Sur les appareils IOS assez anciens, vous devez définir l'encapsulation du camion sur 8021q car ils seront par défaut ISL.
la source
switch port mode access
supprimera é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 .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.
la source
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.
la source