The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Linux в качестве маршрутизатора между VLAN'ами (vlan linux)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: vlan, linux,  (найти похожие документы)
From: Иван Песин <ipesin at post.Lviv.UA> Newsgroups: Russian Linux Gazette Date: Mon, 14 Jan 2004 14:31:37 +0000 (UTC) Subject: Linux в качестве маршрутизатора между VLAN'ами Оригинал: http://gazette.linux.ru.net/rus/articles/talelinuxvlan.html Повесть о Linux и VLAN. Автор: (C) Иван Песин 1. Введение. Цель статьи - описать настройку компьютера под управлением Linux в качестве маршрутизатора между VLAN'ами (читается "виланами").VLAN, или Virtual bridged LAN, - это группа устройств объединяемых по логическому принципу (т.е. по выполняемым функциям, структурным подразделениям предприятия, приложениям и т.д.), вне зависимости от их физического размещения и подключения объединяемых сегментов сети. Эта технология позволяет управлять широковещательным и обычным сетевым трафиком, а так же увеличивает безопасность информации передаваемой по локальной сети. Предполагается, что читатель знаком с основами стандарта 802.1Q, умеет компилировать и устанавливать ядро Linux и настраивать IP маршрутизацию. По этим темам существует хорошая документация, поэтому, чтобы не увеличивать объем статьи, на этих вопросах я останавливаться не буду, а читателю предлагаю при необходимости обратиться к материалам, ссылки на которые приводятся в конце статьи. Итак, займемся делом. Задача простая - имеем коммутатор, скажем Cisco IOS-based или Allied Telesyn AT8124XL. Нужно организовать три VLAN'a, и настроить маршрутизацию между ними. Поехали. 2. Обновление ядра. Если у вас ядро до 2.4.14, идем на http://scry.wanfear.com/~greear/vlan.html и загружаем патч для вашего ядра. Кстати, по тому же адресу, вы найдете множество полезных ссылок по теме. Если версия выше - сразу переходите к конфигурации ядра. Распаковываем файл vlan.х.х.х.tar.gz, и патчим ядро: # cd ~ # tar xzvf vlan.x.x.x.tar.gz # patch -p1 < /root/vlan/vlan.patch.2.2 Пора настраивать ядро. Перейдя в каталог с исходными тесктами, набираем магические слова: # make menuconfig или # make xconfig или # make config кому что больше по вкусу. Теперь в настройке ядра будет поддержка стандарта 802.1Q. Включаем ее, а так же указываем все опции, нужные для маршрутизации. Пишем заветную строчку: # make dep && make bzImage && make modules && make modules_install Устанавливаем ядро, и перезагружаем машину. Во время загрузки успеваем увидеть радующие глаз строки: 802.1Q VLAN Support vX.ХХ Ben Greear <greearb@candelatech.com> vlan Initialization complete. Это то, что мы, собственно, и добивались. Теперь надо браться за настройку Linux'а, как маршрутизатора между VLAN'ами. 3. Настройка Linux. Сначала небольшое отступление. Когда мы настроим Linux, то для каждого VLAN'а будет создано отдельное устройство. Нужно выбрать формат обозначения устройств из четырех имеющихся вариантов. Формат устанавливается с помощью команды: vconfig set_name_type [name-type], где name-type может принимать следующие значения: VLAN_PLUS_VID имя устройства будет выглядеть так: vlan0005 VLAN_PLUS_VID_NO_PAD имя устройства будет выглядеть так: vlan5 DEV_PLUS_VID имя устройства будет выглядеть так: eth0.0005 DEV_PLUS_VID_NO_PAD имя устройства будет выглядеть так: eth0.5 Каждый из вариантов имеет свои плюсы и минусы. Так, привязка к устройству позволяет видеть, с какой сетевой картой вы работаете. Но, в тоже время, далеко не все программы поддерживают наличие точки в имени интерфейса. Например, программа sysctl из Red Hat Linux 6.2 будет ругаться на переменные вида eth0.0002.ip_forward, тогда как имя vlan0002.ip_forward пропустит без замечаний. В общем, - выбор за вами. Хочу еще раз подчеркнуть, что имя, ассоциируемое с каждым из VLAN'ов, будь то vlan0002 или eth0.0002, представляет собой отдельное и самостоятельное устройство. Это важно при построении межсетевого экрана: как известно программа ipchains не различает псевдонимы на устройстве - они для нее одно устройство. В тоже время ipchains отличит eth0.0002 и eth0.0003. Вернемся теперь к настройке OC. Отключаем интерфейс, на котором будем настраивать VLAN'ы: # ifconfig eth0 down А теперь, просто поднимаем его (не устанавливая ip адрес, иначе мы не сможем настраивать VLAN'ы!) # ifconfig eth0 0.0.0.0 up Укажем VLAN'ы, которые будут использоваться на этом интерфейсе. Каждый VLAN добавим на нужный интерфейс: # vconfig add eth0 2 # vconfig add eth0 3 # vconfig add eth0 4 и т.д. Примечание: В системах Cisco, и некоторых других, VLAN #1 является vlan'ом по умолчанию, и поэтому использоваться не может. Необходимо начинать с #2 Всё, мы прописали VLAN'ы, которые будут использоваться на интерфейсе, нужно присваивать им ip адреса: # ifconfig -a # ifconfig -i vlan0002 192.168.2.1 broadcast 192.168.2.255 netmask 255.255.255.0 up # ifconfig -i vlan0003 192.168.3.1 broadcast 192.168.3.255 netmask 255.255.255.0 up # ifconfig -i vlan0004 192.168.4.1 broadcast 192.168.4.255 netmask 255.255.255.0 up Вот, с линуксом мы и разобрались. 4. Настройка коммутатора AT8124XL Так, займемся коммутаторами Allied Telesyn. Важно помнить, что на этом коммутаторе при работе с VLAN'ами их нужно переводить в состояние disabled. Поэтому полная конфигурация VLAN'ов может быть произведена только через консольный порт. Вот последовательность команд для на стройки с удаленного клиента: - Регистрируемся. - Выбираем Advanced Switch Configuration -> VLAN configuration - Создаем нужное количество VLAN'ов (процесс подробно описан в документации). - Добавляем нужные порты в соответствующие VLAN'ы. - В каждый VLAN помещаем порт, на котором находится линукс-маршрутизатор и делаем его таггируемым (tagging = yes). - Не забываем поставить для каждого порта, находящегося не в первом VLAN'е, PVID равным соответствующему VID. - Всё. 5. Настройка коммутатора Cisco IOS-based. Итак, настраиваем Cisco. Вот набор команд для настройки порта, на который подсоединен линукс-маршрутизатор: telnet mycisco >en # conf t ig)# int Fa 0/24 int)# duplex full int)# speed 100 int)# switchport trunk encaps dot1q int)# switchport trunk allowed vlan 2 int)# switchport trunk allowed vlan 3 int)# switchport trunk allowed vlan 4 int)# switchport mode trunk int)# end # sh run # ping myrouter ... если все нормально, сохраняем конфигурацию коммутатора командой # copy run start Кроме этого, нужно добавить к каждому VLAN'у несколько портов без инкапсуляции. (иначе какой-же смысл?). 6. Проблемы с драйверами сетевых карт. Теперь самое интересное и противное. Нужно с какого-нибудь Linux/UNIX в одном из vlan'ов дать команду: $ ping -s 1476 myrouter Если работает - то облегченно вздыхаете, в противном случае, затаив дыхание, пишете следующую команду: $ ping -s 100 myrouter Если такой "пинг" успешен, то это свидетельствует о "кривом" драйвере сетевой карты. Подробности дальше по тексту. Если же и в этот раз "пинг" не проходит - значит, вы что-то сделали не так. Либо плохо сконфигурирован коммутатор, либо маршрутизатор, либо ваш UNIX/Linux не включен в этот самый коммутатор┘ Теперь о проблемах с драйверами сетевых карт. Суть состоит в том, что стандарт 802.1Q определяет максимальный размер сегмента на 4 байта больше, чем стандарт ethernet. Эти 4 байта и несут информацию о принадлежности пакета тому или иному vlan'у. Самый простой выход - использовать сетевую карту на чипе rtl8029(as) или rtl8139, драйвера к которым написаны корректно. Легко правятся драйвера сетевых карт фирмы 3Com: исправлением строки static int mtu = 1500; на: static int mtu = 1504; Правки для других драйверов вы найдете по ссылке, приведенной в конце статьи. 7. Скрипт старта сети для Red Hat систем. Так как на сайте http://scry.wanfear.com/~greear/vlan.html лежит скрипт для имен формата ethX.XXXX, то, что бы не повторятся, я приведу скрипт для имен вида vlanXXXX (OS RedHat 6.2): #!/bin/sh # # network Bring up/down networking # # chkconfig: 2345 10 90 # description: Activates/Deactivates all network interfaces configured to \ # start at boot time. # probe: true # Source function library. . /etc/rc.d/init.d/functions if [ ! -f /etc/sysconfig/network ]; then exit 0 fi . /etc/sysconfig/network if [ -f /etc/sysconfig/pcmcia ]; then . /etc/sysconfig/pcmcia fi # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 0 [ -x /sbin/ifconfig ] || exit 0 # Even if IPX is configured, without the utilities we can't do much [ ! -x /sbin/ipx_internal_net -o ! -x /sbin/ipx_configure ] && IPX= CWD=`pwd` cd /etc/sysconfig/network-scripts # find all the interfaces besides loopback. # ignore aliases, alternative configurations, and editor backup files interfaces=`ls ifcfg* | egrep -v '(ifcfg-lo|:)' | \ egrep -v 'ifcfg-ippp[0-9]+$' | \ egrep 'ifcfg-[a-z0-9]+$' | \ sed 's/^ifcfg-//g'` # See how we were called. case "$1" in start) action "Setting network parameters" sysctl -p /etc/sysctl.conf action "Bringing up interface lo" ./ifup ifcfg-lo case "$IPX" in yes|true) /sbin/ipx_configure --auto_primary=$IPXAUTOPRIMARY \ --auto_interface=$IPXAUTOFRAME if [ "$IPXINTERNALNETNUM" != "0" ]; then /sbin/ipx_internal_net add $IPXINTERNALNETNUM $IPXINTERNALNODENUM fi ;; esac > action "Setting VLAN parameters: " vconfig set_name_type VLAN_PLUS_VID for i in $interfaces; do if egrep -L "ONBOOT=\"?[Nn][Oo]\"?" ifcfg-$i >/dev/null ; then # Probe module to preserve interface ordering /sbin/ifconfig $i >/dev/null 2>&1 else > vlan=`echo $i | egrep -v '(lo|:)' | \ > egrep -v 'ippp[0-9]+$' | \ > egrep 'vlan[0-9][0-9][0-9][0-9]$' | \ > sed "s/^vlan//g;s/^0*//g"` > ifvlan=`egrep -e VLANDEV ifcfg-$i | \ > cut -d= -f2` > if [ -n "${vlan}" ]; then > action "Enable VLAN # ${vlan} on device {$ifvlan}: " vconfig add ${ifvlan} ${vlan} > fi action "Bringing up interface $i" ./ifup $i boot fi done Строки с изменениями, которые необходимо внести в оригинальный файл network, отмечены символом ">". Кроме того, как видно из текста, скрипт требует внесение в файл ifcfg-vlanXXXX дополнительного параметра VLANDEV, который определяет интерфейс, на котором должен быть создан данный VLAN. 8. Ссылки. - http://scry.wanfear.com/~greear/vlan.html основной сайт. Информация о "кривых" драйверах сетевых плат, скрипт запуска сети для имен вида ethX.XXXX и многое другое. - http://standards.ieee.org/reading/ieee/std/lanman/802.1Q-1998.pdf описание стандарта 802.1Q - Документация по другим вопросом: - http://www.ibiblio.org/pub/Linux/docs/HOWTO/Ethernet-HOWTO - http://www.ibiblio.org/pub/Linux/docs/HOWTO/Firewall-HOWTO - http://www.ibiblio.org/pub/Linux/docs/HOWTO/IPCHAINS-HOWTO - http://www.ibiblio.org/pub/Linux/docs/HOWTO/Net-HOWTO - http://www.ibiblio.org/pub/Linux/docs/HOWTO/Kernel-HOWTO

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру