Подключение офисов в отдельных VLAN при помощи LC-SM100-16/2SFPНебольшие организации часто арендуют помещения под офисы в так называемых "Бизнес-центрах", где в одном здании размещено несколько (до десяти - пятнадцати) офисов разных организацией. Владельцы бизнес-центров обычно предоставляют "голое" помещение с минимумом дополнительных услуг (в лучшем случае телефон). Всё остальное арендаторы обычно проводят сами, в том числе и интернет. При этом отсутствие централизованной системы организации доступа в интернет зачастую приводит к хаотично развешенным по стенам коридоров проводам и усложняет поиск неисправностей в отдельных сетях. Гораздо удобнее будет, если в стоимость арендной платы будет также входить доступ в интернет. Потребности небольших организаций обычно заканчиваются на работе с электронной почтой, web-сёрфинге и общении в ICQ, потому нет необходимости строить какую-то сверхсложную систему. Важно лишь, чтобы сети арендаторов были изолированы друг от друга, но это не является сложной задачей. Ниже будет описан пример решения такой задачи. Сначала более детально обрисуем задачу:
Приступаем к решению этой задачи. Нам понадобиться небольшое помещение для размещения оборудования (серверная), туда будет приходить провод от интернет-провайдера и по одной витой паре от каждой организации, в каждой организации будет установлен неуправляемый коммутатор (свитч), через который к этой витой паре будут подключены компьютеры организации. Так же для решения задачи нам понадобиться управляемый коммутатор и небольшой сервер (или компьютер, выполняющий его функции). В качестве сервера можно использовать любой компьютер с процессором Celeron-430 и выше и оперативной памятью в 512 мегабайт и более. Автор использовал компьютер с материнской платой ASUS P5KPL-AM, процессором Celeron E1400 и 2GB оперативной памяти. Нагрузка на сервер была практически нулевой, а его стоимость составила примерно 250$. Выбор коммутатора пал на LC-SM100-16/2SFP, производства отечественной компании Алентис Электроникс. Этот коммутатор имеет 16 портов 10/100BASE-TX и 2 порта Gigabit SFP, поддержку 802.1Q, управление скоростью на портах и отличается небольшими габаритами и невысокой стоимостью. Мы будем использовать только ethernet-порты коммутатора, причём первый порт будет настроен в транке и соединён с единственной сетевой картой на сервере, а все остальные порты будут работать в акцессном режиме, причем порты со второго по пятнадцатый будут использованы для подключения арендаторов, а шестнадцатый порт будет подключен к интернет-провайдеру.
К серверу мы ещё вернёмся, а сейчас вооружимся ноутбуком и приступим к настройке коммутатора. По умолчанию на коммутаторе заведён только один влан - первый, все порты настроены в акцессном режиме и находятся в этом влане, этот же влан является управляющим, и коммутатор имеет в нём IP-адрес 192.168.0.120. Подключаем ноутбук ко второму порту коммутатора (можно к любому, но сеть владельцев бизнес-центра мы будем подключать ко второму порту, и он же будет в управляющем влане), и выставляем на ноутбуке адрес из сети: 192.168.0.0/24 (кроме 102.168.0.120, который принадлежит коммутатору). Далее заходим на страницу: "http://192.168.0.120/index.html" и авторизуемся на ней с логином "visor" и паролем "switch". Сразу сменим собственный IP-адрес коммутатора, чтобы он был из сети 192.168.2.0/24, для этого идём на страницу «Настройки» и вводим новые данные, например 192.168.2.254. После чего применяем настройки, меняем на ноутбуке адрес так, чтобы он был из подсети 192.168.2.0/24, и заходим на "http://129.168.2.254/index.html". Теперь переходим на страницу «VLAN», там у нас только один влан, нажимаем кнопку «Изменить» и меняем «Тэг VLAN» на 2, описание указываем по своему вкусу и сохраняем настройки, дальше включаем поддержку 802.1Q (по умолчанию она отключена) нажатием соответствующей кнопки. Далее всё на той же странице («VLAN») переводим первый порт коммутатора в транковый режим и связываем его со вланом 2. Это иллюстрирует следующая картинка: Следующим шагом нужно создать ещё 14 вланов (с 3 по 16) и связать их только(!) с первым портом. Настройки для каждого влана будут выглядеть примерно вот так: Закончив создание вланов "разложим" порты по ним. Третий порт - в третий влан, четвёртый порт - в четвёртый влан и т.д. Внимание! Порты нужно настраивать в акцессном режиме! Далее перейдём на страницу «Скорость портов» и ограничим скорость для портов со второго по пятнадцатый до значения в 1024kbps (1 мбит/с). Настройки порта будут выглядеть примерно вот так: Отдельно следует отметить тот момент, что скорость можно ограничить и на сервере, но это создаст нагрузку на процессор. Конечно, процессор у нас не загружен, но если уж загружать, - то лучше найти другие задачи, тем более что ограничивать скорость вполне умеет и коммутатор. Подключаем провод от провайдера в шестнадцатый порт, сервер - в первый порт, сеть администрации комплекса - во второй порт, сети остальных организаций - в порты с третьего по пятнадцатый и переходим к настройке сервера. Переходим к настройке сервера. Во всех локальных сетях сервер будет иметь первый адрес (192.168.X.1), будет шлюзом и DNS-сервером. Будем предполагать, что к провайдеру мы подключаемся по выделенной линии, IP-адрес статически прописывается на интерфейсе. Если ваш провайдер использует PPPoE или какие либо другие типы соединения - нужно внести соответствующие (в большинстве случае очевидные) правки в приводимые скрипты и конфигурационные файлы. Для начала установим на сервер Ubuntu Server 9.04 в самой минимальной конфигурации. Загрузимся и установим пакет vlan, который понадобиться для конфигурации интерфейсов в транковом режиме: apt-get install vlan Теперь приведём файл /etc/network/interfaces к следующему виду (здесь мы предполагаем что на сервере всего одна сетевая карта, которая видна как eth0 и которая подключена к коммутатору):
# loopback-интерфейс auto lo iface lo inet loopback # Настройки для vlan2: auto vlan2 iface vlan2 inet static address 192.168.2.1 netmask 255.255.255.0 network 192.168.2.0 broadcast 192.168.2.255 mtu 1500 vlan_raw_device eth0 # Настройки для vlan3: auto vlan3 iface vlan3 inet static address 192.168.3.1 netmask 255.255.255.0 network 192.168.3.0 broadcast 192.168.3.255 mtu 1500 vlan_raw_device eth0 # Остальные интерфейсы конфигурируются по аналогии. # Потому здесь мы их пропустим. # .... # .... # Отличаются настройки только для vlan16, который смотрит в сторону провайдера. # В качестве DNS-сервера сознательно указываем 127.0.0.1, # поскольку на нашем сервере будет свой DNS: auto vlan16 iface vlan16 inet static address 11.22.33.44 netmask 255.255.255.0 gateway 11.22.33.1 dns-nameservers 127.0.0.1 mtu 1500 vlan_raw_device eth0
Перезапустим сеть: invoke-rc.d networking restart Установим DNS-сервер и SSH-сервер (последний пригодится для удалённого администрирования сервера): apt-get install bind9 ssh Теперь у нас есть интернет на сервере, поэтому мы можем установить доступные обновления для нашей системы: apt-get update && apt-get dist-upgrade После установки обновлений нужно перезагрузить сервер: reboot Включим форвардинг (пересылку) пакетов в ядре, для этого добавим в файл /etc/sysctl.conf строку: net.ipv4.ip_forward=1 И применим изменения: sysctl -p Далее нужно настроить iptables (пакетный фильтр), для этого создадим скрипт /root/scripts/firewall.sh следующего содержания: #/bin/sh # Интерфейс, подключенный к провайдеру: IF_OUT="vlan16" # Сбрасываем все правила во всех таблицах: iptables -F iptables -F -t nat iptables -F -t mangle # Устанавливаем политики по умолчанию: # Игнорировать входящие, # Разрешить исходящие, # Игнорировать пересыламые (запрещать): iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP # Разрешаем входящие в ответ на исходящие: iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # Разрешаем весь трафик на loopback-интерфейсе: iptables -A INPUT -i lo -j ACCEPT # Разрешаем доступ к SSH из сети администрации комплекса: iptables -A INPUT -m tcp -p tcp --dport 22 -s 192.168.2.0/255.255.255.0 -i vlan2 -j ACCEPT # Разрешаем пересылку пакетов из сетей арендаторов наружу и поднимаем NAT для них. # Здесь нам и пригодиться тот факт, что сеть 192.168.2.0/24 находится во vlan2, # сеть 192.168.3.0/24 во vlan3 и так далее. Это позволит не писать много правил, # а создавать их, используя цикл. # Перебираем номера вланов от 2 до 15: for vlanid in `seq 2 15`; do # Разрешаем пересылку пакетов из этого влана наружу: iptables -A FORWARD -i vlan${vlanid} -o ${IF_OUT} -s 192.168.${vlanid}.0/255.255.255 -j ACCEPT # Разрешаем пересылку пакетов снаружи в этот влан, но только в ответ на исходящие запросы: iptables -A FORWARD -i ${IF_OUT} -o vlan${vlanid} -d 192.168.${vlanid}.0/255.255.255 -m state --state RELATED,ESTABLISHED -j ACCEPT # NAT для подсети из этого влана: iptables -t nat -A POSTROUTING -s 192.168.${vlanid}.0/255.255.255 -j MASQUERADE -o ${IF_OUT} # Разрешаем использование нашего DNS из этого влана: iptables -A INPUT -m udp -p udp --dport 53 -s 192.168.${vlanid}.0/255.255.255 -i vlan${vlanid} -j ACCEPT done Чтобы правила iptables применялись при загрузке системы нужно добавить в файл /etc/rc.local строку: /bin/sh /root/scripts/firewall.sh Перед строкой: exit 0 После чего остаётся выполнить финальную перезагрузку сервера, чтобы убедиться, что при загрузке сервера корректно применяются правила iptables. Всё! Задача успешно решена. Теперь при появлении нового арендатора в бизнес-центре его можно подключать к любому свободному порту на коммутаторе (с третьего по пятнадцатый) и настраивать на всех компьютерах адреса из сети 192.168.X.0/24 и указывать в качестве шлюза и DNS-сервера адрес 192.168.X.1, где X - номер порта на коммутаторе. Если нужно иметь представление о потребляемом трафике - можно использовать например систему vnstat, которая просто считает трафик на заданных интерфейсах (обычно этого более чем достаточно) и умеет показывать статистику по часам, дням и месяцам. Установим пакет: apt-get install vnstat После этого для начала учёта трафика в каждом из вланов нужно выполнить команду: vnstat -u -i имя_интерфейса Поскольку для пятнадцати вланов выполнять команду пятнадцать раз не очень удобно, проще сделать вот так: for vlanid in `seq 2 16`; do vnstat -u -i vlan${vlanid}; done Сама по себе система vnstat предоставляет лишь консольный интерфейс, который не очень удобен для использования, однако, для неё есть весьма удобный web-интерфейс на PHP. К сожалению, он отсутствует в репозиториях Ubuntu, однако, его установка от этого не становится намного сложнее. Сначала установим веб-сервер и необходимые дополнения к нему: apt-get install apache2 libapache2-mod-php5 php5-gd Далее нужно скачать последнюю версию веб-интерфейса. На момент написания этой статьи последней была версия 1.4.1 и выпущена она аж третьего ноября 2008-го года, однако, вас это не должно смущать, поскольку за всё время её использования проблем замечено не было. Поскольку архив на диске нам не очень нужен - мы немного "выпендримся": скачаем файл в stdout, который перенаправим в stdin архиватора, который и распакует нам архив, предварительно очистив DocumentRoot сервера от лишних файлов: rm -rfv /var/www/* && wget http://www.sqweek.com/sqweek/files/vnstat_php_frontend-1.4.1.tar.gz -O - | tar xzv -C /var/www/ --strip 1 Теперь открываем в редакторе файл /var/www/config.php и приступаем к настройке. Для начала находим строку: $iface_list = array('eth0', 'eth1', 'sixxs'); И заменяем её на следующий код: // Пустой массив: $iface_list = array(); // Перебираем номера вланов: for ($i = 2; $i <= 16; $i++) { // Формируем имя интерфейса: $iface = "vlan$i"; // Добавляем интерфейс в список: array_push($iface_list, $iface); } Менее ленивые читатели могут просто перечислить список вланов при создании массива. Если вам нужны описания для интерфейсов, то нужно найти строки: $iface_title['eth0'] = 'Internal'; $iface_title['eth1'] = 'Internet'; $iface_title['sixxs'] = 'SixXS IPv6'; И отредактировать/добавить их по своему вкусу. Далее нужно разрешить доступ к веб-серверу из сети администрации комплекса, для этого в скрипт /root/scripts/firewall.sh нужно добавить строку: iptables -A INPUT -m tcp -p tcp --dport 80 -s 192.168.2.0/255.255.255.0 -i vlan2 -j ACCEPT После этого администратор комплекса сможет просматривать статистику доступа в сеть по адресу: "http://192.168.2.1". В веб-интерфейсе можно смотреть статистику по входящему и исходящему трафику на всех интерфейсах с детализацией по часам, дням и месяцам. Статистика будет отображаться в виде таблиц и графиков вроде этого: На этом всё. Здесь показаны основные идеи, которые используются при организации доступа в интернет в бизнес-центре. Представленное здесь решение является одним из многих и никак не единственно верным. Возможно, кто-то из читателей сможет решить эту задачу по-другому. Приятной работы! Автор: Вадим Калинников Корректор: Фролова Мария |
