Коммутируем несколько провайдеров на сервер

FreeBSD
Итак, железка для коммутации заказана, приедет ориентировочно в среду, 14.07.2010. После ее приезда и будет продолжение. После перелистывания прайсиков и оценки стоимости и сроков доставки, выбор пал на этого зверька Коммутатор HP ProCurve 1810G-8

И сразу вопрос, а зачем? Для чего?

События развивались так, сначала был один провайдер, проблем никаких не было. Провайдера в одну сетевую, локалку — в другу.
Потом появился второй провайдер… Ну что-же, еще одну сетевую в сервер.
Теперь появляется еще один провайдер ..., а сетевые больше втыкать и не куда, слоты закончились. Досадно, но надо как-то искать выход из данной ситуации.

А теперь немного теории, практика будет только после доставки зверька.

Есть такое понятие VLAN. VLAN (аббр. от англ. Virtual Local Area Network) — виртуальная локальная компьютерная сеть, представляет собой группу хостов с общим набором требований, которые взаимодействуют так, как если бы они были подключены к широковещательному домену, независимо от их физического местонахождения. VLAN имеет те же свойства, что и физическая локальная сеть, но позволяет конечным станциям группироваться вместе, даже если они не находятся в одной физической сети. Такая реорганизация может быть сделана на основе программного обеспечения вместо физического перемещения устройств. Т.е. хосты находящиеся в одном вилане могут общаться только с хостами внутри этого вилана. В другие виланы им вход заказан. Нам это пригодится, чтоб не гонять ethernet трафик от одного провайдера, в другого. Отсюдова следует — что каждый провайдер будет заведен в свой вилан, который никак не связан с виланом другого провайдера! Это очень важно!!!
У нас получилось, что в коммутаторе будет создана 3 вилана, в каждом вилане будет по одному порту, в каждый из которых будет вставлен отдельный провайдер.

Есть такое понятие транк — это порт (или несколько портов), который принадлежит сразу нескольким виланам одновременно. При этом, к ethernet-фрейму при передаче по транку еще добавляется метка вилана (тэг). Такой трафик называется тэгированый. Таким образом на наш сервер будет попадать тегированый трафик. Сервер, на основе метке вилана будет знать — с какого провайдера пришел трафик.

Чего мы этим добьемся?
В сервер будет всего один кабель, в одну сетевую! Вместо 4 кабелей в разные сетевые!

На условной схеме изображен 8-ми портовый коммутатор, разными цветами помечены разные виланы.
8 порт — транковый порт, который одновременно лежит в первых 4 виланах.
Порты 1,2,3 — выделены для трех разных провайдеров. Порт 4 выделен для ЛВС.

Пока попробую ответить на ваши вопросы, ибо теории тут очень много…

Продолжение следует после получения зверька ...

Все получилось сумбурно, и начал, как обычно с конца :)

1. Проектирование

Разумеется, первый этап — это проектирование сети. Чтоб с проектировать — надо знать, что мы вообще имеем. А имеем мы следующее. У нас есть небольшая ЛВС, состоящая из:
— две рабочих станции;
— сервер;
— беспроводная точка доступа;
— ну и собственно беспроводные клиенты.
Что мы хотим:
— предоставить доступ из локальной сети в глобальную сеть интернет;
— доступ в Интернет из ЛВС осуществляется через сервер;
— предоставить доступ из глобальной сети Интернет к нашему серверу (а именно к файловому хранилищу).
Как будет подключен Интернет:
— Интернет будет приходить в нашу локальную сеть по витой паре;
— Интернет будет поступать от 3 разных провайдеров.
Подытожим все: нужно выпустить локальную сеть в Интернет и дать возможность из Интернет добираться до файлового хранилища на сервере.
Вроде ничего не упустил, теперь зарисуем нашу схемку:

Некоторые замечания. ЛВС предоставляется доступ только через сервер.
Бегло оценив схемку, сразу видно — что придется разбивать сеть на несколько сегментов. Трафик между сегментами будет проходить только через сервер.
Итак, разбиваем нашу сеть не несколько логических сегментов, а именно:
— провайдер 1;
— провайдер 2;
— провайдер 3;
— ЛВС.
И разносим эти сегменты, каждый в свой VLAN:
— VLAN0101 — провайдер 1;
— VLAN0102 — провайдер 2;
— VLAN0103 — провайдер 3;
— VLAN0001 — ЛВС.
Т.к. сервер предоставляет доступ всем этим товарищам, то он соответственно будет находится одновременно в каждом сегменте. Что, зарисуем это безобразие:




