Это старая версия документа.


Dhcphosts

Модуль управления DHCP сервером и ведения статических адресов абонентов
Модуль автоматически создаёт конфигурационный файл для DHCP сервера и вносит в него всех пользователей системы, в которых активизирован сервис DHCP.

Возможности

  • Автоматическое создание конфигурационного файла ISC DHCP
  • Привязка IP к MAC
  • Передача пользователям дополнительных маршрутов
  • Система гостевого входа
  • Option 82 (Vlan, PORT, Switch IP, Client MAC)
  • static arp, ipguard (FreeBSD), ipsentinel (Linux)
  • Управление DHCP на удалённом сервере
  • Мониторинг выданных адресов
  • Использование нескольких серверов доступа
  • Гостевой вход
  • Авто активация и включение активных абонентов (при использовании вместе с модулем Ipn)

Установка

Создать таблицы в базе.

# mysql --default-character-set=utf8 -D abills < db/Dhcphosts.sql

Подключение модуля. abills/libexec/config.pl

@MODULES = (
          'Dhcphosts'
          );

Настройка ISC DHCP


Настройка ISC DHCP

Проверка работоспособности

Сообщения

Jan 19 17:12:28 null dhcpd: DHCPDISCOVER from 00:07:e9:19:72:1b via fxp0: network ne3: no free leases

Пользователь не может авторизироваться, так как его MAC не в базе.

Jan 19 18:08:19 null dhcpd: DHCPDISCOVER from 00:07:e9:19:72:1b via fxp0
Jan 19 18:08:19 null dhcpd: DHCPOFFER on 10.128.10.10 to 00:07:e9:19:72:1b via fxp0
Jan 19 18:08:19 null dhcpd: DHCPREQUEST for 10.128.10.10 (10.128.0.1) from 00:07:e9:19:72:1b via fxp0
Jan 19 18:08:19 null dhcpd: DHCPACK on 10.128.10.10 to 00:07:e9:19:72:1b via fxp0

Пользователь успешно подключился

Ведение лога в базе данных (DHCP История)

# ln -s /usr/abills/Abills/modules/Dhcphosts/dhcp_log2db.pl /usr/abills/libexec/dhcp_log2db.pl

FreeBSD:
правим /etc/syslog.conf

если есть

!dhcpd
*.* /var/log/dhcpd.log

то удаляем и вставляем

!dhcpd
*.*   |/usr/abills/libexec/dhcp_log2db.pl

Linux:
/etc/rc.local

tail -F /var/log/dhcpd.log | /usr/abills/libexec/dhcp_log2db.pl
# cd /usr/abills/libexec/
# ln -s ../Abills/modules/Dhcphosts/dhcp_log2db.pl
# killall -1 syslogd

sudo

sudo будет использоваться для переконфигурации сервера.

# cd /usr/ports/security/sudo && make && make install && make clean

Прописываем возможность запуска сервиса системой. /usr/local/etc/sudoers

# Для FreeBSD: 
#Allow dhcpd operation without password for webserver user
www   ALL = NOPASSWD: /usr/local/etc/rc.d/isc-dhcpd

Option 82

При использовании Options 82 коммутаторы заводятся в системе как сервера доступа (NAS).
/ Система/ Сервер доступа/
Необходимые параметры:

  • IP адрес. Если у коммутатора нет IP адреса можно использовать несуществующий так как он не принимает участия в авторизации
  • Название
  • Тип сервера доступа

other

  • указать MAC адрес коммутатора в настройках NAS.

дополнительные настройки
Запросе IP адреса система по умолчанию проверяет следующие параметры:

  • MAC коммутатора
  • Порт коммутатора
  • Vlan клиента
  • MAC клиента если включена опция $conf{DHCPHOSTS_O82_USE_MAC}=1;

если параметр не прописан в билинге он игнорируется и по нему проверка не происходит

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

Deny unknown clients:	
Server is authoritative for this shared network:	

Для использования индивидуальных настроек классов авторизации пользуйтесь шаблоном (Правку шаблона осуществлять только через / Система/ Другое/ Шаблоны ). Система использует данный шаблон только при включённой опции $conf{DHCPHOSTS_O82_CLASS_TPL}=1;

dhcphosts_dhcp_conf_o82_class.tpl

Если используются коммутаторы с разными параметрами Option 82 нужно создать несколько правил авторизации разделив их параметром or
Пример:

Dhcphosts_dhcphosts_dhcp_conf_o82_class.tpl

