Parece que tenho um mal-entendido fundamental sobre como as VLANs funcionam no Linux, e espero que as pessoas boas aqui possam me educar.
Elenco: Um Cisco 3560, uma VLAN e uma caixa Linux [1].
Cisco --------------- Linux
ge0/1 eth0
O Cisco possui uma interface Vlan 37, com endereço IP 10.40.37.252/24. Quero colocar 10.40.37.1/24 na caixa do Linux.
Quando o Cisco descapsula a 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 defino a porta como entroncamento e atribuo a vlan 37 no lado Linux, ela para 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?
Edit: Soluções:
A pergunta de Shane sobre a tabela de endereços MAC me levou a uma solução: Use "ip addr" para definir diferentes endereços L2 (MAC) únicos em cada uma das subinterfaces da VLAN, e de repente funciona.
Outra solução possível que eu não tentei (porque meu hardware é muito antigo) é usar "ethtool" para desativar o descarregamento de VLAN pela própria NIC e forçar o kernel a lidar com as tags.
Obrigado Shane!
Edit: Mais informações de acordo com os comentários:
O objetivo geral é ter três vlans (público, privado, oam & p) terminando em três endereços IP individuais na caixa linux, com aplicativos diferentes vinculados aos endereços locais. Posso expandir ainda mais, se necessário, mas estou tentando manter a descrição e a discussão do problema simples, pois antes que eu possa ter três vlans funcionando, eu meio que preciso de uma para estar funcionando. :)
Antoine -> ifup versus ifconfig não faz diferença.
Pepoluan -> Estou assumindo que é isso que você estava procurando. Observe que a falta de referências dos drivers phy é aparentemente normal. [5]
$ lsmod | grep 802
8021q 25545 1 cxgb3
Faz-tudo ->
$ 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 / ou tcpdump não mostram as tags, mas isso é aparentemente uma limitação normal no Linux, devido à ordem de processamento do manuseio da vlan e do 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 o Ubuntu 11.04, e ambos têm o mesmo problema.
[2] Observe que as configurações não são recortadas e coladas, portanto, quaisquer erros de digitação aqui são simplesmente minha memória ruim.
[3] "não negociado", ativado ou desativado, não afeta o problema.
[4] A Vlan 37 é mostrada como ativa e sem poda no link, portanto, "permitido" não é o problema.
[5] serverfault: Ativando 8021q em um nic
[6] http://wiki.wireshark.org/CaptureSetup/VLAN#Linux
[7] A VLAN nativa (sem etiqueta) é 1. A configuração manual com "switchport trunk native vlan 1" não tem efeito.
lsmod
na caixa do Linux?
ifconfig eth0.37
e / ou se ifconfig -a
parece?
/proc/net/vlan/config
?
sho mac address-table vlan 37
?