Cisco, Linux та Влани


9

Здається, у мене є деякі принципові нерозуміння того, як 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" не має ефекту.


Ви пробували ifup eth0 замість ifconfig eth0 0.0.0.0?
Антуан Бенкемун

Чи можете ви розмістити вихід у lsmodвікні Linux?
pepoluan

2
Як виглядають ifconfig eth0.37та / або ifconfig -aвиглядають?
Handyman5

Також, будь ласка, допишіть /proc/net/vlan/config?
Handyman5

1
sho mac address-table vlan 37?
Шейн Мадден

Відповіді:


2

Ви хочете, щоб хост мав доступ лише до vlan 37, чи хочете, щоб хост мав доступ до кількох вланів?

Ця конфігурація IOS означає встановити нативну (це без тегів) vlan на 37.

interface GigabitEthernet 0/1
    switchport mode access
    switchport access vlan 37

На стороні Linux команда vconfig створює псевдонім інтерфейсу для трафіку з тегом vlan 37.

vconfig add eth0 37

Ви бачите проблему? Комутатор надсилає вашому хосту немечений трафік, а хост шукає / генерує позначений трафік.

Вам або потрібно просто використовувати eth0 в нативній версії 37 або змінити конф-перемикач, щоб він пропускав позначений трафік, наприклад.

interface GigabitEthernet 0/1
    switchport trunk allowed vlan 37
    switchport mode trunk

На досить старих пристроях IOS вам потрібно встановити інкапсуляцію вантажівки до 8021q, оскільки вони за замовчуванням становлять ISL.


Доступ справно працював, транкінг не робив. Мета полягала в тому, щоб три або більше VLAN, кожна зі своєю підмережею, закінчувались у вікні Linux. Рішення / рішення полягало у тому, щоб забезпечити, щоб кожна VLAN на стороні Linux мала чітку MAC-адресу.
Даррен Н

Ну, це залежить від того, що ви маєте на увазі під "роботою". Якщо пристрій IOS має порт в режимі доступу, це означає, що "всі вхідні пакети в цей порт будуть позначені [внутрішнім до комутатора] як vlan X". Це означає, що будь-які заголовки 802.1q, які ви додали від хоста Linux, знімаються. Ви можете легко довести це, запустивши tcpdump на іншому порті, також встановленому в режимі доступу на vlan 37; ви повинні мати можливість бачити трафік з усіх трьох ваших інтерфейсів "vlan" на вікні linux.
Джошуа Хоблітт

Я мав би згадати дві речі. 1) Що я використовую теги vlan на centos 5 за допомогою перемикачів Cisco & Blade Networks в моєму виробничому середовищі віртуалізації. 2) switch port mode accessтакож зніме всі теги 802.1q на вихідному трафіку. Ось чому вам довелося вдаватися до співавторства з mac-адресами, щоб взагалі працювати. Без призначення mac-адрес, всі вони закінчувались на рідному інтерфейсі vlan, оскільки пакети надходять на хост Linux без тегів vlan .
Джошуа Хоблітт

Тільки для наочності на IOS "багажник" означає використовувати теги vlan 802.1q.
Джошуа Хоблітт

0

Тепер я не є експертом зі сторони Linux у цьому, ідучи за своїми знаннями про перемикання, чи є у вас інтерфейс eth0 на машині Linux, налаштований для трансляції dot1q? Я не знаю, чи є можливість для декількох vlans працювати в машині Linux, але я припускаю, що у вас є єдиний інтерфейс, який налаштований для роботи як частина Vlan37, таким чином, по суті, NIC вашої машини Linux є портом доступу. Порт доступу не може безпосередньо спілкуватися з порту магістралі, він не зможе створити або зрозуміти інкапсуляцію транкінгу.

З того, що я розумію, ви хочете, щоб машина Linux працювала в Vlan 37. Просто поверніть порт ge0 / 1, щоб він був портом доступу під Vlan37, і регулярно призначити машині Linux будь-який IP в підмережі Vlan37. Вам справді не потрібен транкінг, який використовується лише для передачі декількох даних Vlan по одному посиланню.


1
Частина vconfig налаштовує магістраль dot1q :)
Антуан Бенкемун

Кінцева мета - мати декілька VLAN, що закінчуються в системі Linux; Я спершу повинен отримати одного працюючого;)
Даррен H

Ви маєте на увазі, що хочете, щоб ваша машина Linux була частиною кількох власників, або, що, перебуваючи у Vlan37, вона повинна бути доступна для кількох інших власників?
gokul varma nk

Перший - Машина Linux повинна мати кілька IP-адрес, що не перекриваються, кожен у своїй VLAN. Головний орган відредагований для уточнення цього.
Даррен Н

0

Я думаю, що проблема полягає у налаштуванні вашого перемикача. Після встановлення порту в режим магістралі з тегами 802.1q вам потрібно налаштувати комутатор для надсилання vlan 37 як позначений трафік, а також вам може знадобитися встановити порт для використання іншого vlan для нематеріального трафіку. Коли я налаштував це, я також повинен був встановити, який vlan буде дозволено / заборонено на цьому порту. Мій IOS трохи іржавий, але я думаю, що це те, що ви шукаєте.

Ви також повинні мати змогу підтвердити конфігурацію свого комутатора за допомогою дротиків на eth0, оскільки він покаже вам теги VLAN на пакетах. Пакети LLDP Cisco також можуть дати вам зрозуміти, що робить порт ge0 / 1.


Я не помічав кульових балів 3 та 4 під час публікації. Я б все-таки спробував wireshark, оскільки це дозволить вам перевірити, що трафік, призначений для комутатора, надсилається на vlan 37.
Чак

Wireshark на linux часто не може показувати теги VLAN, і, на жаль, такий випадок тут. Дивіться нову виноску [6] в редагованому питанні вище.
Darren H

За замовчуванням відповідно до налаштувань запитувача буде встановлено vlan 1 як початковий vlan, а всі інші як теги vlans.
MikeyB
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.