Сеть на DHCP Option82 – это просто

В данной статье речь пойдет о построении сети с использованием технологии подключения пользователей, известной как IPoE с использованием динамической выдачи адресов по протоколу DHCP с использованием опции 82.

Итак нашей задачей является построить сеть в которой от пользователя требуется минимум действий для авторизации и работы в сети. Можно даже назвать это как: «воткнул кабель в компьютер, и заработало».

В качестве биллинговой системы мы будем использовать бесплатную (до 200 абонентов) сертифицированную АСР Felix2. В качестве DHCP сервера будем использовать ISC DHCP сервер.

Общая схема работы






Когда пользователь включает компьютер, операционная система отправляет DHCP запрос на получение IP адреса в сеть. На коммутаторе включено перенаправление DHCP запросов (DHCP Relay) и включена поддержка опции 82 протокола DHCP, поэтому он перехватывает DHCP запрос от пользователя, добавляет данные Option82 (Agent Circuit ID и Agent Remote ID) к DHCP пакету и перенаправляет запрос на DHCP сервер.

Когда DHCP запрос попадает на DHCP сервер, тот выдает IP-адрес основываясь на данных текущей конфигурации. В конфигурации задано соответствие IP-адреса, выдаваемого пользователю, IP-адресу и порту коммутатора к которому подключен пользователь. Конфигурация DHCP сервера формируется АСР Felix2 по имеющейся в базе данных информации.

АСР Felix2 периодически забирает от DHCP сервера данные о MAC адресах пользователей (которым были выданы IP-адреса) на портах коммутаторов. По IP-адресу и номеру порта коммутатора система находит пользователя в базе и отмечает, что MAC адрес принадлежит этому пользователю.

Также АСР Felix2 периодически забирает ARP таблицу с маршрутизатора (таблица соответствий IP — MAC) и, если пара IP-MAC соответствует пользователю в базе, данный пользователь считается авторизованным. Как только пара IP-MAC пропадает (пользователь выключает компьютер) система переводит пользователя в список неавторизованных (выполнив перед этим проверку, что оборудование абонента действительно выключено).
 
 
 
 

Практическая реализация


Для начала нам потребуется компьютер с двумя сетевыми картами и любой коммутатор, поддерживающий DHCP Relay (option 82). Первую (тестовую) сеть будем строить по следующей схеме:



В данной схеме система на АСР Felix2 будет выполнять дополнительно функцию маршрутизатора.
 
 
 
 

Установка


Скачаем (felix2.ru/download) и установим любым из описанных способов на сервер АСР Felix2.
В данной статье мы будем использовать «Установочный диск АСР Felix2». Подробная инструкция по установке АСР Felix2 находится здесь: felix2.ru/documentation
После установки входим в систему, используя логин root и пароль, указанный во время установки.
Сетевой интерфейс eth0 после установки сконфигурирован для работы с внутренней сетью:

IP-адрес: 10.1.1.1
Маска подсети: 255.255.255.0


Интерфейс eth1 нужно настроить для работы с вышестоящим Интернет провайдером:

ifconfig eth1 1.1.1.2 netmask 255.255.255.0
route add default gw 1.1.1.1


Здесь 1.1.1.2 — IP-адрес выданный нам вышестоящим Интернет провайдером, 1.1.1.1 – IP-адрес шлюза провайдера.
Чтобы конфигурация сети не сбросилась после перезагрузки, ее нужно описать в файле /etc/network/interfaces

Установим ISC-DHCP сервер:

apt-get update
apt-get install isc-dhcp-server


Сразу после установки DHCP сервер не запустится, так он еще не сконфигурирован:

root@felix2:~# cat /var/log/syslog | grep dhcp | tail -n 10
May 8 21:48:33 felix2 dhcpd: 
May 8 21:48:33 felix2 dhcpd: 
May 8 21:48:33 felix2 dhcpd: No subnet declaration for eth0 (10.1.1.1).
May 8 21:48:33 felix2 dhcpd: ** Ignoring requests on eth0.  If this is not what
May 8 21:48:33 felix2 dhcpd:    you want, please write a subnet declaration
May 8 21:48:33 felix2 dhcpd:    in your dhcpd.conf file for the network segment
May 8 21:48:33 felix2 dhcpd:    to which interface eth0 is attached. **
May 8 21:48:33 felix2 dhcpd: 
May 8 21:48:33 felix2 dhcpd: 
May 8 21:48:33 felix2 dhcpd: Not configured to listen on any interfaces!


 
 
 
 

