Vlan
Модуль управления Vlan подключениями на локальном или на удалённом серверах.
Возможности
- vlan-per-user (Vlan на абонента)
- Создание Vlan локальнео и на удалёных серверах
- Создание для Vlan PPPoE сервера
- Создание для Vlan Dhcp сервера
- Vlan unnumbered IP
Установка
Создать таблицы в базе.
# mysql -D abills < db/Vlan.sql
Подключение модуля. abills/libexec/config.pl
@MODULES = ( 'Vlan' );
Опции:
Универсально авто определение ОС и использование параметров системы (Используется по умолчанию системой).
$conf{VLAN_IF_CREATE}='if [ `uname` = Linux ]; then /usr/bin/sudo /sbin/vconfig add %PARENT_INTERFACE% %VLAN_ID%; else /usr/local/bin/sudo /sbin/ifconfig vlan%VLAN_ID% create vlan %VLAN_ID% vlandev %PARENT_INTERFACE% up; fi' | Команда создания Vlan |
---|---|
$conf{VLAN_IF_IP}='if [ `uname` = Linux ]; then /usr/bin/sudo /sbin/ifconfig %PARENT_INTERFACE%.%VLAN_ID% %VLAN_IF_IP% netmask %VLAN_IF_NETMASK% up; else /usr/local/bin/sudo /sbin/ifconfig vlan%VLAN_ID% inet %VLAN_IF_IP% netmask %VLAN_IF_NETMASK%; fi'; | назначение IP адреса для Vlan |
$conf{VLAN_IP_DELETE}='if [ `uname` = Linux ]; then /usr/bin/sudo /sbin/ifconfig %PARENT_INTERFACE%.%VLAN_ID% delete %VLAN_IF_IP%; else /usr/local/bin/sudo /sbin/ifconfig vlan%VLAN_ID% delete %VLAN_IF_IP%; fi'; | Удаление IP адреса с Vlan |
$conf{VLAN_IF_DESTROY}='if [ `uname` = Linux ]; then /usr/bin/sudo /sbin/ifconfig %PARENT_INTERFACE%.%VLAN_ID% down; /usr/bin/sudo /sbin/vconfig rem %PARENT_INTERFACE%.%VLAN_ID%; else /sbin/ifconfig vlan%VLAN_ID% destroy; fi'; | Уничтожение Vlan |
$conf{VLAN_STATIC}='NAS_ID=vlan1,vlan2…;NAS_ID=…'; | Список системных вланов которые не подлежать изменению Пример: на сервера доступа 2 создать два статических влана с номерами 1 и 8, на сервере 3 виланы с номерами 2 и 3 $conf{VLAN_STATIC}='1=vlan1,vlan8,13;3=vlan2,vlan3' |
$conf{VLAN_CMD_SHOW}=1; | Показывать системные команды перед выполнением |
Пример для Freebsd.
ядро нужно скомпилировать с опцией:
device vlan
$conf{VLAN_IF_CREATE}='/sbin/ifconfig vlan%VLAN_ID% create vlan %VLAN_ID% vlandev %PARENT_INTERFACE% up'; | Команда создания Vlan |
---|---|
$conf{VLAN_IF_IP}='/sbin/ifconfig vlan%VLAN_ID% inet %VLAN_IF_IP% netmask %VLAN_IF_NETMASK%'; | назначение IP адреса для Vlan |
$conf{VLAN_IP_DELETE}='/sbin/ifconfig vlan%VLAN_ID% delete %VLAN_IF_IP%'; | Удаление IP адреса с Vlan |
$conf{VLAN_IF_DESTROY}='/sbin/ifconfig vlan%VLAN_ID% destroy'; | Уничтожение Vlan |
$conf{VLAN_CREATE_PPPOE}=«»; | Скрипт запуска pppoe сервисов в VLan. Пример запуска mpd5 . $conf{VLAN_CREATE_PPPOE}=«/usr/abills/misc/mpd/mpd_configure.pl INTERFACES=%INTERFACES% OUTPUT_FILE=/tmp/mpd.conf DNS_SERVER=10.1.1.1 NAS_IP=%NAS_IP%; /usr/local/bin/sudo /usr/local/sbin/mpd5 -b -f /tmp/mpd.conf» Дополнительные параметры которые может передавать биллинг внешнему обработчику: %INTERFACES% - Название интерфейсов %NAS_IP% - IP удалённого сервера доступа на котором будет запускаться програма |
Переменные
PARENT_INTERFACE | Родительский интерфейс для Vlan |
LOGIN | Логин абонента |
VLAN_ID | номер Vlan |
VLAN_IF_IP | IP для Vlan |
VLAN_IF_NETMASK | Netmask для Vlan |
VLAN_IF_BIT_NETMASK | Битная маска сети |
DHCP | Включать DHCP в Vlan |
PPPOE | Включать PPPoE в Vlan |
UNNUMBERED_IP | Unnumbered Адрес абонента |
Для удобства работы и создания внешних программ обработки Vlan система устанавливает следующие переменные окружения перед выполнением команд.
NAS_IP_ADDRESS | Адрес сервера доступа |
---|---|
NAS_IP_PORT | Порт сервера доступа |
NAS_MNG_USER | Пользователь сервера доступа |
NAS_MNG_PASSWD | Пароль управления для сервера доступа |
Если планируется использовать UNNUMBERED_IP тогда нужно в конфигурационном файле добавить
FreeBSD
$conf{VLAN_IF_CREATE}='/usr/local/bin/sudo /sbin/ifconfig vlan%VLAN_ID% create; /usr/local/bin/sudo /sbin/ifconfig vlan%VLAN_ID% vlan %VLAN_ID% vlandev %PARENT_INTERFACE%'; | |
---|---|
$conf{VLAN_IF_IP}='if [ x%UNNUMBERED_ADD% != x1 ]; then /usr/local/bin/sudo /sbin/ifconfig vlan%VLAN_ID% %VLAN_IF_IP% netmask %VLAN_IF_NETMASK%; fi; /usr/local/bin/sudo /sbin/route add -net %UNNUMBERED_IP%/%VLAN_IF_BIT_NETMASK% -iface vlan%VLAN_ID%'; | |
$conf{VLAN_IP_DELETE}='/usr/local/bin/sudo /sbin/ifconfig vlan%VLAN_ID% delete %VLAN_IF_IP%'; | Удаление IP адреса с Vlan |
$conf{VLAN_IF_DESTROY}='/usr/local/bin/sudo /sbin/ifconfig vlan%VLAN_ID% destroy'; | Уничтожение Vlan |
Linux
$conf{VLAN_IF_CREATE}='/sbin/vconfig add %PARENT_INTERFACE% %VLAN_ID%'; | Команда создания Vlan |
---|---|
$conf{VLAN_IF_IP}='/sbin/ip link set %PARENT_INTERFACE%.%VLAN_ID% up; /usr/bin/sudo /sbin/ip route add %UNNUMBERED_IP% dev %PARENT_INTERFACE%.%VLAN_ID% src %VLAN_IF_IP%'; | назначение IP адреса для Vlan |
$conf{VLAN_IP_DELETE}='/sbin/ip addr del %UNNUMBERED_IP% dev %PARENT_INTERFACE%.%VLAN_ID%'; | Удаление IP адреса с Vlan |
$conf{VLAN_IF_DESTROY}='/sbin/ip link set %PARENT_INTERFACE%.%VLAN_ID% down; /usr/bin/sudo /sbin/vconfig rem %PARENT_INTERFACE%.%VLAN_ID%'; | Уничтожение Vlan |
$conf{VLAN_STATIC}='NAS_ID=vlan1,vlan2…;NAS_ID=…'; |
ABillS
Заведение Vlan учётных записей пользователя
/ Customers/ Logins/ Information/ Services/ VLAN/
VLAN ID: | Номер Vlan |
---|---|
Interface IP: | IP адрес для Vlan интерфейса. Система автоматом ставит первый адрес из сети исходя из данных IP и NETMASK. |
Netmask: | Маска |
IP Range: | Адреса доступные клиенту. |
IP Count: | Количество доступные клиенту адресов. |
NAS: | Сервер доступа |
DHCP: | Включить DHCP в этом VLAN |
PPPoE: | Включить PPPoE сервер в этом Vlan Для работы требуется pppoe-relay из пакета RP-PPPoE |
Disable: | Выключить |
Список Vlan учётных записей
/ Customers/ Logins/ VLAN/
Заведение сервера доступа для привязки Vlan к нему.
/ System configuration/ NAS/
IP | IP адрес NAS |
---|---|
Type: | vlan |
IP:PORT: | Если Вы используете удалённый NAS пропишите IP |
Пользователь: | Имя удалённого SSH пользователя |
RADIUS Параметры (,) | IP-Interface-Name=«fxp0» Интерфейс являющийся родительским для Vlan интерфейсов |
При использовании VLAN + DHCP з автоматической видачей адресов нужно использовтаь следующие шаблоны для Dhcphosts
Общий шаблон dhcphosts_dhcp_conf_main
# Create %DATETIME% # default-lease-time 86400; max-lease-time 172800; ddns-update-style none; lease-file-name \"/var/db/dhcpd/dhcpd.leases\"; log-facility local7; %SUBNETS% #List of hosts %HOSTS%
Шаблон подсетей dhcphosts_dhcp_conf_subnet
# %DESCRIBE% shared-network NETWORK_%VLAN_ID% { subnet %NETWORK% netmask %NETWORK_MASK% { %RANGE% %ROUTERS% } }
При поднятии Vlan с DHCP на локальной машине добавте в конфигурационный файл
$conf{DHCPHOSTS_RECONFIGURE}="/usr/local/bin/sudo /usr/local/etc/rc.d/isc-dhcpd restart" ;
При выполнении системных команд типа: ifconfig, mpd, pppoed и т.д. от имени не привилигиированного пользователя через команду sudo не забывайте прописывать разрешение на запуск команд в файле sudoers.
Для ОС FreeBSD при поднятии Vlan на том же сервере что и веб интерфейс в /usr/local/etc/sudoers:
www ALL = NOPASSWD: /sbin/ipfw www ALL = NOPASSWD: /sbin/ifconfig www ALL = NOPASSWD: /sbin/route www ALL = NOPASSWD: /usr/local/sbin/mpd5 www ALL = NOPASSWD: /usr/local/etc/rc.d/isc-dhcpd www ALL = NOPASSWD: /usr/libexec/pppoed www ALL = NOPASSWD: /bin/kill
При поднятии Vlan на удалённом сервере:
- создайте SSH сертификат для пользователя на сервере биллинга и скопируйте приватный ключ на удалённый сервер.
- обязательно настройте sudo для запуска определённых команд без прав сyперпользователя (root).
Пример (FreeBSD)
Учётная запись на удалённом сервере abills_admin
Создание сертификата
# /usr/abills/misc/sslcerts.sh ssh abills_admin
Правка файла конфигурации для sudo на удалённом сервере
/usr/local/etc/sudoers
abills_admin ALL = NOPASSWD: /usr/local/etc/rc.d/isc-dhcpd abills_admin ALL = NOPASSWD: /sbin/ifconfig abills_admin ALL = NOPASSWD: /sbin/route abills_admin ALL = NOPASSWD: /usr/libexec/pppoed abills_admin ALL = NOPASSWD: /bin/kill abills_admin ALL = NOPASSWD: /usr/local/sbin/mpd5 abills_admin ALL = NOPASSWD: /sbin/ipfw
Перезагрузка всей конфигурации
# /usr/abills/libexec/periodic daily MODULES=Vlan
Желательно включить эту опцию после рестарта сервера.
/etc/rc.local
/usr/abills/libexec/periodic daily MODULES=Vlan
Опции
NAS_IDS=… | Пересоздать VLAN на определённом сервере доступа. (по умолчанию пересоздаются на всех) |
---|---|
LOCAL_NAS_IDS=… | Пересоздание VLAN как локальных для данного сервера доступа. Используется для поднятия нужных VLAN после перезагрузки сервера доступа. Пример /usr/abills/libexec/periodic daily MODULES=Vlan LOCAL_NAS_IDS=1 |
LOGIN=… | Пересоздать VLAN для определённого пользователя |
PPPOE_CHECK=1 | Проверить активность PPPoE серверов в Vlan |
RECONFIGURE=1 | Переинициализировать интерфейсы |
DEBUG=1-6 | Режим отладки. |