Похоже, у меня есть фундаментальное недопонимание того, как VLAN работают в Linux, и я надеюсь, что хорошие люди здесь могут научить меня.
В ролях: одна Cisco 3560, одна VLAN и одна коробка Linux [1].
Cisco --------------- Linux
ge0/1 eth0
Cisco имеет интерфейс Vlan 37 с IP-адресом 10.40.37.252/24. Я хочу разместить 10.40.37.1/24 на коробке с Linux.
Когда Cisco де-инкапсулирует vlan 37, все работает нормально [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
Однако, когда я устанавливаю порт на транкинг и назначаю vlan 37 на стороне Linux, он перестает работать:
# 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
Что мне здесь не хватает?
Изменить: Решения:
Вопрос Шейна о таблице MAC-адресов привел меня к решению: использовать «ip addr» для установки разных уникальных адресов L2 (MAC) на каждом из подинтерфейсов VLAN, и это неожиданно работает.
Другое возможное решение, которое я не пробовал (поскольку мое оборудование слишком старое), использует «ethtool» для отключения разгрузки VLAN самой сетевой платой и заставляет ядро работать с тегами.
Спасибо, Шейн!
Изменить: Больше информации в соответствии с комментариями:
Общая цель состоит в том, чтобы три vlan (public, private, oam & p) оканчивались на трех отдельных IP-адресах в linux box, а различные приложения связывались с локальными адресами. При необходимости я могу расширяться, но я стараюсь сделать описание проблемы и обсуждение простыми, поскольку, прежде чем я смогу работать с тремя виртуальными сетями, мне нужно, чтобы один из них работал. :)
Antoine -> ifup против ifconfig не имеет значения.
Pepoluan -> Я предполагаю, что это то, что вы искали. Обратите внимание, что отсутствие ссылок со стороны phy-драйверов является нормальным явлением. [5]
$ lsmod | grep 802
8021q 25545 1 cxgb3
Разнорабочий ->
$ 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 и / или tcpdump не показывают теги, но это, по-видимому, нормальное ограничение для Linux, из-за порядка обработки обработки vlan и pcap в ядре [6]. Кроме того, для VLAN без тегов установлено значение 1 [7].
[1] Я пытался это сделать как с CentOS 5.5, так и с Ubuntu 11.04, и у обоих одинаковая проблема.
[2] Обратите внимание, что конфиги - это не вырезка и вставка, поэтому любые опечатки здесь просто моя плохая память.
[3] «не вести переговоры» не влияет на проблему.
[4] Vlan 37 показан как активный и необрезанный по ссылке, поэтому «разрешено» не является проблемой.
[5] serverfault: Включение 8021q на ник
[6] http://wiki.wireshark.org/CaptureSetup/VLAN#Linux
[7] Собственная (без тега) VLAN равна 1. Установка вручную с помощью «switchport trunk native vlan 1» не имеет никакого эффекта.
lsmod
на Linux box?
ifconfig eth0.37
и / или ifconfig -a
похож?
/proc/net/vlan/config
?
sho mac address-table vlan 37
?