Конфигурирование


Файл шаблона конфигурации ISC DHCP сервера (dhcp_opt82_ip-port.conf) и все остальные необходимые конфигурационные файлы можно скачать отсюда:
ftp://download.felix2.ru/config.examples/felix2_dhcp_opt82.tar.gz

Скачиваем, распаковываем, заменяем конфигурационные файлы:

wget ftp://download.felix2.ru/config.examples/felix2_dhcp_opt82.tar.gz
tar -xf felix2_dhcp_opt82.tar.gz -C /etc/felix2/


Перезапускаем АСР Felix2:

/etc/init.d/felix2 restart


 
 
 
 

Создание оборудования и тестового пользователя в АСР Felix2


Зайдем в веб-интерфейс администратора. Можно для этого использовать тестовую машину, временно поставив на ней статический IP-адрес (например 10.1.1.10/24). Веб интерфейс администратора доступен на 444 порту по протоколу HTTPS. Логин/пароль по умолчанию: su/su.



Чтобы появились дополнительные поля в интерфейсе, укажем в настройках интерфейса (Конфигурация -> Настройки интерфейса) что используется схема выдачи адресов DHCP-Opt82:



Теперь добавим наш коммутатор в базу оборудования (Оборудование -> Новое оборудование):
Статус: Установлено, IP-адрес: 10.1.1.253, Модель: DES-3200-28, и нажмем «Добавить».



Создаем нового пользователя (Пользователи -> Новый пользователь). Выбираем адрес подключения. Система автоматически предложит подсеть, используемую в данном доме и выберет первый свободный IP-адрес.

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

Указываем что пользователь будет подключен к первому порту коммутатора. Отмечаем флаг «Подключение выполнено» и нажимаем «Добавить».



После этого пополняем счет (Пополнения счета -> Новое пополнение), активируем тарифный план (Платежи -> Платеж по тарифу). Посмотреть текущее состояние пользователя можно в (Пользователи -> Личная статистика).

Проверим, что конфигурационный файл DHCP сервера обновился:

cat /etc/dhcp/dhcpd.conf


Проверим, что DHCP сервер работает:

ps ax | grep dhcpd


 
 
 
 

Настройка коммутатора


Теперь нужно настроить коммутатор. Если коммутатор «из коробки», в инструкции должен быть указан IP-адрес «по умолчанию». Если оборудование «б/у», и вы не знаете какой у него IP-адрес/логин/пароль, нужно сбросить конфигурацию через консольное подключение.

В данной статье мы будем использовать коммутатор DES-3200-28 «из коробки».

Ставим на тестовой машине статический IP-адрес (например 10.90.90.1/8) Подключаемся к коммутатору по протоколу telnet:



Включаем, настраиваем DHCP Relay:

enable dhcp_relay
config dhcp_relay hops 16 time 0
config dhcp_relay option_82 state enable
config dhcp_relay option_82 check disable
config dhcp_relay option_82 policy replace
config dhcp_relay option_82 remote_id default
config dhcp_relay add ipif System 10.1.1.1


Теперь коммутатор будет перехватывать DHCP запросы, добавлять идентификационную информацию (option 82) и отправлять на DHCP сервер (10.1.1.1)
Задаем маршрут «по умолчанию» и новый IP-адрес коммутатора:

create iproute default 10.1.1.1
config ipif System vlan default ipaddress 10.1.1.253/24 state enable


После последней команды (смена IP-адреса) соединение будет разорвано. Ставим на тестовой машине статический IP-адрес (например 10.1.1.10/24) Подключаемся к коммутатору по новому адресу, сохраняем конфигурацию:

save


Включаем на тестовом компьютере получение сетевых настроек по DHCP.
Подключаем тестовый компьютер в первый порт коммутатора. Проверяем что DHCP-Relay пакеты от коммутатора доходят до сервера и клиент получает IP-адрес:

tail –n 1000 /var/log/syslog | grep dhcpd




Проверяем, что данные пользователя правильно отображаются в интерфейсе АСР Felix2.



 
 
 
 

