VLAN "разветвитель" своими руками.

   Многие наверное часто сталкиваются с проблемой не хватки второго сетевого интерфейса или даже нескольких, но хуже всего, когда нет возможности установить дополнительные сетевые карты в сервер или какой либо роутер, тогда приходиться мириться и подымать на таких устройствах, если это возможно, сабинтерфейсы, однако такое решение многих может не устроить, т.к. возникает необходимость в полной изоляции сетей между собой, т.е. физическое разделение на сегменты, в этом случае поможет только использование 802.1Q VLAN, при условии, что ваш сервер или роутер поддерживают работу с 802.1Q VLAN, и покупка управляемого свича. Управляемые свичи, довольно дорогое удовольствие, бывает обидно, что из-за простейшей функции обычного разветвителя приходиться выкладывать больше денег, чем стоимость вашей железки. Самые дешевые коммутаторы такого класса можно найти за 60$ и выше, но они как правило полууправляемые и построены на элементной базе обычного дешевого неуправляемого свича, и вам крупно повезет, что за такую цену вы приобретете "настоящий" управляемый свич с нормальным процессором, да еще с нормальными функциями управления, что бывает довольно редко. Однако, мы сами в силах сделать такой свич на базе любого современного неуправляемого свича, т.к. большенство неуправляемых свичей содержат микросхемы, такие как IC+ IP175C и IP178C, Realtek RTL8305SB(SC) и RTL8309SB, Atan AT8985P и многие другие, которые умеют работать с 802.1Q VLAN, для этого достаточно изучить даташиты к этим микросхемам и написать прошивку для EEPROM, только есть одна маленькая проблема, в таких свичах не ставят EEPROM, т.к. все нужные настройки сделаны через ноги микросхем, хуже того, в большенстве моделей даже не предусмотрено место под EEPROM, вот с одним из таких мне и пришлось столкнуться. Моей целью было купить самый дешевый неуправляемый свич, желательно этого года выпуска, и переделать его в VLAN "разветвитель", в качестве такого свича был выбран 5-и портовый мини свич SURECOM EP-805SX ревизии 3C. Самое интересное, что я покупал его как свич с надеждой, что в нем установлен чип RTL8305SB(SC) или AT8985P, т.к. одна и таже модель содержит разные микросхемы и отличается только ревизиями, оказалось, что все последние SURECOM EP-805SX идут с чипами IC+ IP175C(Rev. 3C), чуть ранее IC+ IP175A(Rev. 3A) и IC+ IP175B(Rev. 3B), а еще ранее на AT8985P, но могут попасться и на RTL8305SB(SC). Вообщем, было решено, что попадется, на том и буду делать:). Попался мне на IC+ IP175C, первым делом был скачен даташит на этот чип, затем документация по регистрам EEPROM и разные схемы, что сильно порадовало, однако радость была не долгой, все доки немного сыроваты и имеют ошибки, а так же читать сложно и не удобно, мне понадобилось несколько дней что бы во всем разобраться и не пожалеть о покупке:). Ниже идет фото этого "монстра", фото не моего устройства, я просто не успел свой с фотографировать до переделки, нашел эту фотку на сайте www.nag.ru, отличие моего варината, у меня радиатор приклеен перпендикулярно и не закрывает нужных ножек микросхемы, а именно 53 и 54 ноги, если вам попадется вариант, как на этой фотографии, то вам придеться отклеивать радиатор, что бы подлезть к нужным ногам микросхемы. Если честно,то я вообще не понимаю зачем на IP175C нужен радиатор, она практически не греется, как старый вариант IP175A, видимо в SURECOM решили продолжить традицию установки радиаторов на все чипы:).
