Cisco e Linux e Vlans

9

Parece que tenho algum mal-entendido sobre como as VLANs funcionam no Linux, e espero que as pessoas boas daqui possam me ensinar.

Transmissão: uma caixa Cisco 3560, uma VLAN e uma Linux [1].

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

A Cisco tem uma interface Vlan 37, com endereço IP 10.40.37.252/24. Eu quero colocar 10.40.37.1/24 na caixa Linux.

Quando a Cisco faz o encapsulamento da vlan 37, tudo funciona bem [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

No entanto, quando eu definir a porta para o entroncamento e atribuir vlan 37 no lado do Linux, ele pára de funcionar:

# 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

O que estou perdendo aqui?

Editar: soluções:

A pergunta de Shane sobre a tabela de endereços mac levou-me a uma solução: use "ip addr" para definir diferentes endereços únicos de L2 (MAC) em cada uma das subinterfaces de VLAN, e de repente funciona.

Outra solução possível que eu não tentei (porque meu hardware é muito antigo) está usando o "ethtool" para desabilitar o descarregamento da VLAN pela própria NIC e forçando o kernel a lidar com as tags.

Obrigado Shane!

Editar: mais informações como por comentários:

O objetivo geral é ter três vlans (public, private, oam & p) encerrados em três endereços IP individuais na caixa linux, com diferentes aplicativos vinculados aos endereços locais. Eu posso expandir ainda mais, se necessário, mas estou tentando manter a descrição e a discussão do problema simples, já que antes que eu possa ter três vlans funcionando, eu meio que preciso que uma esteja funcionando. :)

Antoine - > ifup versus ifconfig não faz diferença.

Pepoluan - > Estou assumindo que isso é o que você estava procurando. Note que a falta de referências por drivers phy é aparentemente normal. [5]

$ lsmod | grep 802
    8021q   25545 1 cxgb3

Handyman - >

$ 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 - > O wireshark e / ou o tcpdump não mostram as tags, mas esta é aparentemente uma limitação normal no Linux, devido à ordem de processamento do manuseio vlan e pcap no kernel [6]. Além disso, a VLAN não marcada é definida como 1 [7].

[1] Eu tentei isso com o CentOS 5.5 e com o Ubuntu 11.04, e ambos têm o mesmo problema.

[2] Observe que as configurações não são um recorte e uma colagem, portanto, quaisquer erros de digitação aqui são simplesmente minha memória ruim.

[3] "não-negociação" ativado ou desativado não afeta o problema.

[4] Vlan 37 é mostrado como ativo & não podada no link, então "permitido" não é o problema.

[5] serverfault: Habilitando o 8021q em um nic

[6] link

[7] A VLAN nativa (não marcada) é 1. A configuração manual com "switchport trunk native vlan 1" não tem efeito.

    
por Darren H 18.08.2011 / 10:09

3 respostas

2

Você quer que o host tenha acesso apenas à vlan 37 ou deseja que o host tenha acesso a várias vlans?

Esta configuração do IOS significa definir o vlan nativo (que não está marcado) para 37.

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

No lado do linux, o comando vconfig cria um alias de interface para o tráfego marcado como vlan 37.

vconfig add eth0 37

Você vê o problema? O switch está enviando o tráfego sem identificação do host e o host está procurando / gerando tráfego marcado.

Você precisa apenas usar eth0 na vlan nativa 37 ou alterar o conf do switch para passar o tráfego marcado, por exemplo.

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

Em dispositivos IOS razoavelmente antigos, você precisa configurar o encapsulamento do caminhão para 8021q, já que eles serão padronizados para ISL.

    
por 21.08.2011 / 02:29
0

Agora eu não sou um especialista com o lado Linux disso, indo pelo meu conhecimento de Switching, você tem a interface eth0 na máquina Linux configurada para o truncamento dot1q? Eu não sei se há uma provisão para várias vlans para operar dentro de uma máquina Linux, mas eu suponho que você tenha uma única interface que é configurada para funcionar como parte do Vlan37, essencialmente tornando a NIC da sua máquina Linux uma porta de acesso. Uma porta de acesso não pode se comunicar diretamente com uma porta de tronco, ela não será capaz de criar ou entender o encapsulamento de entroncamento.

Pelo que entendi, você quer que a máquina Linux funcione dentro do Vlan 37. Apenas reverta a porta ge0 / 1 para ser uma porta de acesso sob Vlan37 e atribua rotineiramente à máquina Linux qualquer IP sob a sub-rede do Vlan37. Você realmente não precisa de entroncamento, que é usado apenas para transmitir várias informações Vlan através de um único link.

    
por 18.08.2011 / 10:23
0

Acho que o problema está na configuração do seu switch. Depois de configurar a porta para o modo tronco com tags 802.1q, você precisa configurar o switch para enviar vlan 37 como tráfego marcado e também pode ser necessário configurar a porta para usar outra vlan para tráfego sem tag. Quando eu configurei isso eu também tive que definir qual vlan foram permitidos / negados nessa porta. Meu IOS está um pouco enferrujado, mas acho que é isso que você está procurando.

Você também deve ser capaz de confirmar a configuração do switch usando o wireshark on eth0, já que ele mostrará as tags de VLAN nos pacotes. Os pacotes Cisco LLDP também podem dar uma pista sobre o que a porta ge0 / 1 está fazendo.

    
por 18.08.2011 / 19:01