Реальная схема сети


Рассмотренная выше схема сети была тестовой (в один коммутатор много пользователей не подключишь). Ниже приведен пример реальной схемы сети (не более ~600 абонентов). Аплинк от магистрального провайдера приходит в оптический порт коммутатора. Этот порт нужно объединить в VLAN с портом, куда подключается сетевая карта eth1 от сервера с АСР Felix2.

Например, объединяем 1 и 24 порт в 1000й VLAN:

create vlan v1000 tag 1000
config vlan v1000 add untagged 1,24




При росте сети также желательно разнести дома по отдельным VLAN.

 
 
 
 

Схема сети с выделенным маршрутизатором


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

Также нужно указать АСР Felix2 получать ARP таблицу с внешнего маршрутизатора. Отредактируем файл /etc/felix2/felix2.xml:

<arp_fetcher>
    <connection name="DGS-3627G" address="10.1.1.1" port="22" 
        protocol="ssh" login="admin" passwd="12345" interface="DLINK" />
</arp_fetcher>


Модуль arp_fetcher может получать таблицу ARP адресов с оборудования CISCO (interface=«CISCO»), D-Link (interface=«DLINK»), или с программного маршрутизатора на базе Linux (interface=«Linux»).



 
 
 
 

По просьбе хабражителей добавлен пример сгенерированного системой конфигурационного файла для ISC DHCP сервера.
В данном примере пользователям, подключенным в порты 1-3 коммутатора с адресом 10.1.1.253, выдаются адреса 10.1.1.2-10.1.1.4 соответственно.

 
 

#
# Automatically generated configuration file
# Filename: dhcpd.conf (/etc/dhcp/dhcpd.conf)
# Generator: Felix2
# Creation Date: 15.05.2012 11:31:36
#

#
# option definitions common to all supported networks...
#

authoritative;

default-lease-time 86400;
max-lease-time 86400;
ddns-update-style none;


log-facility local7;


if exists agent.remote-id and exists agent.circuit-id
{
    if binary-to-ascii(16, 8, "", substring(option agent.remote-id, 2, 1)) = "0" {
        set switch-mac = concat("0", binary-to-ascii(16, 8, "", substring(option agent.remote-id, 2, 1)), ":", binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 3, 6)));
    } else {
        set switch-mac = binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 2, 6));
    }
    set switch-addr = binary-to-ascii(10, 8, ".", packet(24, 4));
    set switch-port = binary-to-ascii(10, 8, "", substring(option agent.circuit-id, 5, 1));
    set switch-port-vlan = binary-to-ascii(10, 8, "", substring(option agent.circuit-id, 2, 2));
    log(info, concat("- Lease: ", binary-to-ascii(10, 8, ".", leased-address), " via IP: ", switch-addr, " (MAC: ", switch-mac, ") on port: ", switch-port, " in VLAN: ", switch-port-vlan));
}

#
# subnets
#


subnet 10.1.1.0 netmask 255.255.255.0 {
	option routers 10.1.1.1;
	option domain-name-servers 10.1.1.1;

	class "1:1" {match if binary-to-ascii(10, 8, ".", packet(24, 4))="10.1.1.253" and binary-to-ascii(10, 8, "", suffix(option agent.circuit-id, 1)) = "1";}
	pool {range 10.1.1.2; allow members of "1:1";}

	class "1:2" {match if binary-to-ascii(10, 8, ".", packet(24, 4))="10.1.1.253" and binary-to-ascii(10, 8, "", suffix(option agent.circuit-id, 1)) = "2";}
	pool {range 10.1.1.3; allow members of "1:2";}

	class "1:3" {match if binary-to-ascii(10, 8, ".", packet(24, 4))="10.1.1.253" and binary-to-ascii(10, 8, "", suffix(option agent.circuit-id, 1)) = "3";}
	pool {range 10.1.1.4; allow members of "1:3";}



}



Поделиться публикацией

