Yellow Leaf

Yellow Leaf


Поиск по сайту


Вход
Правила портала
Регистрация
Забыли пароль?
О команде проекта
Справка по оформлению постов


Последние комментарии к новостям и статьям
Re: С днём системного администратора!
Re: Вышел новый номер v10.07(2) компьютерного журнала UserAndLINUX.
Re: Отчет о первом "Runtu InstallFest" в Екатеринбурге
Re: OpenVPN сервер для офисного шлюза на FreeBSD
Re: Релиз Runtu LXDE 10.04!
Ещё комментарии >>>


Новые файлы
Debian: cue2tracks_0.2.11_all (Дополнение для CUE 2 Tracks v0.2.11)
Gentoo: cue2tracks-0.2.11 (Дополнение для CUE 2 Tracks v0.2.11)
CUE 2 Tracks v0.2.11
Jabber-Shell 20090303
EasySoft AutoRun 0.4.1


Новое на форуме
Движок сайта. версия 2.0
Нужен логопед, срочно
Словить процесс
проблемы с разделом жесткого диска
планировщик, веб интерфейс


Проекты
Jabber-Shell
Qmmp
QStarDict
PHPSAAdmin


 
   


Друзья сайта
 Open Kazan - Казанское сообщество пользователей OpenSource 


Посетителей с 08.09.2006

4671498


Внешний вид портала


RSS-Ленты
Новости
Файлы


 

   
  Яндекс цитирования  

«Жёлтый Лист» - cайт о мире юникс
Новости Форум Статьи Файлы Пользователи
   

Организация доступа в интернет в бизнес-центре

MooSE 2009-08-24 21:46:43

Небольшие организации часто арендуют помещения под офисы в так называемых "Бизнес-центрах", где в одном здании размещено несколько (до десяти - пятнадцати) офисов разных организацией. Владельцы бизнес-центров обычно предоставляют "голое" помещение с минимумом дополнительных услуг (в лучшем случае телефон). Всё остальное арендаторы обычно проводят сами, в том числе и интернет. При этом отсутствие централизованной системы организации доступа в интернет зачастую приводит к хаотично развешенным по стенам коридоров проводам и усложняет поиск неисправностей в отдельных сетях.

Гораздо удобнее будет, если в стоимость арендной платы будет также входить доступ в интернет. Потребности небольших организаций обычно заканчиваются на работе с электронной почтой, web-сёрфинге и общении в ICQ, потому нет необходимости строить какую-то сверхсложную систему. Важно лишь, чтобы сети арендаторов были изолированы друг от друга, но это не является сложной задачей. Ниже будет описан пример решения такой задачи.

Сначала более детально обрисуем задачу:

  • Внешний безлимитный интернет-канал со скоростью 4 мбит/с;
  • До четырнадцати офисов в бизнес-центре (в одном из них размещена администрация комплекса);
  • Ни одна из организаций не может утилизировать полосу более 1 мбит/с;
  • Сети организаций имеют адресное пространство 192.168.X.0/24, где X - уникальное для каждой организации число;
  • Сети организаций должны быть изолированы друг от друга.

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

Так же для решения задачи нам понадобиться управляемый коммутатор и небольшой сервер (или компьютер, выполняющий его функции).

В качестве сервера можно использовать любой компьютер с процессором Celeron-430 и выше и оперативной памятью в 512 мегабайт и более. Автор использовал компьютер с материнской платой ASUS P5KPL-AM, процессором Celeron E1400 и 2GB оперативной памяти. Нагрузка на сервер была практически нулевой, а его стоимость составила примерно 250$.

Выбор коммутатора пал на LC-SM100-16/2SFP, производства отечественной компании Алентис Электроникс. Этот коммутатор имеет 16 портов 10/100BASE-TX и 2 порта Gigabit SFP, поддержку 802.1Q, управление скоростью на портах и отличается небольшими габаритами и невысокой стоимостью (155$).

Мы будем использовать только ethernet-порты коммутатора, причём первый порт будет настроен в транке и соединён с единственной сетевой картой на сервере, а все остальные порты будут работать в акцессном режиме, причем порты со второго по пятнадцатый будут использованы для подключения арендаторов, а шестнадцатый порт будет подключен к интернет-провайдеру.

Пример схемы сети