SURECOM EP-805SX
Следущим этапом было приобретение нужных компонентов, сеть московских магазинов ЧиПиДиП имеет достаточно большой выбор продаваемых радиодеталей, самое смешное то, что отечественные радиодетали дороже импортных аналогов, причем бывают в разы. После изучения всей документации на IP175C с http://www.icplus.com.tw/pp-IP175C.html, был выписан список всех нужных нам компонентов, и так, нам понадобиться:
1. Два резистора на 1Ком и 4,7Ком.
2. Одна микросхема памяти i2c EEPROM 24LC01A(B) емкостью на 128 байт и напряжением питания от 2.4В до 5В, но было бы желательно найти микросхему с питанием на 1.8В, т.к. в свиче SURECOM EP-805SX не стали разносить питание на 3.3В для трансивера и 1.8В для матрицы, как рекомендуется даташитом, а сделали общим на 1.9В, т.о. дальнобойность такого свича, в лучшем случае, не будет превышать 50-60 метров, для того, что бы оно было выше, необходимо запитать трансивер 3.3В, но многим это не принципиально. EEPROM с напряжением питания на 1.8В, 24AA01, достать довольно сложно, но если вы ее достанете, то вам не понадобятся резистор на 1Ком и стабилитрон на напряжение 3.3В.
3. Один стабилитрон на напряжение 3.3-3.6В, я использовал BZX55C3V6, но можно и отечественый - KC133A.
4. Одна панелька под DIP8.
Стоимость микросхемы 24LC01A(B) в ЧиПиДиП (http://www.chipdip.ru) - 14 руб. Есть более дешевый аналог - 24WC01P за 8 руб. 20 коп., но мне ее не удалось приобрести. Стабилитрон BZX55C3V6 обошелся в 1 руб. 20 коп., резисторы по 30-50 коп., панелька под EEPROM DIP8 за 1 руб. Сам же свич SURECOM EP-805SX был куплен за 13$.


Т.к. у меня не оказалось программатора для i2c EEPROM, мне пришлось еще докупать разъем DB-25 "папа" и панельку под DIP8, что бы собрать программатор на LPT порт для Linux по схеме взятой отсюда - http://sweb.cz/Frantisek.Rysanek/battery.html, там же была взята програмка для программирования EEPROM - http://sweb.cz/Frantisek.Rysanek/i2c-progs.tgz. Необходимо учесть, что данный программатор работает с ядром 2.4, т.е. использует модуль i2c-pport, который отсутствует в ядре 2.6, а так же в стандартном режиме LPT порта, т.е. в биосе материнской платы должен быть отключен режим EPP и установлен в "Normal".

Можно еще воспользоваться программатором PonyProg, софт есть для Linux и Windows - http://www.lancos.com/prog.html, схему желательно использовать эту- http://www.lancos.com/e2p/easyI2Cbus.gif, 7-й вывод EEPROM можно вообще не использовать, т.е. переключатель и один резистор можно выкинуть, транзисторы подойдут любые, можно KT315. Так как софт под Linux там собран еще под RedHat-7.x, то я пересобрал свежую версию в 2х вариантах GUI из CVS под Fedora Core 3 и воложил у себя - ponyprog2000-2.06e.tar.bz2.
Теперь немного о самой прошивке, в начале я взял прошивку из pdf доки по регистрам для EEPROM и написал заготовку - switch_24lc01.bin, немного разобрался как и что программировать и получил вот такой код:


Готовый файл прошивки для EEPROM изображенный здесь - vlan_24lc01.bin. Но есть одна неприятность, порты на этом свиче не соответствуют порядку, китайцы развели плату, как им было удобно:), поэтому получилась следущая схема относительно маркировки портов на свиче:
1 - Port4 VID=0005
2 - Port2 VID=0003
3 - Port3 VID=0004
4 - Port0 tag VLAN
5 - Port1 VID=0002
Из этой схемы видно, что порт 0 является тегированным и весь VLAN трафик подается на него, порты 1-4 являются не тегированными, и каждый идет в свою сеть. Такое сочетание портов относительно маркировки на свиче не очень удобное, поэтому я переделал прошивку для EEPROM специально для SURECOM EP-805SX, что бы порты соотвествовали номерам, которые нанесены на корпусе свича:
1 - Port4 tag VLAN
2 - Port2 VID=0002
3 - Port3 VID=0003
4 - Port0 VID=0004
5 - Port1 VID=0005
Готовый файл этой прошивки для EEPROM - ep-805sx-vlan_24lc01.bin. Теперь, относительно маркировки портов на свиче, 1-ый вход является тегированный, на него подаем VLAN поток, выходы со 2-го по 5-ый соответсвуют своим VID'ам и являются не тегированными, что стало гораздо удобнее в использовании, чем было в первом случае. Скорее всего эти прошивки для EEPROM подойдут и для придедущих чипсетов IP175A и IP175B, т.к. разница между ними не большая, покрайней мере то, что было сделано мной полностью совпадает по номерам регистров EEPROM'а. Через EEPROM доступен целый ряд возможностей, таких как:
- Назначение приоритетов для портов
- port security, это когда при старте свича порт запоминает MAC адрес подключенного в этот момент устройства и закрывает доступ для всех остальных, правда работает эта фича до выключения питания свича.
- Выставление скоростей и дупликсов на портах.
- Diffserv и другое...
Есть еще один плюс, при снятии EEPROM устройство будет работать в штатном режиме, т.е. будет тем, чем оно было до переделки...:). Таким образом можно переделать любой свич содержащий микросхемы IP175A/B/C, но для более конкретного результата потребуется изучение даташитов на эти чипы, такими же возможностями обладают 8-ми портовые собратья от IC+ - IP178A/B/C.
   Теперь перейдем к теме, как использовать такой VLAN "разветвитель". Допустим у нас есть такая схема и ADSL роутер на базе ОС Linux:

