Cisco e Linux e Vlans


9

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.


Hai provato ifup eth0 invece di ifconfig eth0 0.0.0.0 in su?
Antoine Benkemoun il

Puoi pubblicare l'output di lsmodsulla scatola di Linux?
pepoluan,

2
Che aspetto hanno ifconfig eth0.37e / o ifconfig -a?
Tuttofare, 5

Per favore, pubblica anche tu /proc/net/vlan/config?
Tuttofare, 5

1
sho mac address-table vlan 37?
Shane Madden,

Risposte:


2

Vuoi che l'host abbia accesso a solo vlan 37 o desideri che l'host abbia accesso a più vlan?

Questa configurazione IOS significa impostare il vlan nativo (senza tag) su 37.

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

Sul lato Linux, il comando vconfig crea un alias di interfaccia per il traffico etichettato come vlan 37.

vconfig add eth0 37

capisci il problema? Lo switch invia il traffico senza tag dell'host e l'host sta cercando / generando traffico con tag.

O hai solo bisogno di usare eth0 nel vlan 37 nativo o cambiare lo switch conf in modo che passi traffico taggato, ad es.

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

Sui dispositivi IOS abbastanza vecchi, è necessario impostare l'incapsulamento del camion su 8021q, in quanto per impostazione predefinita sarà ISL.


L'accesso ha funzionato bene, il trunking no. L'obiettivo era di avere tre o più VLAN, ognuna con la propria sottorete, che terminasse sulla scatola di Linux. La soluzione / soluzione alternativa consisteva nel garantire che ogni VLAN sul lato Linux avesse un indirizzo MAC distinto.
Darren H,

Bene, dipende da cosa intendi per "lavoro". Quando un dispositivo IOS ha una porta in modalità di accesso significa che "tutti i pacchetti immessi in questa porta saranno etichettati [interni allo switch] come vlan X". Ciò significa che vengono rimosse tutte le intestazioni 802.1q che hai aggiunto dall'host Linux. Puoi dimostrarlo facilmente eseguendo tcpdump su porte diverse anche impostate su access mode su vlan 37; dovresti essere in grado di vedere il traffico di trasmissione da tutte e tre le tue interfacce "vlan" sulla scatola di linux.
Joshua Hoblitt,

Avrei dovuto menzionare due cose. 1) Uso i tag vlan su centos 5 con switch Cisco & Blade Networks nel mio ambiente di virtualizzazione della produzione. 2) switch port mode accessrimuoverà anche tutti i tag 802.1q sul traffico in uscita. Ecco perché hai dovuto ricorrere a armeggiare con gli indirizzi mac per far funzionare la comunicazione. Senza che le destinazioni avessero diversi indirizzi mac, stavano finendo tutte sull'interfaccia vlan nativa poiché i pacchetti arrivano all'host Linux senza tag vlan .
Joshua Hoblitt,

Solo per chiarezza, su IOS "trunk" significa utilizzare tag vlan 802.1q.
Joshua Hoblitt,

0

Ora non sono un esperto del lato Linux di questo, secondo la mia conoscenza di Switching, hai l'interfaccia eth0 sulla macchina Linux configurata per il trunking dot1q? Non so se ci sia una disposizione per far funzionare più vlan all'interno di una macchina Linux, ma presumo che tu abbia una singola interfaccia configurata per funzionare come parte di Vlan37, rendendo essenzialmente la scheda di rete della tua macchina Linux come una porta di accesso. Una porta di accesso non può comunicare direttamente con una porta trunk, non sarà in grado di creare o comprendere l'incapsulamento del trunking.

Da quello che ho capito, vuoi che la macchina Linux funzioni all'interno di Vlan 37. Ripristina semplicemente la porta ge0 / 1 in modo che sia una porta di accesso sotto Vlan37 e assegni sistematicamente alla macchina Linux qualsiasi IP sotto la sottorete di Vlan37. Non è davvero necessario il trunking che viene utilizzato solo per trasmettere più informazioni Vlan su un singolo collegamento.


1
La parte vconfig configura il trunking dot1q :)
Antoine Benkemoun,

L'obiettivo finale è avere più VLAN che terminano sul sistema Linux; Devo prima farlo funzionare;)
Darren H,

Vuoi dire che vuoi che la tua macchina Linux faccia parte di più Vlan o che rimanendo in Vlan37 debba essere accessibile da più altri Vlan?
gokul varma nk,

Il primo: la macchina Linux dovrebbe avere più indirizzi IP non sovrapposti, ognuno nella propria VLAN. Corpo principale modificato per chiarire questo.
Darren H,

0

Penso che il problema sia con il tuo switch config. Dopo aver impostato la porta in modalità trunk con tag 802.1q, è necessario configurare lo switch per inviare vlan 37 come traffico con tag e potrebbe essere necessario impostare la porta per utilizzare un altro vlan per traffico senza tag. Quando ho impostato questo, ho anche dovuto impostare quali vlan erano consentiti / negati su quella porta. Il mio IOS è un po 'arrugginito ma penso che questo sia quello che stai cercando.

Dovresti anche essere in grado di confermare la tua configurazione dello switch usando WireShark su eth0 poiché ti mostrerà i tag VLAN sui pacchetti. I pacchetti Cisco LLDP potrebbero anche darti un'idea di cosa sta facendo la porta ge0 / 1.


Non ho notato i punti 3 e 4 dei punti elenco durante la pubblicazione. Vorrei ancora provare WireShark poiché ti consentirebbe di verificare che il traffico destinato allo switch venga inviato su Vlan 37.
Chuck,

Wireshark su Linux spesso non può mostrare i tag VLAN e, sfortunatamente, questo è il caso qui. Vedi la nuova nota a piè di pagina [6] nella domanda modificata sopra.
Darren H,

I valori predefiniti secondo la configurazione di Asker avranno vlan 1 come vlan nativo e tutti gli altri come vlans taggati.
MikeyB,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.