Mi sembra di avere alcuni fraintendimenti fondamentali sul funzionamento delle VLAN su Linux e spero che le brave persone qui possano educarmi.
Trasmissione: un Cisco 3560, una VLAN e un box Linux [1].
Cisco --------------- Linux
ge0/1 eth0
Cisco ha un'interfaccia Vlan 37, con indirizzo IP 10.40.37.252/24. Voglio posizionare 10.40.37.1/24 sulla scatola di Linux.
Quando Cisco de-incapsula il vlan 37, tutto funziona bene [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
Tuttavia, quando imposto la porta su trunking e assegno vlan 37 sul lato Linux, smette di funzionare:
# 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
Cosa mi sto perdendo qui?
Modifica: Soluzioni:
La domanda di Shane sulla tabella degli indirizzi mac mi ha portato a una soluzione: utilizzare "ip addr" per impostare diversi indirizzi L2 (MAC) univoci su ciascuna delle interfacce secondarie VLAN e all'improvviso funziona.
Un'altra possibile soluzione che non ho provato (perché il mio hardware è troppo vecchio) sta usando "ethtool" per disabilitare l'offload della VLAN dalla stessa NIC e costringere il kernel a gestire i tag.
Grazie Shane!
Modifica: Altre informazioni come da commenti:
L'obiettivo generale è quello di avere tre Vlan (pubblici, privati, oam e p) che terminano su tre singoli indirizzi IP sulla scatola di Linux, con diverse applicazioni che si legano agli indirizzi locali. Posso espandere ulteriormente, se necessario, ma sto cercando di mantenere semplice la descrizione del problema e la discussione, dal momento che prima di poter far funzionare tre Vlan, ho bisogno di uno per funzionare. :)
Antoine -> ifup contro ifconfig non fa differenza.
Pepoluan -> Suppongo che sia quello che stavi cercando. Si noti che la mancanza di riferimenti da parte dei driver phy è apparentemente normale. [5]
$ lsmod | grep 802
8021q 25545 1 cxgb3
Tuttofare ->
$ 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 e / o tcpdump non mostrano i tag, ma questa è apparentemente una normale limitazione su Linux, a causa dell'ordine di elaborazione della gestione vlan e del pcap nel kernel [6]. Inoltre, la VLAN senza tag è impostata su 1 [7].
[1] Ho provato questo con CentOS 5.5 e Ubuntu 11.04 ed entrambi hanno lo stesso problema.
[2] Nota che le configurazioni non sono taglia e incolla, quindi qualsiasi refuso qui è semplicemente il mio brutto ricordo.
[3] L'attivazione o la disattivazione di "non negoziazione" non ha alcun effetto sul problema.
[4] Vlan 37 viene mostrato come attivo e non potato sul collegamento, quindi "consentito" non è il problema.
[5] serverfault: abilitazione di 8021q su un nic
[6] http://wiki.wireshark.org/CaptureSetup/VLAN#Linux
[7] La VLAN nativa (senza tag) è 1. L'impostazione manuale con "switchport trunk native vlan 1" non ha alcun effetto.
lsmod
sulla scatola di Linux?
ifconfig eth0.37
e / o ifconfig -a
?
/proc/net/vlan/config
?
sho mac address-table vlan 37
?