# LOGIN: %LOGIN%
class \"%OPTION82_NAS_NAME%-%OPTION82_NAS_MAC%-port-%OPTION82_NAS_PORT%\" { match if (substring(option agent.circuit-id, 24, 14) = \"%OPTION82_NAS_MAC%\" 
     and substring(option agent.circuit-id, 39, 5) = \"%OPTION82_NAS_PORT%\" 
     and  substring(option agent.circuit-id, 57, 3) = \"%CLIENT_VLAN%\")  
  or ( substring(option agent.circuit-id, 54, 2)=\"%CLIENT_VLAN%\" 
     and substring(option agent.circuit-id, 48, 5) = \"%OPTION82_NAS_PORT%\" 
     and substring(option agent.circuit-id, 35, 12) = ucase(\"%OPTION82_NAS_MAC%\"));
 }

Структура шаблона конфигурации dhcpd.conf

Dhcphosts_dhcphosts_dhcp_conf_main.tpl главный конфигурационный файл в него вносятся все общие данные

а также 3 секции

  1. %OPTION82_CLASS% - секция выражений Options 82 (dhcphosts_dhcp_conf_o82_class.tpl)
  2. %NETWORKS% - Секция DHCP сетей (dhcphosts_dhcp_conf_subnet.tpl)
  3. %HOSTS% - секция статических хостов (dhcphosts_dhcp_conf_host.tpl)

Примеры шаблонов авторизации

Для foxgate-s-6224-s2

# LOGIN: %LOGIN%
class "%OPTION82_NAS_NAME%-%OPTION82_NAS_MAC%-port-%OPTION82_NAS_PORT%" {        match if option agent.circuit-id="Vlan%CLIENT_VLAN%+Ethernet0/0/%OPTION82_NAS_PORT%" and option agent.remote-id="%OPTION82_NAS_MAC%";
}

Лог

Если все правильно настроено в логе DHCP сервера Вы должны видеть следующие сообщения: /var/log/dhcpd.log

Oct 19 18:26:36 billing dhcpd: DHCPDISCOVER from 00:13:77:34:5f:a8 via vlan3
Oct 19 18:26:37 billing dhcpd: DHCPOFFER on 172.23.1.55 to 00:13:77:34:5f:a8 (Druid) via vlan3
Oct 19 18:26:40 billing dhcpd: Lease for 172.23.1.55 is connected to interface 0/3 (add 1 to port number!), VLAN  on switch 1:32
Oct 19 18:26:40 billing dhcpd: Lease for 172.23.1.55 raw option-82 info is CID: 0.3 AID: ac.17.1.32
Oct 19 18:26:40 billing dhcpd: DHCPDISCOVER from 00:13:77:34:5f:a8 (Druid) via vlan3

Ошибки ISC-DHCP

Ошибки которые отображаются в файле /var/log/dhcpd.log

  • Все сделал DHCP стартовал но не раздаёт адреса.

Скорее всего у Вас не одна из сетей не настроена слушать запросы на Ваших интерфейсах.

Алгоритм поиска ошибок: 1. перезапустить isc-dhcp (проверить слушает ли на каком-нибудь интерфейсе)

# service isc-dhcp restart

Ошибка:

No subnet declaration for em1 (no IPv4 addresses).
** Ignoring requests on em1.  If this is not what
you want, please write a subnet declaration
in your dhcpd.conf file for the network segment
to which interface em1 is attached. **
  • Не прописаны подсети для клиентов. Писать в '/usr/local/etc/dhcpd.conf'
  • Проверить прописан ли IP (alias) для указаного интерфейса в указаной подсети.

2. проверить лог '/var/log/dhcpd.log' (или log.messages)

3. Сделать дамп интерфейса:

tcp-dump port 67
tcpdump -i ВАШ_ИНТЕРФЕЙС -n port 67
  • Пересечение адресов
/usr/local/etc/dhcpd.conf line 142: lease 10.133.3.26 is declared twice!
pool { range 10.133.3.26;
                        ^

Проверте не пересекаются ли у Вас ренжи (rage) выдаваемых адресов

IP guard

Дополнительное расширение для модуля Dhcphosts позволяет управлять самостоятельным присвоением IP-адресов пользователями. Сиcтема автоматически формирует список IP/MAC-адресов, с которых и которым можно работать в сети. Все остальные пользователи при подключении к сети получают сообщение, что их сетевой адрес уже используется другим устройством. Список ограничения доступа пере создаётся после изменения данных абонентов и ночным периодиком.

config.pl

$conf{DHCPHOSTS_IPGUARD_FORMAT}=«MAC»; Формат пар для FreeBSD ipguard
MAC - контролировать только MAC
MAC/IP контролировать MAC и IP-связки
$conf{DHCPHOSTS_IPGUARD_DENY_TPL}=«»; Формат записи запрещено для файла конфигурационного ipguard.
Переменные
%IP% - IP адрес
%MAC% - MAC адрес
%LOGIN% - Логин
%DEPOSIT% - Депозит. Появляется только при влючённой опции $conf{DHCPHOSTS_DEPOSITCHECK}
%UID% - ID-пользователя
%EXPIRE% - Дате истечения аккаунта

Примеры:
Linux ipsentinel:
$conf{DHCPHOSTS_IPGUARD_DENY_TPL}='%IP% %MAC% # %LOGIN%; %STATUS%; %DEPOSIT%';
FreeBSD ipguard:
$conf{DHCPHOSTS_IPGUARD_DENY_TPL}=«»;
$conf{DHCPHOSTS_IPGUARD_ACCEPT_TPL}=«»; Формат записи разрешено для файла конфигурационного ipguard.
Примеры:
Linux ipsentinel:
$conf{DHCPHOSTS_IPGUARD_ACCEPT_TPL}='%IP%@!%MAC% # %LOGIN%; %STATUS%; %DEPOSIT%';
FreeBSD ipguard:
$conf{DHCPHOSTS_IPGUARD_ACCEPT_TPL}='%MAC% %IP% # %LOGIN%; %STATUS%; %DEPOSIT%';

Для внесение статических записей / System configuration/ DHCP Networks/ IP guard/ Static/. Правила, тут объявленные, появляются в конце списка общих правил.

FreeBSD

Для ОС FreeBSD программа IP Guard. На базе этой программы и производится контроль.

# cd /usr/ports/security/ipguard && make && make install && make clean
# cp  /usr/local/etc/rc.d/ipguard.sh.sample /usr/local/etc/rc.d/ipguard.sh
# chmod +x /usr/local/etc/rc.d/ipguard.sh

вносим изменения в файлы /usr/local/etc/rc.d/ipguard.sh

iface=fxp1
daemon_flags="-n 2 -u 60 -x -f /usr/abills/var/ipguard"

Запускаем

# /usr/local/etc/rc.d/ipguard.sh start

Для просмотра MAC/IP-пар, которые попали в список разрешённых, нужно открыть меню системы

/ System configuration/ DHCP Networks/ IP guard/

Вид для $conf{DHCPHOSTS_IPGUARD_FORMAT}=«MAC»;

00:07:e9:19:72:1b 0.0.0.0 # Login: aa1
00:07:e9:19:72:12 0.0.0.0 # Login: aa1
00:07:e9:19:72:22 0.0.0.0 # Login: aa1

Вид для $conf{DHCPHOSTS_IPGUARD_FORMAT}=«MAC/IP»;

00:07:e9:19:72:1b 10.128.10.10 # Login: aa1
00:07:e9:19:72:12 10.128.10.11 # Login: aa1
00:07:e9:19:72:22 10.128.10.15 # Login: aa1

Linux

Для ОС Linux программа ipsentinel

Вид:

10.128.0.109@!00:00:00:00:11:00 # aa1 ACCEPT
10.11.11.12@!00:00:00:ee:aa:01 # aa1 ACCEPT
10.0.0.10 00:16:36:a1:6d:75 # aa1 DENY

ARP Static

Занесение статических записей в ARP таблицу

abills/libexec/config.pl

$conf{DHCPHOSTS_IPGUARD_FORMAT}="MAC/IP";
$conf{DHCPHOSTS_RECONFIGURE}="/usr/local/bin/sudo /usr/local/etc/rc.d/isc-dhcpd restart; ".
 '/bin/cat /usr/abills/var/ipguard | /usr/bin/awk \'$1 !~ /#/ { print $2 " " $1 } \' > /usr/abills/var/arp_static ;'.
 ' /usr/local/bin/sudo /usr/sbin/arp -ad ;'.
 ' /usr/local/bin/sudo /usr/sbin/arp -f /usr/abills/var/arp_static ';

/usr/local/etc/sudoers

www   ALL = NOPASSWD: /usr/sbin/arp

Пример управления удалённым сервером доступа

  • Создание dhcp конфигурационного файла на удалённом NAS.
  • Переконфигурация DHPC-сервера.
  • Создание статической ARP таблицы
$conf{DHCPHOSTS_RECONFIGURE}='/usr/bin/scp -o StrictHostKeyChecking=no -i /usr/abills/Certs/id_dsa.abills_admin '.
  '/usr/local/etc/dhcpd.conf '.
  'abills_admin\@10.10.20.16:/usr/local/etc/dhcpd.conf; '.
'/usr/bin/scp -o StrictHostKeyChecking=no -i /usr/abills/Certs/id_dsa.abills_admin /usr/abills/var/ipguard '.
  'abills_admin\@10.10.20.16:/usr/abills/var/ipguard; '.
'/usr/bin/ssh -o StrictHostKeyChecking=no -i /usr/abills/Certs/id_dsa.abills_admin abills_admin\@10.10.20.16 "/usr/local/bin/sudo /usr/local/etc/rc.d/isc-dhcpd restart;' .
'/bin/cat /usr/abills/var/ipguard | /usr/bin/awk \'\$1 !~ /#/ { print \$2 \" \" \$1 }\' > /usr/abills/var/arp_static ;'.
' /usr/local/bin/sudo /usr/sbin/arp -ad ;'.
' /usr/local/bin/sudo /usr/sbin/arp -f /usr/abills/var/arp_static "';


Загрузка ARP таблицу на Mikrotik

$conf{DHCPHOSTS_RECONFIGURE}='/bin/cat /usr/abills/var/ipguard | /usr/bin/awk \'\$1 !~ /#/ { print "/ip arp add address=" \$2 " mac-address=" \$1 " interface=Norq-ETH " } \' | /usr/bin/ssh -t -i /usr//abills/Certs/id_dsa.abills_admin abills_admin@10.0.0.3';

чтобы контролировать связки MAC/IP также нужно включить на интерфейса read-only в секции обучения мак адресов

Гостевой аккаунт

Гостевой аккаунт предполагает возможность зарегистрированным и авторизированным (имеющим право пользоваться сетью с учётом их депозита или других параметров) пользователям пользоваться сетью и получать свои статические IP-адреса, в тоже время незарегистрированные и неавторизированные пользователи попадают в гостевую сеть. В последующем нужно настроить гостевую сеть с ограниченным доступом (доступ только к пользовательскому порталу и т.д. ).

Для включения формы заполнения данных пользователем внесите в конфигурационный файл следующие опции.

$conf{DV_IP_DISCOVERY}=«1:129.168.0.0/24;NET_ID:ADDRESS_RANGE»; Регистрация IP/MAC адреса клиента для последующей выдачи статического адреса данному клиенту в сети. Система автоматически ищет следующий свободный адрес и присваивает его клиенту прописывая в таблице адресов DHCP.

NET_ID - в какую сеть регистрировать клиента.

ADDRESS_RANGE - диапазон адресов куда должен попадать незарегистрированный клиент. Если не указать эту опцию все клиенты попадают в общую сеть указанную в первом параметре. Шаблоны сравнения указываются через точку с запятой.
Настройка

/ System configuration/ DHCP Networks/ Создаются две сети для гостевого и для зарегистрированного доступа. В первой сети для гостевого доступа нужно указать рендж выдаваемых IP-адресов.

IP Range: Указываем IP, которые должны выдаваться в гостевом режиме

Dhcphosts. DHCP Guest Account

Для авторизированной сети этот параметр оставить пустым.

Dhcphosts. DHCP Auth Account

Шаблон описания зарегистрированного пользователя dhcphosts_dhcp_conf_host.tpl

# dhcphosts_dhcp_conf_host.tpl
# Login: %LOGIN%
host %HOSTNAME% {
  hardware ethernet %MAC%;
  fixed-address %IP%;
  option routers %ROUTERS%;
  %BOOT_FILE%
  option routers 10.100.20.1;
}

10.100.20.1 - шлюз для зарегистрированных/авторизированных пользователей

leases2db.pl

При использовании DHCP сервера на сервере отдельном от биллинга целесобразно использовать для синхронизации с биллингом и мониторинга - агент экспорта leases2db.pl, который занимается експортом данных из dhcpd.leases в базу данных биллинга.
Проверка и экспорт данных осуществляется через промежуток времени указанны при старте (по умолчанию каждые 20 секунд) при условии что за этот промежуток времени был изменён файл dhcpd.leases.
leases2db.pl должен быть запущен на сервер с DHCP сервером. Агент работает как демон и автоматически проверяет при старте присутствие дублирующих процессов.
Установка:

# cd /usr/abills/libexec/
# ln -s ../Abills/modules/Dhcphosts/leases2db.pl

Для старта используется команда

# /usr/abills/libexec/leases2db.pl -d LEASES=/var/db/dhcpd/dhcpd.leases

Стоп /usr/abills/libexec/leases2db.pl

# /usr/abills/libexec/leases2db.pl stop

Параметры:

-d Запустить как демон
-h помощь в использовании программы
LEASES=… путь к dhcpd.leases файлу
UPDATE_TIME=… Время обновления
DEBUG=… Режим отладки
NAS_ID= ИД сервера доступа (по умолчанию 0)

Для включения в мониторинге просмотра данной информации нужно указать опцию $conf{DHCPHOSTS_LEASES}='db';

ABillS

Файл конфигурации abills/libexec/config.pl

$conf{DHCPHOSTS_DEPOSITCHECK}=0.00; Указывается сумма на счёту при которой выдавать IP адрес пользователям.
$conf{DHCPHOSTS_EXT_DEPOSITCHECK}=0.00; Указывается сумма на дополнительном счёту при которой выдавать IP адрес пользователям. Данный параметр имеет больший приоритет чем $conf{DHCPHOSTS_DEPOSITCHECK}
$conf{DHCPHOSTS_CONFIG}='/usr/local/etc/dhcpd.conf'; Файл конфигурации для DHCP-сервера.
По умолчанию /usr/local/etc/dhcpd.conf.
Обязательно поставьте на файл права, с которыми работает WEB-сервер.
$conf{DHCPHOSTS_LEASES}='/var/db/dhcpd/dhcpd.leases'; Расположение dhcpd.leases файла для мониторинга выдачи IP адресов. В данный файл не попадают статически прописанные на MAC адрес адреса.
$conf{DHCPHOSTS_LOG_CLEAN_DAYS}=30; Период хранения логов в базе. По умолчанию 30
$conf{DHCPHOSTS_USE_DV_STATUS}=1; Использовать статусы сервиса Internet для модуля Dhcphosts. Статус модуля Dv используется если статус Dhcphosts включено
$conf{DHCPHOSTS_RECONFIGURE}='/usr/local/bin/sudo /usr/local/etc/rc.d/isc-dhcpd restart'; Команда для перезапуска DHCP-сервера. Так, как для запуска сетевого сервиса нужны права суперпользователя (по умолчанию root), система перезапускает демон, используя sudo.

Команда $conf{DHCPHOSTS_RECONFIGURE} также выполняется после изменения параметров учётной записи абонента. При изменении учётной записи абонента система передаёт команде следующие значения переменных щаблона (переменные шаблона должны экранироваться знаками процента с двух сторон %переменна%), а также эти значения устанавливают как переменные окружения .

UID
ID Номер записи DHCP
HOSTNAME
NETWORK
IP
BOOT_FILE
NEXT_SERVER
EXPIRE
DISABLE
COMMENTS
OPTION_82
PORTS
VID
NAS_ID

Пример
Локальный Linux (Ubuntu/Debian) сервер

  $conf{DHCPHOSTS_CONFIG}='/etc/dhcp/dhcpd.conf';
  $conf{DHCPHOSTS_LEASES}='db';
  $conf{DHCPHOSTS_RECONFIGURE}='/usr/bin/sudo /etc/init.d/isc-dhcp-server restart';

Сети

/ Настройка / IP (DHCP) Сети
Заведение сетей для DHCP-сервера. Есть возможность задавать статические маршруты, просматривать конфигурационный файл и перезагружать DHCP-сервер.

Network name: Название сети
Network address: Сетевой адрес.
(Например: 10.10.1.0)
NETMASK: Маска сети
Default router: Маршрут по умолчанию.
IP Range: Диапазон выдаваемых адресов.
Static: При включении данной опции ip адреса пула раздаются как статические при регистрации услуги в данной dhcp сети, если опции нету система автоматически подставляет в конфигурационный файл range xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx для данной сети
Запретить неизвесных клиентов: Не выдавать адреса незарегистрированным клиентам
Авторизованный сервер для данной зоны: параметр authoritative; (сморите man dhcpd.conf)
Coordinator: Координатор сети
Phone: Номер телефона координатора сети
DNS: DNS (Domain Name Server). Сервер доменных имён
DOMAINNAME: Домен по умолчанию
Disable: Отключить сеть
Guest VLAN: Гостевой влан для данной сети. Используется программой snmp_utills.pl для переноса должников в гостевой влан.

После изменения параметров сетей нужно перезапустить DHCP.


Также возможна переконфигурация через консоль

# /usr/abills/libexec/periodic daily MODULES=Dhcphosts   

Управление абонентами

Freeradius DHCP

Freeradius DHCP не может одновременно работать с isc-dhcp, по этому перед запуском Freeradius DHCP отключите isc dhcp, если он включён


Для более гибкой раздачи IP адресов был разработан новый механизм выдачи адресов используя функции DHCP FreeRadius. Преимущества модуля:

  • Работа в реальном времени, не нужны перезагрузки и формирования файлов конфигурации
  • Раздача динамических адресов Mikr
  • Отсутствие привязки к MAC адресу абонента
  • Авторизация учитывая параметры: коммутатор, порт, vlan. Параметры могут учитываться все или по отдельности в зависимости от их указания в профайле абонента
  • Ведение гостевой сети для не авторизированных абонентов и абонентов с отрицательным балансом
  • Авторегистрация новых абонентов
  • Специально разработанный шейпер для данного модуля (ipoe_shapper.pl - для шейпера используется механизм dummynet).
  • Работает со всем оборудованием которое поддерживает DHCP Option 82 (RFC 3046)

Как работает

  • для активных абонентов существуют пулы адресов из которых они выдаются, конечно если не прописан адрес на абонента статически (то есть прописано 0.0.0.0). Адреса выдаются с прикреплённых к серверу доступа пулов адресов.
  • для должников и незарегистрированных абонентов выдаются адреса из пулов гостевых IP
  • по окончанию периода оренды адреса адрес абонента считается свободным и может выдаваться другому абоненту
  • если абонент постоянно работает и по правилам DHCP через половину лиз периода отправляет пакет подтверждения то его сесия продолжается
  • под это все сделан шейпер который поднимает правила для активных абонентов, может поднимать на сервера FreeBSD, Linux, а также на коммутаторах и есть поддержка использовать независимые внешние программы для шейпера
  • конечно же поддержка Option 82 c возможностью задавать шаблоны распознавания параметров коммутаторов, так как не все производители оборудования придерживаются стандратов

Включение и настройка
config.pl Прописать ниже переменной %AUTH=();

$AUTH{dhcp}='Mac_auth';

Скопировать модуль каталог билинга

cp Mac_auth.pm /usr/abills/Abills/mysql/

по умолчанию система контролирует дублирование маков, чтобы это обойти нужно в ( Настройки / SQL Commander ) сделать

ALTER TABLE dhcphosts_hosts DROP KEY mac;
ALTER TABLE dhcphosts_hosts DROP KEY ip;

настройка радиус
Скопировать файл конфигурации в конфигурационный каталог /usr/local/etc/

#  cp /usr/abills/misc/freeradius/v2/dhcp.conf raddb/sites-enabled/

Убедитесь то в raddb/dictionary подключён модуль dictionary.dhcp
если не подключён , - добавьте строку :

$INCLUDE     /usr/local/share/freeradius/dictionary.dhcp

Обязательно внесите изменения в dictionary.dhcp

  • удалить секцию
ATTRIBUTE      DHCP-Relay-Agent-Information            82      tlv

BEGIN-TLV       DHCP-Relay-Agent-Information
...
END-TLV         DHCP-Relay-Agent-Information
  • добавить секцию
ATTRIBUTE      DHCP-Relay-Agent-Information            82       octets
ATTRIBUTE      DHCP-Agent-Circuit-Id               0x0152       octets
ATTRIBUTE      DHCP-Agent-Remote-Id                0x0252       octets


Если все прошло успешно при старте radiusd -X программа покажет что открыла 67 порт для dhcp запросов.

Listening on dhcp address 192.168.1.41 port 67 as server dhcp



Дополнительные опции

$conf{DHCPHOSTS_PORT_BASE}=1; Авторизоваться абонента с учётом его порта подключения (SWITCH,PORT). Мак адрес не учитывается. Система следит что бы на порту было не больше 1 автоматизированного абонента.
$conf{DHCPHOSTS_SWITCH_MAC_AUTH}='1,2,…'; Список коммутаторов в которых принудительно авторизировать по мак адресу при включённой опции $conf{DHCPHOSTS_PORT_BASE}
$conf{DHCPHOSTS_GUEST_POOLS}='VLAN:POOL_ID:EXT_PARAMS' Объявление гостевого пула адресов. Данный пул выдаётся не авторизированным абонентам и абонентам с отрицательным балансом.
Параметры:

VLAN - Влан абонента
POOL_ID - Номер пула адресов в системе ABillS (заводится / Система/ Сервер доступа/ IP Pools)
EXT_PARAMS - Дополнительные радиус параметры для данного пула. Система предоставляет возможность заводить на каждый Vlan свой гостевой пул. Правила пулов разделяются точкой с запятой (;).

Пример:
$conf{DHCPHOSTS_GUEST_POOLS}='0:3:DHCP-Router-Address=10.22.0.1,DHCP-Subnet-Mask=255.255.252.0,DHCP-Domain-Name-Server=192.168.111.254';
$conf{DHCPHOSTS_LEASES}='db'; Включение в мониторинга leases сессий
$conf{DHCP_FREERADIUS_DEBUG}=1; Режимы отладки
1 - Режим сессий (файл: /tmp/rad_dhcp)
2 - Режим ответов авторизации. (Файл: /tmp/rad_reply)
3 - Режим выражений для проверки параметров Option 82 (Файл /tmp/dhcphosts_expr)
$conf{DHCPHOSTS_EXPR}='-'; Так как производители оборудования (коммутаторов) не всегда придерживаются стандартов при формирование запросов DHCP Option 82 в системе была создана возможность задать регулярное выражение для получения нужных параметров из DHCP запроса . Использовать дополнительные выражения для получения корректных данных с запросов от коммутаторов в которых параметры опции 82 отличаются от стандартных.
формат выражения через точку с запятой:
радиус_пара:условия:переменные:hex2ansii;условия переменные….

радиус_пара - радиус пара запроса
условия - условия поиска Perl выражение
переменные - переменные результата VLAN PORT MAC MAC_DEC (если мак не нужно преобразовывать в шестнадцатеричный из десятеричного) PORT_DEC (если не нужно преобразовывать порт из десятеричного в шестнадцатеричный формата)
hex2ansii - если указан єтот параметр система перед вычислением нужных переменных преобразует строку с шестнадцатеричного формата в текстовый


система при получении параметра проверяет нужно ли использовать внешние выражения если да начинает проходится по списку при попадании в параметры перебор прекращается и система подставляет выбранные VLAN PORT MAC MAC_DEC (если мак не нужно приобразовывать в десятичный форма из шестнадцатиричного) PORT_DEC (если не нужно приобразовывать порт из десятеричного шестнадцатиричного формата) в DHCP-Agent-Circuit-Id и DHCP-Agent-Remote-Id дальше уже идут стандартные процедуры работы с DHCP. При включении выражений система отключает шаблон по умолчанию для распознавания коммутаторов
$conf{DHCPHOSTS_AUTH_PARAMS}=1; Авторизация по совокупности заполненных параметров MAC,PORT,VLAN,NAS_ID
При использовании данной опции отключите $conf{DHCPHOSTS_PORT_BASE}
$conf{DHCPHOSTS_GUEST_STATIC_IP}=1; По умолчанию через каждый алайв период система выдаёт гостевому абоненту новые IP адрес. При включении данной опции система постоянно выдаёт тот же IP

После внесения каких либо изменений по модулю в конфигурационный файл перезагружайте RADIUS

Примеры Выражений

  • Edge-Core ES-3528M
  • Huawei S2318TP-EI
DHCP-Relay-Agent-Information:0x(01)(04)([0-9a-f]{4})\d{2}([0-9a-f]{2})(02)(06)([0-9a-f]{12}):ID,SIZE,VLAN,PORT,ID,SIZE,MAC;
  • Edge-Core ES-3526XA V2
  • Edge-Core ES-3510MA
  • Huawei s2326tp-ei (Версия прошивки: s2300ei-v100r006c05.cc)
DHCP-Relay-Agent-Information:0x(01)(06)[0-9a-f]{4}([0-9a-f]{4})\d{2}([0-9a-f]{2})(02)(08)[0-9a-f]{4}([0-9a-f]{12}):ID,SIZE,VLAN,PORT,ID,SIZE,MAC;
  • GePON Eltex NTE-2 и NTE-RG
DHCP-Relay-Agent-Information:0x(01)(0b)[0-9a-f]{4}([0-9a-f]{4})[0-9a-f]{10}([0-9a-f]{4})(02)(0b)[0-9a-f]{10}([0-9a-f]{12}):ID,SIZE,VLAN,PORT,ID,SIZE,MAC;
  • OLT BDCOM 3310

Настройка Option 82 Type: cm-type
при использовании DHCP-Relay-Agent-Information

$conf{DHCPHOSTS_EXPR}='DHCP-Relay-Agent-Information:0x01060004([0-9a-f]{4})\d{2}([0-9a-f]{2})02080006([0-9a-f]{12}):VLAN,PORT,MAC;DHCP-Relay-Agent-Information:0x0105([0-9a-f]{4})\d{2}([0-9a-f]{4})\d{4}([0-9a-f]{12}):VLAN,PORT_DEC,MAC;';

при использовании DHCP-Relay-Circuit-Id

DHCP-Relay-Circuit-Id:0x([0-9a-f]{4})([0-9a-f]{6}):VLAN,PORT;DHCP-Relay-Remote-Id:0x([0-9a-f]{12}):MAC
  • Foxgate-s-6224-s2
DHCP-Relay-Agent-Information:0x(01)(08)0006([0-9a-f]{4})\d{6}([0-9a-f]{2})(02)(06)([0-9a-f]{12}):ID,SIZE,VLAN,PORT,ID,SIZE,MAC;
  • D-link
DHCP-Relay-Agent-Information:0x(01)(06)0004([0-9a-f]{4})\d{2}([0-9a-f]{2})(02)(08)([0-9a-f]{12}):ID,SIZE,VLAN,PORT,ID,SIZE,MAC;

Dlink DES-3200-26 для Hw A1,B1 Firmware Version1.28.009 , HW C1 Firmware Version 4.00.24 DGS-3120-24SC hw a2 Firmware VersionBuild 2.00.010

DHCP-Relay-Agent-Information:0x(01)(06)0004([0-9a-f]{4})\d{2}([0-9a-f]{2})(02)(080006)([0-9a-f]{12}):ID,SIZE,VLAN,PORT,ID,SIZE,MAC;

Данные о домене, DNS, NetMask, шлюзе система берёт в настройках DHCP сетей (/ Настройка / DHCP Сети/), или можно их у казать в радиус парах сервера доступа (/Настройка /Сервер доступа).

Дополнительные Radius Пары (указываются в Настройка /Настройка /Сервер доступа)

DHCP-Domain-Name-Server='8.8.8.8' адрес DNS сервера
DHCP-Subnet-Mask=255.255.255.255 маска сети
DHCP-Server-IP-Address='10.2.0.1' Адрес шлюза
DHCP-Router-Address='10.2.0.1' Адрес шлюза
Assign-Ports='1,24,25,' Определение разрешённых портов коммутатора. По умолчанию разрешены все порты

Настройка сервера доступа

/Настройка/ Сервер доступу/

IP: IP адрес коммутатора.
Name: Название
Alive: Время длительности перед повторным запросом IP (По умолчанию 600)
Type: dhcp
Mac: Мак адресе коммутатора

если нужна динамическая выдача адресов обязательно выберите пул для коммутатора

Включение шейпера (ipoe_shapper)

Ограничение пропускаемой полосы занимается /usr/abills/libexec/ipoe_shapper.pl.
Программа работает в режиме демона и каждый 10 секунд проверяет нет ли новых сессий в мониторинге биллинга и заносит IP адреса новых абонентов в таблицы шейпера.
В режиме IPN_SHAPPER программа для каждого нового подключения выполняет поднятие правил шейпера програмами IPN управления ($conf{IPN_FW_START_RULE},$conf{IPN_FW_STOP_RULE}). Также в этом режиме выполняются правила $conf{IPN_FILTER}

Параметры

-d Запускать в режиме демона. (По умолчанию включено)
LOG_FILE=… Путь к файлу логов
UPDATE_TIME=… Период проверки новых подключений указывается в секундах (По умолчанию 10 секунд)
DEBUG=… Режим отладки 1-7 (Default: 8)
NAS_IDS= Номер сервера доступа для которого поднимать правила шейпера (По умолчанию: Все)
IPN_SHAPPER Включить режим поднятия шейпера правилами IPN
# cd /usr/abills/libexec/
# ln -s ../Abills/modules/Dhcphosts/ipoe_shapper.pl ipoe_shapper.pl 

Включение:
перед включением убедитесь что скрипт поднятия шейпера установлен (/usr/local/etc/rc.d/shaper_start.sh)

/etc/rc.conf

abills_dhcp_shaper="YES"
abills_dhcp_shaper_nas_ids="1,2"  #список серверов доступа для контроля программой ipoe_shaper

интерфейс шейпера ( опционально )

abills_ipn_if='em0';

другие параметры shaper_start.sh

Отслеживать ошибки выдачи адресов можно через меню
/ Отчёт/ Internet/ Ошибка/

Привязка к серверам доступа осуществляется используя параметр DHCP-Gateway-IP-Address как IP сервера доступа, если этот параметр не найден используется параметр DHCP-Server-IP-Address. Будьте внимательны параметр Radius NAS-Identifier не учитывается и если у вас несколько серверов с одинаковым IP система может использовать любой их них в случайном порядке

Список ошибок авторизации

  • User Not Exist '00:11:22:11:11:a1' /0not Option82

Скорее всего запрос к серверу идёт не по Option 82, а через DHCP Broadcast. Нужно настроить коммутатор на Option 82 (Настройка оборудования)

  • Can't find Switch MAC '00:11:22:11:11:a1' or user port '24'

Не найден коммутатор или подключенный абонент к данному коммутатору. Если используется автворизация по MAC тогда только коммутатор.
Коммутаторы заводятся в секции /Сиcтема/ Сервер доступу/

  • Can't find MAC, Switch MAC '00:11:22:11:11:a1' port '24'

Авторизация по MAC. MAC абонента не обнаружен

Мониторинг активных сессий

/ Мониторинг/ Internet/

Отображаются активные сессии абонентов


Мониторинг резерва адресов

/ Мониторинг/ DHCP/

Отображаются зарезервированные IP адреса и параметры подключения абонентов: коммутатора, порт, VLAN, MAC адрес

Настройка оборудования

10.0.0.1 Адрес DHCP сервера
Команды для настройки коммутатора L2 (DES-3526/DES-3550):

http://www.dlink.co.il/ru/faq/62/228.html

#Маршрутизатор по умолчанию
create iproute default 30.51.8.11  
# адрес DHCP сервера
config dhcp_relay add ipif System 10.0.0.1
config dhcp_relay option_82 state enable 
enable dhcp_relay
#Создать acl чтоб dhcp запрос клиента не уходил дальше порта
create access_profile ip udp src_port_mask 0xFFFF profile_id 3
config access_profile profile_id 3 add access_id 1 ip udp src_port 68 port 1 deny
config access_profile profile_id 3 add access_id 2 ip udp src_port 68 port 2 deny
config access_profile profile_id 3 add access_id 3 ip udp src_port 68 port 3 deny
config access_profile profile_id 3 add access_id 4 ip udp src_port 68 port 4 deny
config access_profile profile_id 3 add access_id 5 ip udp src_port 68 port 5 deny
config access_profile profile_id 3 add access_id 6 ip udp src_port 68 port 6 deny
config access_profile profile_id 3 add access_id 7 ip udp src_port 68 port 7 deny
config access_profile profile_id 3 add access_id 8 ip udp src_port 68 port 8 deny
config access_profile profile_id 3 add access_id 9 ip udp src_port 68 port 9 deny
config access_profile profile_id 3 add access_id 10 ip udp src_port 68 port 10 deny
config access_profile profile_id 3 add access_id 11 ip udp src_port 68 port 11 deny
config access_profile profile_id 3 add access_id 12 ip udp src_port 68 port 12 deny
config access_profile profile_id 3 add access_id 13 ip udp src_port 68 port 13 deny
config access_profile profile_id 3 add access_id 14 ip udp src_port 68 port 14 deny
config access_profile profile_id 3 add access_id 15 ip udp src_port 68 port 15 deny
config access_profile profile_id 3 add access_id 16 ip udp src_port 68 port 16 deny
config access_profile profile_id 3 add access_id 17 ip udp src_port 68 port 17 deny
config access_profile profile_id 3 add access_id 18 ip udp src_port 68 port 18 deny
config access_profile profile_id 3 add access_id 19 ip udp src_port 68 port 19 deny
config access_profile profile_id 3 add access_id 20 ip udp src_port 68 port 20 deny
config access_profile profile_id 3 add access_id 21 ip udp src_port 68 port 21 deny
config access_profile profile_id 3 add access_id 22 ip udp src_port 68 port 22 deny
config access_profile profile_id 3 add access_id 23 ip udp src_port 68 port 23 deny
config access_profile profile_id 3 add access_id 24 ip udp src_port 68 port 24 deny

Пример включение дляпортов 1-10

enable address_binding  dhcp_snoop

Укажите максимальное количество создаваемых в процессе автоизучения записей IP-MAC на портах 1-10, равное 1

config address_binding  allow_dhcp_snoop 1-10 total_entries 1

Активизируйте функцию IP-MAC-Port Binding в режиме DHCP Snooping на портах 1-10

config address_binding  ip_mac ports 1-10 state enable

Настройте возможность передачи нулевого IP-адреса (0.0.0.0) для корректной работы протокола DHCP

config address_binding  ip_mac ports 1-10 allowzeroip enable

Настройте возможность передачи пакетов от DHCP-сервера

config address_binding  ip_mac ports 1-10 forward_dhcppkt enable
Linksys SPS224G4
#
Edge Core

Тестировалось на ES3510MA. Дополнительно включена опция snooping.

ip dhcp snooping
ip dhcp snooping vlan <Интерфейс/Vlan>
ip dhcp snooping information option
ip dhcp snooping information policy replace
# на аплинковых портах обязательно указать статус доверенный:
interface ethernet 1/10
  ip dhcp snooping trust
Cisco

С включённой опцией Snooping

ip dhcp snooping
interface <Интерфейс/Vlan>
  ip helper-address 10.0.0.1
  ip dhcp relay information trusted
  
foxgate-s-6224-s2
hostname hostname1 #задаем hostname (в этом примере нужен будет для Option82)
service dhcp
ip forward-protocol udp bootps
ip dhcp relay information option
ip dhcp snooping enable
p dhcp snooping binding enable
ip dhcp snooping information enable
no ip dhcp snooping binding enable 
ip dhcp snooping information option remote-id standard 
ip dhcp snooping information option subscriber-id format hex

vlan 100 # создаем vlan100
interface ethernet 0/0/1-24 # выбираем порты с 1 по 24
switchport access vlan 100 # назначаем портам доступ только для vlan100

interface ethernet 0/0/26 # выбираем порт 26
switchport mode trunk
switchport trunk allowed vlan 100 
ip dhcp snooping trust

interface Vlan100
ip address 192.168.100.2 255.255.255.0 


ZTE 2928E

  set port statistics mode ingress 
  set dhcp snooping-and-option82 enable
  set dhcp option82 add port 1
  set dhcp option82 sub-option port 1 circuit-ID on cisco
  set dhcp option82 add port 2
  set dhcp option82 sub-option port 2 circuit-ID on cisco
.....
  set dhcp option82 add port 25
  set dhcp option82 add port 26
  set dhcp option82 add port 27
  set dhcp port 28 server
  set dhcp snooping add port 28
  set dhcp option82 add port 28

Huawei s2326tp-ei

Версия прошивки: s2300ei-v100r006c05.cc

#
!Software Version V100R006C05
#
vlan batch 100 800
#
dhcp enable
dhcp snooping enable
dhcp option82 format extend
#
http server load flash:/s2300ei-v100r006c05.web.zip
#
vlan 100
description ManageSwitch
vlan 800
description client_vlan
dhcp snooping enable
dhcp snooping trusted interface GigabitEthernet0/0/1
dhcp option82 rebuild enable interface Ethernet0/0/24

interface Ethernet0/0/24
port link-type access
port default vlan 800
dhcp snooping enable
#
interface GigabitEthernet0/0/1
port link-type trunk
port trunk allow-pass vlan 100 800

dhcp_tools.pl

Набор дополнительных утилит для работы с DHCP

  • автоматическое занесения IP/MAC адресов пользователей в модуль Dhcphosts.

Работает в двух режимах:

  1. Занесение IP/MAC связок пользователей из файла.

Формат файла:

LOGIN[TAB]IP[TAB]MAC[TAB]PORTS[TAB]NAS_ID[TAB]OPTION_82[TAB]VID[TAB]HOSTNAME
  1. Режим ARP монитора система вытаскивает IP/MAC связки из arp таблицы сравнивает их с онлайн пользователями и заносит в базу
  • Перенос абонентов из одной сети в другую.
# dhcp_tools.pl ADDRESS_SHIFT="NEW_NETWORK_ID:SRC_NET:DST_NET" 
NEW_NETWORK_ID номер в какую сеть перенести абонентов
SRC_NET Поточная сеть абонентов. Маска сети /24 (255.255.255.0)
DST_NET Новая сеть абонентов. Маска сети /24 (255.255.255.0)

Аргументы программы

NETWORK ИД сети для ARG grab.
FILE Режим парсера файла
ADDRESS_SHIFT Перенос абонентов из одной сети в другую
DEBUG Режим отладки

Ошибки

  • Dlink DES 3026 номера портов начинаются с 0 до 25

Дополнительно