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 / ou ifconfig -a
ressemblent?
/proc/net/vlan/config
?
sho mac address-table vlan 37
?