На этом проектирование закончено.
Маленькие выкладки: почему выбран гигабитный свитч? Дело в том, что большая часть трафика будет не откуда, а именно из пиринговых сетей провайдеров. Провайдеры подключают по технологии Ethernet, со скоростью подключения 100Мбит/сек. Т.е. скорость от трех провайдеров может суммарно достигать 300Мбит/сек. Поэтому, как минимум, один порт на коммутаторе должен уметь переваривать 300Мбит/сек. Оптимально под это подходит HP ProCurve 1700-8, он содержит 7 портов на скорости 100Мбит/сек, и 1 порт — 1Гбит/сек. Но в разумные сроки его ждать не приходится. HP ProCure 18 серии — все порты гигабитные, и сроки доставки — в пределах недели. Стоимость соответственно повыше.

Продолжаем ждать зверька.

Продолжение следует ...

2. Настраиваем сервер

Пока зверек не приехал, можно приступить к настройке сервера. Сетевая карта вкручена, драйверы проставлены. Проверяем, что получилось:
[22:18 root@mira /etc]# pciconf -lv
...
skc0@pci0:5:0:0:        class=0x020000 card=0x4b011186 chip=0x4b011186 rev=0x11 hdr=0x00
    vendor     = 'D-Link System Inc'
    device     = 'DGE-530T V.B1 Gigabit Ethernet Adapter (rev 11)'
    class      = network
    subclass   = ethernet
...
[22:18 root@mira /etc]# ifconfig sk0
sk0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=8000b<RXCSUM,TXCSUM,VLAN_MTU,LINKSTATE>
        ether 00:1e:58:a7:b0:09
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active


С физикой все в порядке.
Создаем теперь виланы, в соответствии с нашей схемой:
[22:22 root@mira /etc]# ifconfig vlan1 create vlan 1 vlandev sk0
[22:22 root@mira /etc]# ifconfig vlan101 create vlan 101 vlandev sk0
[22:22 root@mira /etc]# ifconfig vlan102 create vlan 102 vlandev sk0
[22:22 root@mira /etc]# ifconfig vlan103 create vlan 103 vlandev sk0


Проверяем:
[22:22 root@mira /etc]# ifconfig vlan1
vlan1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        ether 00:1e:58:a7:b0:09
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
        vlan: 1 parent interface: sk0
[22:23 root@mira /etc]# ifconfig vlan101
vlan101: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        ether 00:1e:58:a7:b0:09
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
        vlan: 101 parent interface: sk0
[22:23 root@mira /etc]# ifconfig vlan102
vlan102: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        ether 00:1e:58:a7:b0:09
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
        vlan: 102 parent interface: sk0
[22:23 root@mira /etc]# ifconfig vlan103
vlan103: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        ether 00:1e:58:a7:b0:09
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
        vlan: 103 parent interface: sk0


Все правильно, теперь остается проверить, формируются ли 802.1Q фреймы или нет. Для этого запустим снифер (tcpdump) и посмотрим, что бегает на физическом интерфейсе sk0:
[22:23 root@mira /etc]# tcpdump -e -n -i sk0 vlan
tcpdump: WARNING: sk0: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on sk0, link-type EN10MB (Ethernet), capture size 68 bytes

А ничего там не бегает, ибо взяться не откуда трафику :)
Ну что же, пошлем из каждого вилана по DHCP запросу:
[22:27 dk@mira ~]> sudo dhclient vlan1
DHCPDISCOVER on vlan1 to 255.255.255.255 port 67 interval 7
^C
[22:27 dk@mira ~]> sudo dhclient vlan101
DHCPDISCOVER on vlan101 to 255.255.255.255 port 67 interval 5
^C
[22:27 dk@mira ~]> sudo dhclient vlan102
DHCPDISCOVER on vlan102 to 255.255.255.255 port 67 interval 6
^C
[22:27 dk@mira ~]> sudo dhclient vlan103
DHCPDISCOVER on vlan103 to 255.255.255.255 port 67 interval 3
^C


А вот и наши пакетики:
22:27:50.353765 00:1e:58:a7:b0:09 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 346: vlan 1, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request [|bootp]
22:27:53.884091 00:1e:58:a7:b0:09 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 346: vlan 101, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request [|bootp]
22:27:56.042517 00:1e:58:a7:b0:09 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 346: vlan 102, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request [|bootp]
22:27:58.209348 00:1e:58:a7:b0:09 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 346: vlan 103, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request [|bootp]

