Похоже, у меня есть фундаментальное недопонимание того, как 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
?Ответы:
Вы хотите, чтобы хост имел доступ только к vlan 37 или вы хотите, чтобы хост имел доступ к нескольким vlan?
Эта конфигурация IOS означает, что для нативного (без тегов) vlan установлено значение 37.
На стороне Linux команда vconfig создает псевдоним интерфейса для трафика, помеченного как vlan 37.
Ты видишь проблему? Коммутатор отправляет трафик вашего хоста без тегов, а хост ищет / генерирует тегированный трафик.
Вам нужно просто использовать eth0 в нативном vlan 37 или изменить переключатель коммутатора так, чтобы он пропускал тегированный трафик, например.
На довольно старых устройствах IOS вам нужно установить инкапсуляцию грузовика на 8021q, так как они по умолчанию будут ISL.
источник
switch port mode access
также удалит все теги 802.1q на исходящем трафике. Вот почему вам пришлось прибегнуть к манипуляциям с MAC-адресами, чтобы наладить общение. Без адресатов, имеющих разные mac-адреса, все они оказались на собственном интерфейсе vlan, поскольку пакеты поступают на хост Linux без тегов vlan .Теперь я не являюсь экспертом в области Linux, исходя из моих знаний по коммутации, есть ли у вас интерфейс eth0 на компьютере Linux, настроенный для транкинга dot1q? Я не знаю, есть ли условия для работы нескольких vlan-ов внутри Linux-машины, но я предполагаю, что у вас есть один интерфейс, настроенный для работы в составе Vlan37, таким образом, по сути, превращая сетевой адаптер вашей Linux-машины в порт доступа. Порт доступа не может напрямую связываться с магистральным портом, он не сможет создать или понять транкинговую инкапсуляцию.
Из того, что я понимаю, вы хотите, чтобы машина Linux работала в Vlan 37. Просто измените порт ge0 / 1 на порт доступа в Vlan37 и обычно назначайте машине Linux любой IP-адрес в подсети Vlan37. Вам действительно не нужен транкинг, который используется только для передачи нескольких данных Vlan по одной ссылке.
источник
Я думаю, что проблема с вашим конфигом. После установки порта в режим транка с тегами 802.1q вам необходимо настроить коммутатор для отправки vlan 37 в качестве тегированного трафика, а также, возможно, потребуется настроить порт на использование другого vlan для трафика без тегов. Когда я настроил это, мне также пришлось установить, какие vlan были разрешены / запрещены на этом порту. Мой IOS немного ржавый, но я думаю, что это то, что вы ищете.
Вы также должны быть в состоянии подтвердить свою конфигурацию коммутатора, используя wireshark на eth0, поскольку он покажет вам теги VLAN на пакетах. Пакеты Cisco LLDP также могут дать вам представление о том, что делает порт ge0 / 1.
источник