Похожие публикации

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

    0
    Если возникли вопросы с установкой/конфигурацией, пишите в комментариях, постараюсь помочь.
      –1
      Лучше расскажите как реализовать аналогичную систему с серьезным биллингом и сетевым оборудованием Cisco (ядро сети). А где netflow-коллектор? Storm контроль настраивали? Port-security? ACL-листы, блокирующие мак-адреса маршрутизатора? DNS используете вышестоящего провайдера? BGP даже не используете?
        0
        В данной статье объясняется принцип работы такой схемы на простом примере. Настройка BGP или DNS, согласитесь, совсем другая тема.
          +1
          Тогда и биллинг тут не в кассу. Можно было просто показать, как должен выглядить конфиг DHCP, сгенерированный биллингом.
            0
            Кстати да, можно ли добавить в статью сгенерированный для DHCP сервера конфиг?
              0
              добавил
                0
                Спасибо. Мне как раз в тему. :-)
              0
              Да конечно, в следующий раз так и сделаю, статья будет состоять только из одного конфига. Думаю всем очень понравится.
                +1
                Статья PR биллинга — все в кассу ;)
            +1
            PR felix?
              0
              Пользуясь возможностью задам вопрос. Посоветуйте систему «раздачи интернета» для предприятия. Необходимые возможности:
              — OpenSource
              — Работать должна под *nix
              — Шейпинг + очереди с приоритетами
              — Ограничения пользователя по времени
              — Возможность блокировать/разрешать только определенные сервисы (например доступ только к http и ftp)
              — Авторизация через WinAD
              — Http прокси и возможность просмотра посещаемых сайтов, статистика с диаграммами.
              — Черные и белые списки сайтов
              — Сбор статистики по трафику (например Netflow)
              — Работа с IPv6
              — GUI для админа

              Рассматривал abills. Что-то не очень понравилось. Пришлось даже писать свой велосипед, работает к стати сказать стабильно уже 1,5 года. Сейчас стою на пути выбора допилить свое до ipv6, WinAD и Netflow или взять готовое. Виндовые и платные гейты не предлагать, стоял traffic inspector — не понравился.
                0
                Анализируя список, так и хочется сказать: «Из 11 параметров Вы можете выбрать любые 8».

                Практически все реализуемо с помощью прокси сервера Squid с обвязками (Rejik+SAMS+AD, можно даже антивирус добавить и еще что-то). Для шейпинга — pf с очередями.

                В вашем списке режет глаз Netflow. Как-то это требование не вяжется со всеми остальными. Скажу так, более-менее нормальных реализаций бесплатных Netflow коллекторов под *nix я не встречал. Есть крутые — но очень платные, или «как-бы» бесплатные. Зачем вам вообще в этой реализации Netflow?
                  0
                  Свой велосипед точно придется строить. Уж больно у Вас комбайн серьезный нужен. Тем более и с ipv6, и с netflow.

                  Что-то мне даже посказывает, что затраты на разработку этого решения (Вы же говорите о законченном решении, с GUI и красивой отчетностью, а не о наборе скриптов, в которых разбирается только автор) могут оказаться столько немалыми, что платное решение может показаться и не сильно непривлекательным.
                    0
                    Видимо придется допиливать свой велосипед. Т.к. во времени я не сильно ограничен. А финансы сильно ограничены. Тот же Traffic Inspector на 100 лицензий стоит 30т.р. + стоимость Win2k3 или Win2008
                      0
                      Ну, все равно время — деньги, даже по самым скромным прикидкам разработка подобной системы компании обойдется в довольно заметную сумму, уж никак не меньше TI, другой вопрос, TI ли подойдет…

                      Будете писать — зовите в компанию, постараюсь помочь именно комплексное решение сделать.
                  0
                  А как в такой схеме настраивается ограничение полосы (bandwidth_control в терминологии D-Link)?
                    0
                    Если вы имеете ввиду ограничение полосы пропускания для конечного пользователя, то это настраивается путем прописывания нужных циферок в параметрах услуги «Доступ в Интернет», которую потом включаем в состав тарифного плана.
                    0
                    Плохо завуалированная реклама Феликса
                      0
                      АСР Felix2 периодически забирает от DHCP сервера данные о MAC адресах пользователей

                      вот про это было бы ещё интересно узнать. каким образом реализовано?

                      и ещё, раз уж тут реклама феликса, то конфигурацию dhcp проще генерировать в ldap базу, а не текстовый конфиг: демона перезапускать не надо, для генератора это гораздо проще, и решается проблема с перетаскиванием конфига между разными серверами, если биллинг и dhcp на разных банках.

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                      Самое читаемое