Все правильно, тип фрейма ethertype 802.1Q, виланы внутри фрейма тоже правильные: vlan 1, vlan 101, vlan 102, vlan 103

Собственно на этом настройка сервера пока что завершена, канальный уровень настроили и проверили. Пакеты получаются тэгированые, номера виланов верный.
Предстоящий фронт работ — настроить на коммутаторе виланы, и на порте, идущем в сервер, разрешить тегированый трафик, попутно включить его в нужные виланы.

Продолжение следует ...

Закружили тут, но вот время появилось, и продолжение. Коммутатор привезли, быстро его смонтировал и настроил, поэтому будет описание постфактум.

Коммутатор настраивается только через WEB-интерфейс, ну да ладно. Первым делом скачал и установил новую прошивку с сайта изготовителя. И, что приятно удивило, оказывается на коммутаторе порт #1 поддерживает стандарт 802.3ad (PoE, Power of Etherner), что по-русски — может питаться от другого устройства поддерживающего это стандарт. Возможно в будущем это пригодится. Итак, заходим на WEB-интерфейс:

Вводим и пароль и попадем в интерфейс управления коммутатором:

Теперь чуток остановимся на портах, что куда вставлено. Провайдер «Зеленая точка» еще свой кабель не провел, поэтому пока воткнуты в коммутатор 2 провайдера («Домолинк», «Прокма»), беспроводная точка доступа, и собственно сам сервер. На картинке это выглядит так:


Далее приступаем к настроек VLAN на коммутаторе, для чего заходим в меню «VLANs — VLAN Configuration» и создаем нужные нам VLAN:


После чего приступаем к настройке портов по VLAN, для этого переходим в меню «VLANs — Participation / Tagging»:

Вот тут надо немного остановиться. В верхней части в поле VLAN — выбирается один из созданных нами. На данной картинке выбран VLAN 1. И снизу перечислены все порты коммутатора с разными буквами: T, U и E. T — означает что по данному порту будет передаваться тегированый трафик, U — по порту будет передавать не тегированый трафик. E — порт вообще не принадлежит данному VLAN. Более крупная картинка:

На картинке видно, что:
— порт 1 принадлежит VLAN 1 и по нему передается тегированый трафик;
— порты 2, 3, 4, 5 тоже принадлежать VLAN 1, но по ним передается не тегированый (обычный) трафик;
— порты 6, 7, 8 не принадлежать VLAN 1 (ибо они каждый принадлежать конкретному провайдеру).
Т.е. если на порт 1 поступает ethernet-пакет с типом 802.1Q и в нем будет указан VLAN 1 — то пакет будет считаться принадлежащим VLAN 1.
Теперь заполняем порты по остальным VLAN:



Как видно — порт 1 принадлежит каждому VLAN, причем помечен, что по нему передается тегированый трафик. Таким образом по одному физическому кабелю будет передаваться трафик от 3 разных провайдеров + трафик от локальной сети.
На этом настройка коммутатора закончена, и осталось глянуть ifconfig на сервере, что и делаем:
sk0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=8000b<RXCSUM,TXCSUM,VLAN_MTU,LINKSTATE>
        ether 00:1e:58:a7:b0:09
        media: Ethernet autoselect (1000baseT <full-duplex>)
        status: active
vlan1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        ether 00:1e:58:a7:b0:09
        inet 192.168.25.2 netmask 0xffffff00 broadcast 192.168.25.255
        media: Ethernet autoselect (1000baseT <full-duplex>)
        status: active
        vlan: 1 parent interface: sk0
vlan101: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        ether 00:1e:58:a7:b0:09
        media: Ethernet autoselect (1000baseT <full-duplex>)
        status: active
        vlan: 101 parent interface: sk0
vlan102: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        ether 00:1e:58:a7:b0:09
        inet 10.2.2.10 netmask 0xfffffe00 broadcast 10.2.3.255
        inet 0.0.0.0 netmask 0xff000000 broadcast 255.255.255.255
        media: Ethernet autoselect (1000baseT <full-duplex>)
        status: active
        vlan: 102 parent interface: sk0
