=====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 из пакета [[http://www.roaringpenguin.com/en/penguin/openSourceProducts/rpPppoe|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 | Режим отладки. | =====Дополнительно===== * [[http://people.freebsd.org/~arved/vlan/vlan_en.html|FreeBSD VLAN mini HowTo]] * [[http://xgu.ru/wiki/VLAN|VLAN]]