Parece que tengo algunos malentendidos fundamentales sobre cómo funcionan las VLAN en Linux, y espero que las buenas personas aquí puedan educarme.
Reparto: un Cisco 3560, una VLAN y una caja de Linux [1].
Cisco --------------- Linux
ge0/1 eth0
Cisco tiene una interfaz Vlan 37, con dirección IP 10.40.37.252/24. Quiero colocar 10.40.37.1/24 en el cuadro de Linux.
Cuando Cisco desencapsula vlan 37, todo funciona 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
Sin embargo, cuando configuro el puerto para trunking y asigno vlan 37 en el lado de Linux, deja 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
¿Que me estoy perdiendo aqui?
Editar: Soluciones:
La pregunta de Shane sobre la tabla de direcciones mac me llevó a una solución: usar "ip addr" para configurar diferentes direcciones L2 (MAC) únicas en cada una de las subinterfaces VLAN, y de repente funciona.
Otra posible solución que no probé (porque mi hardware es demasiado antiguo) es usar "ethtool" para deshabilitar la descarga de VLAN por la NIC y obligar al kernel a manejar las etiquetas.
Gracias Shane!
Editar: Más información según los comentarios:
El objetivo general es tener tres vlans (público, privado, oam & p) que terminen en tres direcciones IP individuales en el cuadro de Linux, con diferentes aplicaciones vinculadas a las direcciones locales. Puedo ampliar aún más si es necesario, pero estoy tratando de mantener la descripción y discusión del problema simple, ya que antes de que pueda tener tres vlans funcionando, necesito uno para que funcione. :)
Antoine -> ifup versus ifconfig no hace ninguna diferencia.
Pepoluan -> Supongo que esto es lo que estabas buscando. Tenga en cuenta que la falta de referencias de los controladores phy es aparentemente normal. [5]
$ lsmod | grep 802
8021q 25545 1 cxgb3
Manitas ->
$ 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 y / o tcpdump no muestran las etiquetas, pero esto aparentemente es una limitación normal en Linux, debido al orden de procesamiento del manejo de vlan y pcap en el kernel [6]. Además, la VLAN sin etiquetar se establece en 1 [7].
[1] He intentado esto con CentOS 5.5 y Ubuntu 11.04, y ambos tienen el mismo problema.
[2] Tenga en cuenta que las configuraciones no son cortar y pegar, por lo que cualquier error tipográfico aquí es simplemente mi mala memoria.
[3] "no negociar" activado o desactivado no tiene ningún efecto sobre el problema.
[4] Vlan 37 se muestra como activo y no podado en el enlace, por lo que "permitido" no es el problema.
[5] serverfault: Habilitando 8021q en un nic
[6] http://wiki.wireshark.org/CaptureSetup/VLAN#Linux
[7] La VLAN nativa (sin etiquetar) es 1. La configuración manual con "switchport trunk native vlan 1" no tiene ningún efecto.
lsmod
en el cuadro de Linux?
ifconfig eth0.37
y ifconfig -a
cómo se ve?
/proc/net/vlan/config
?
sho mac address-table vlan 37
?