На схеме показан пример подключения трёх организаций, остальные подключаются аналогичным образом. Для удобства рекомендуется локальную сеть с адресным пространством 192.168.X.0/24 подключать к порту X, и поскольку между коммутатором и сервером соединение работает в транковом режиме - рекомендуется сеть 192.168.X.0/24 класть во VLAN X. Это позволит заметно упростить управление системой.

К серверу мы ещё вернёмся, а сейчас вооружимся ноутбуком и приступим к настройке коммутатора.

По умолчанию на коммутаторе заведён только один влан - первый, все порты настроены в акцессном режиме и находятся в этом влане, этот же влан является управляющим, и коммутатор имеет в нём 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. Это иллюстрирует следующая картинка:

Настройки VLAN2

Следующим шагом нужно создать ещё 14 вланов (с 3 по 16) и связать их только(!) с первым портом. Настройки для каждого влана будут выглядеть примерно вот так:

Настройки VLAN

Закончив создание вланов "разложим" порты по ним. Третий порт - в третий влан, четвёртый порт - в четвёртый влан и т.д. Внимание! Порты нужно настраивать в акцессном режиме!

Далее перейдём на страницу «Скорость портов» и ограничим скорость для портов со второго по пятнадцатый до значения в 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". В веб-интерфейсе можно смотреть статистику по входящему и исходящему трафику на всех интерфейсах с детализацией по часам, дням и месяцам. Статистика будет отображаться в виде таблиц и графиков вроде этого:

График использования интерфейса по дням

На этом всё. Здесь показаны основные идеи, которые используются при организации доступа в интернет в бизнес-центре. Представленное здесь решение является одним из многих и никак не единственно верным. Возможно, кто-то из читателей сможет решить эту задачу по-другому.

Приятной работы!

P.S. Статья написана по просьбе «Алентис Электроникс» и так же опубликована на сайте компании.

P.P.S. Отдельное спасибо Фроловой Марии за корректировку статьи.

Ключевые слова: 802.1Q switch ubuntu vnstat vlan iptables

Версия для печати

Возможно вас заинтересуют следующие товары:


Комментарии:

Анонимный посетитель 2009-08-24 23:53:14 (*)

Ещё можно добавить dhcp

[Ответить]


Анонимный посетитель 2009-08-25 00:15:03 (*)

неплохо! Достаточно подробно и интересно.
Спасибо

[Ответить]


Анонимный посетитель 2009-08-25 00:48:25 (*)

возражаю!

аргументы:

1. нормальный сервер для обслуживания ну никак не Celeron 1400,и стоит по другому.
сколько будет стоить день простоя (из-за сдохнувшего естественной смертью по старости блока питания) 15 портов для продавца трафика? а для арендаторов?

2.что будете делать, когда один из арендаторов увидев счет на 30 000 рублей скажет "а я не качал!!!"
и откажется платить?
вы никому не докажете свои цифры.
нет и в помине сертифицированной биллинговой системы,
т.е. любой юридически подкованный арендатор вас просто
пошлет ( и будет прав) ибо даже в суде вы не докажите...


3. описанная схема не защищена от того, что любой
из 15 арендаторов зарядив в флашгет скачку файла 10 стволами не забьет весь канал для 14 остальных.

вообщем не страдайте ерундой, пробрасывайте PPPoE бриджом до uplink'a провайдера и пусть каждый работает по собственному договору.

а если уж так хочется срубить бабла- назовите это "аренда порта" и берите за это деньги.

поверьте- ваша схема просто лишнее звено в цепочке предоставления услуг, лишь понижающая надежность.


ps: тем не менее статья, с точки зрения изучения линусков вполне вменяемая :)

[Ответить]


MooSE 2009-08-25 01:21:21 (*)

Цитата:

2.что будете делать, когда один из арендаторов увидев счет на 30 000 рублей скажет "а я не качал!!!"

Слышь, земляк (по IP вижу что из одного города), там в самом начале сказано что канал у нас безлимитиный:)


Цитата:

3. описанная схема не защищена от того, что любой
из 15 арендаторов зарядив в флашгет скачку файла 10 стволами не забьет весь канал для 14 остальных.


Специально на этот случай мы ограничваем скорость на портах коммутатора.

[Ответить]


Анонимный посетитель 2009-08-25 07:57:28 (*)


