Здається, у мене є деякі принципові нерозуміння того, як 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 самим NIC і змушення ядра мати справу з тегами.
Дякую, Шейн!
Редагувати: Детальніше за коментарями:
Загальна мета полягає в тому, щоб три власних (загальнодоступних, приватних, oam & p) закінчували три окремі IP-адреси у вікні linux з різними додатками, що прив'язуються до локальних адрес. Я можу розширитись далі, якщо потрібно, але я намагаюся просто описати проблему та обговорити цю проблему, оскільки перш ніж я можу працювати з трьома вланами, мені потрібен один, щоб працювати. :)
Antoine -> ifup vs 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] сервер за замовчуванням: увімкнення 8021q на нік
[6] http://wiki.wireshark.org/CaptureSetup/VLAN#Linux
[7] Власна (без тегів) VLAN - це 1. Вручну встановити її за допомогою "магістральної трансляції нативного vlan 1" не має ефекту.
lsmod
вікні Linux?
ifconfig eth0.37
та / або ifconfig -a
виглядають?
/proc/net/vlan/config
?
sho mac address-table vlan 37
?