vlan103: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        ether 00:1e:58:a7:b0:09
        media: Ethernet autoselect (1000baseT <full-duplex>)
        status: active
        vlan: 103 parent interface: sk0

Все отлично, физический интерфейс завелся в режиме 1000baseT <full-duplex>. Каждый провайдер закреплен за виртуальными интерфейсами vlan101, vlan102, vlan103. Локальная сеть закреплена за vlan1.
Сам физический интерфейс просто передает тегированый трафик.
Дальше можно настраивать использование каналов провайдера, но это уже не в рамках этой статьи. Здесь мы только рассмотрели как через один физический кабель спустить серверу несколько провайдеров и локальную сеть.

15 комментариев

avatar
ОСь на сервере судя по названию будет freebsd? А на cisco не хотел сделать вместо сервера?

п.с. название слегка поправил, а то глаза резало :)
avatar
Самый дешевый свитч Cisco стоит от 17к, грубо. И он не подходит по ряду параметров, таких как как габариты, энергопотребление :)
Если в качестве терминации транка ..., то сервер — на то и сервер — что предоставляет что-то :) Допустим предоставление файл-помойки
avatar
а если рутер с платой езернет, 6 портов суммарно. у меня так провайдеры коммутрируются. циска 2800 50тр и плата еще 12
комментарий был удален
avatar
Сетевая карта — 12тр? омг :) бродком сетевые адаптера двух-портовые стоят около 4тр.
avatar
так это же cisco, там тебе впаривают селерон 366 за 50тр и ты радуешься, что дещево :) это совсем другое железо. п3 733 / 256 озу / 32гб на флешке угадай скока стоит? 500тр! :) у меня таких пара есть
avatar
Цена, увы, не является техническим показателем :) Вот для примера:
xx-xxxxx-xx> sh ver

Cisco Adaptive Security Appliance Software Version 7.2(4)
Device Manager Version 5.2(4)

Compiled on Sun 06-Apr-08 13:39 by builders
System image file is "disk0:/asa724-k8.bin"
Config file at boot was "startup-config"

fw-cisco-1 up 300 days 9 hours

Hardware:   ASA5520, 512 MB RAM, CPU Pentium 4 Celeron 2000 MHz
Internal ATA Compact Flash, 256MB
BIOS Flash M50FW080 @ 0xffe00000, 1024KB

Encryption hardware device : Cisco ASA-55x0 on-board accelerator (revision 0x0)
                             Boot microcode   : CNlite-MC-Boot-Cisco-1.2
                             SSL/IKE microcode: CNlite-MC-IPSEC-Admin-3.03
                             IPSec microcode  : CNlite-MC-IPSECm-MAIN-2.05
 0: Ext: GigabitEthernet0/0  : address is 0021.a0af.c792, irq 9
 1: Ext: GigabitEthernet0/1  : address is 0021.a0af.c793, irq 9
 2: Ext: GigabitEthernet0/2  : address is 0021.a0af.c794, irq 9
 3: Ext: GigabitEthernet0/3  : address is 0021.a0af.c795, irq 9
 4: Ext: Management0/0       : address is 0021.a0af.c791, irq 11
 5: Int: Internal-Data0/0    : address is 0000.0001.0002, irq 11
 6: Int: Not used            : irq 5
 7: Ext: GigabitEthernet1/0  : address is 0023.5ee5.dc0a, irq 255
 8: Ext: GigabitEthernet1/1  : address is 0023.5ee5.dc0b, irq 255
 9: Ext: GigabitEthernet1/2  : address is 0023.5ee5.dc0c, irq 255
10: Ext: GigabitEthernet1/3  : address is 0023.5ee5.dc0d, irq 255
11: Int: Internal-Data1/0    : address is 0000.0003.0002, irq 255
The Running Activation Key feature: 50 security contexts exceed the limit on the platform, reduced to 20 security contexts.

Licensed features for this platform:
Maximum Physical Interfaces : Unlimited
Maximum VLANs               : 150
Inside Hosts                : Unlimited
Failover                    : Active/Active
VPN-DES                     : Enabled
VPN-3DES-AES                : Enabled
Security Contexts           : 20
GTP/GPRS                    : Enabled
VPN Peers                   : 750
WebVPN Peers                : 2

This platform has an ASA 5520 VPN Plus license.

Все ограничения — искусственные! И вот это очень сильно бесит, почему должны платить за функционал, которые уже есть, просто манагеры решили не отдавать весь этот функционал целиком.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.