Модуль управления DHCP сервером.
Особая благодарность dreamer_538
Модуль автоматически создаёт конфигурационный файл для DHCP сервера и вносит в него всех пользователей системы, в которых активизирован сервис DHCP. Система не учитывает баланс пользователя, только дату окончания аккаунта или сервиса и активность пользователя.
Создать таблицы в базе.
# mysql -D abills < db/Dhcphosts.sql
Подключение модуля. abills/libexec/config.pl
@MODULES = (
'Dhcphosts'
);
(В качестве примера используется машина под управлением FreeBSD)
Собираем ICS DHCP сервер
# cd /usr/ports/net/isc-dhcp3-server/ # make # make install
Для старта при загрузке системы приписываем в /etc/rc.conf
dhcpd_enable="YES" dhcpd_ifaces="em1" # интерфейс, на котором будет работать сервер
Для отделения логов DHCP сервера от других сообщений системы добавить в /etc/syslog.conf
!dhcpd *.* /var/log/dhcpd.log
# touch /var/log/dhcpd.log # killall -1 syslogd
/etc/newsyslog.conf
/var/log/dhcpd.log 600 5 100 * JC
Сообщения
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
Пользователь успешно подключился
Ведение лога в базе данных
правим /etc/syslog.conf
!dhcpd *.* |/usr/abills/libexec/dhcp_log2db.pl
# cd /usr/abills/libexec/ # ln -s ../Abills/modules/Dhcphosts/dhcp_log2db.pl # killall -1 syslogd
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
При использовании Options 82 в настройках NAS нужно:
other
Called-Station-Id='00:21:5a:50:4e:a3';
При использовании данной опции закоментируйте в шаблоне dhcphosts_dhcp_conf_subnet.tpl
#deny unknown-clients; #authoritative;
редактор шаблонов (/ System configuration/ Misc/ Template/)
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.51.8.1 config dhcp_relay option_82 state enable enable dhcp_relay
Если все правильно настроено в логе 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
Дополнительное расширение для модуля 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 программа 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 программа 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 таблицу
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
Пример управления удалённым сервером доступа
$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 "';
Гостевой аккаунт предполагает возможность зарегистрированным и авторизированным (имеющим право пользоваться сетью с учётом их депозита или других параметров) пользователям пользоваться сетью и получать свои статические 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_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 - шлюз для зарегистрированных/авторизированных пользователей
При использовании 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.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/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_RECONFIGURE}=»/usr/local/bin/sudo /usr/local/etc/rc.d/isc-dhcpd restart»; | Команда для перезапуска DHCP-сервера. Так, как для запуска сетевого сервиса нужны права суперпользователя (по умолчанию root), система перезапускает демон, используя sudo. |
| $conf{DHCPHOSTS_LEASES}=»/var/db/dhcpd/dhcpd.leases»; | Расположение dhcpd.leases файла для мониторинга выдачи IP адресов. В данный файл не попадают статически прописанные на MAC адрес адреса. |
/ System configuration/ DHCP Networks/
Заведение сетей для DHCP-сервера. Есть возможность задавать статические маршруты, просматривать конфигурационный файл и перезагружать DHCP-сервер.
| Network name: | Название сети |
|---|---|
| Network address: | Сетевой адрес. (Например: 10.10.1.0) |
| NETMASK: | Маска сети |
| Default router: | Маршрут по умолчанию. |
| IP Range: | Диапазон выдаваемых адресов. |
| Coordinator: | Координатор сети |
| Phone: | Номер телефона координатора сети |
| DNS: | DNS (Domain Name Server). Сервер доменных имён |
| DOMAINNAME: | Домен по умолчанию |
| Disable: | Отключить сеть |
/ Customers/ Logins/ DHCP/
/ Customers/ Logins/ Information/ Services/ DHCP/
Заведение пользователя для выдачи адреса DHCP-сервером
| Host name: | Название хоста |
|---|---|
| Networks: | Сеть |
| IP: | IP-адрес, который выдавать клиенту |
| Auto: | Авто присвоение следующего свободного адреса из сети клиенту. Адреса берутсья из поля IP Range сети. |
| MAC: | MAC клиента |
| Expire: | Время окончания действия правила |
| Disable: | Блокировать |
| Comments: | Комментарии |
| Option 82 | |
| Port | Порт комутатора |
| VID | Vlan ID |
| NAS | Привязать к коммутатору |
/ Monitoring/ DHCP/
В мониторинге отображаются только адреса, выданные из пула адресов. Статические адреса, привязанные к MAC, в мониторинге не отображаются.
Ошибки которые отображаются в файле /var/log/dhcpd.log
Скорее всего у Вас не одна из сетей не настроена слушать запросы на Ваших интерфейсах.
/usr/local/etc/dhcpd.conf line 142: lease 10.133.3.26 is declared twice!
pool { range 10.133.3.26;
^
Проверте не пересекаются ли у Вас ренжи (rage) выдаваемых адресов
Набор дополнительных утилит для работы с DHCP
Работает в двух режимах:
Формат файла:
LOGIN[TAB]IP[TAB]MAC[TAB]PORTS[TAB]NAS_ID[TAB]OPTION_82[TAB]VID[TAB]HOSTNAME
# 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 | Режим отладки |