>>1. нормальный сервер для обслуживания ну никак не Celeron 1400,и стоит по другому.
сколько будет стоить день простоя (из-за сдохнувшего естественной смертью по старости блока питания) 15 портов для продавца трафика? а для арендаторов?

Внутри Cisco ASA 55X0 стоят камни от Celeron 1600 в модели 5510 до Pentium 4 2000 в 5550. Софт версии 8.x.x сделан на базе Linux (до недавнего времени там было 2.6.17.6).

>> Специально на этот случай мы ограничваем скорость на портах коммутатора.

А вот и зря, на коммутаторах QoS реализуется очень топорно и нужен скорее для защиты от DoS шлюза со стороны клиента.

[Ответить]


Анонимный посетитель 2009-08-25 08:55:35 (*)

А зачем сервер? Что нет нормального комутатора который сам все может? Да и в принципе, почему Cisco не поставить и уже рулить как надо?
С точки зрения Linux статья действительно полезная... Схема спорная. Тут соглашуь в сторону сертифицированной биллинговой ситемы :)
Из личного опыта, провайдер ворует и на сертифицированном биленге ;))) И клиенты умудряются оспаривать!

[Ответить]


MooSE 2009-08-25 10:14:43 (*)

Да что вы все в трафик упёрлись? Здесь рассматривается случай с безлимитным доступом в сеть.

[Ответить]


Анонимный посетитель 2009-08-25 10:27:56 (*)

нормальное недорогое решение получилось

[Ответить]


Анонимный посетитель 2009-08-25 12:07:59 (*)

>нет и в помине сертифицированной биллинговой системы,
>т.е. любой юридически подкованный арендатор вас просто
>пошлет ( и будет прав) ибо даже в суде вы не докажите...

Зато довольно много орущих бездарей... Соответствующие сертификаты имеются для многих решений. Ниже привожу пример. Будете орать, что на венде? ;-)

http://www.smart-soft.ru/?page=sert

[Ответить]


Анонимный посетитель 2009-08-25 13:49:36 (*)

Stania poleznaia, i dostatochno polnaia! Spasibo! xotelos bi tolko uznat skolko stoit cisco 3560 naprimer s rossii i stoit li delat vsio eto esli zena etoto switch-a budet v predelat 500 evro , v ebay mozno kupit podderzani za 700 evro

[Ответить]


Анонимный посетитель 2009-08-26 15:53:27 (*)

То же самое реализовал на фре+pf+3com4200 год назад. Работает как часы. Кстати привет Вадим, это Шигорь )))

[Ответить]


MooSE 2009-08-26 17:35:01 (*)

Цитата:

стати привет Вадим, это Шигорь )))


гы:) везде свои люди... :)

[Ответить]


Анонимный посетитель 2009-09-08 17:00:56 (*)

А что делать, если от арендатора (или из интернет) придет пакет размером 1500 байт (стандартное значение MTU), а на сервер этот же пакет попадет уже размером +4 байта (тегирование VLAN), т.е. размером 1504 байт?

[Ответить]


MooSE 2009-09-08 17:41:29 (*)

Цитата:


А что делать, если от арендатора (или из интернет) придет пакет размером 1500 байт (стандартное значение MTU), а на сервер этот же пакет попадет уже размером +4 байта (тегирование VLAN), т.е. размером 1504 байт?


ты сталкивался с такими проблемами?

[Ответить]


Анонимный посетитель 2009-09-23 23:06:08 (*)

$ cat /etc/modules

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

fuse
lp
8021q
$ dmesg | grep VLAN
Цитата
[ 53.743602] 802.1Q VLAN Support v1.8 Ben Greear <greearb@candelatech.com>

да и если у провайдера ststic ip, не имеет ли смысл использовать SNAT?

А что делать, если от арендатора (или из интернет) придет пакет размером 1500 байт (стандартное значение MTU), а на сервер этот же пакет попадет уже размером +4 байта (тегирование VLAN), т.е. размером 1504 байт?
некоторые сетевушки могут работать с MTU > 1500, по слухам

iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
??

[Ответить]


Содержание*:
=

При копировании материалов с этого сайта ссылка на источник обязательна! Уважайте труд авторов!


Если материалы с этого сайта оказались вам полезны - Вы можете поддержать этот проект переведя на его счёт любую сумму, какую сочтёте нужным.

рублей


Обратная связь


© 2006-2010 Вадим Калинников aka MooSE