Для работы с нашим VLAN "разветвителем" необходимо создать устройства типа VLAN_PLUS_VID, т.е. вида vlan0002, vlan0003 и т.д. С другим типом, таким как VLAN_PLUS_VID_NO_PAD, работать VLAN "разветвитель" отказался. Для этого выполним следущие команды в Linux консоли:
# vconfig set_name_type VLAN_PLUS_VID
Теперь необходимо создать VLAN устройства с нужными нам VID'ами:
# vconfig add eth0 2
# vconfig add eth0 3
# vconfig add eth0 4
Посмотрим, есть ли они у нас в системе:
# cat /proc/net/vlan/config
VLAN Dev name | VLAN ID
Name-Type: VLAN_NAME_TYPE_PLUS_VID
vlan0002              |   2   |     eth0
vlan0003              |   3   |     eth0
vlan0004              |   4   |     eth0
Допустим, что у нас 2-е локальных сети для выхода в интернет - 192.168.1.0/255.255.255.0 и 192.168.2.0/255.255.255.0, и одна сеть в режиме бриджа без IP, например для Стрим ТВ. Необходимо поднять интерфейсы следущим образом:
# ifconfig vlan0002 192.168.1.1 up
# ifconfig vlan0003 192.168.2.1 up
# ifconfig vlan0002 0.0.0.0 up
Также еще желательно убрать IP адрес с устройства eth0, если он у вас присутствует(для роутеров D-Link DSL-xxxT этого делать не надо).
# ifconfig eth0 down
# ifconfig eth0 0.0.0.0 up
На этом базовую настройку VLAN в Linux'е можно считать законченной, если вам что-то не понятно, то блее детально можно прочесть на http://www.lanbilling.ru/vlan_solution.html, далее речь пойдет применительно к устройствам D-Link DSL-xxxT с моими последними прошивками для DSL-500T/504T/G604T с поддержкой VLAN, которые находятся по адресу - http://mcmcc.bat.ru/dlinkt. И так, привяжем наши VLAN к бриджевым устройствам, в системе уже имеется одно бриджевое устройство br0, необходимо создать еще одно или 2-а устройства бриджа:
# brctl addbr br1
# brctl addbr br2
Теперь создадим VLAN устройства и разместим их в нужные бриджи:
# vconfig set_name_type VLAN_PLUS_VID
# vconfig add eth0 2
# vconfig add eth0 3
# vconfig add eth0 4
# ifconfig vlan0002 0.0.0.0 up
# ifconfig vlan0003 0.0.0.0 up
# ifconfig vlan0004 0.0.0.0 up
# brctl addif br0 vlan0002
# brctl addif br1 vlan0003
# brctl addif br2 vlan0004
# brctl delif br0 nas1
# brctl delif br0 nas2
# brctl addif br2 nas1
# brctl addif br2 nas2
# brctl addif br1 nas0
А теперь внимание(!), что бы все заработало, нужно удалить из бриджа br0 сетевое устройство eth0, как только вы выполните эту команду, ваше устройство станет не доступным(!):
# brctl delif br0 eth0
Вот теперь подключаем наш VLAN "разветвитель" и радуемся жизни:). В результате мы имеем, на vlan0002 выход в интернет через роутер, на vlan0003 выход в сеть ADSL в режиме бриджа и на vlan0004 Стрим ТВ, но самое главное, что в такой схеме никто ни кому не мешает и друг друга не видит...

(c)2005 I.V. Mokrushin aka McMCC