Различия

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

Ссылка на это сравнение

Следующая версия
Предыдущая версия
abills:docs:modules:internet:ipoe:ru [2017/07/07 17:37]
asmodeus создано
abills:docs:modules:internet:ipoe:ru [2018/04/06 12:39] (текущий)
asmodeus
Строка 3: Строка 3:
  
 Предоставление некоммутируемых услуг Internet Предоставление некоммутируемых услуг Internet
- 
-=====Ручное вкючение===== 
- 
-Правила включение выключения при помощи внешних команд 
- 
-^$conf{INTERNET_IPOE_START}=''​| Правила для открытия доступа.\\ Программе всегда передаются следующие параметры:​\\ ​ %IP - ип адрес\\ ​ %MASK - битная маска (32,​24)\\ ​ %NUM - номер правила ($conf{INTERNET_IPOE_FIRST_RULE} + (PORT или последняя цифра IP адреса) )\\  %LOGIN - Логин \\ \\ ** Примеры:​** \\ **FreeBSD**\\ "/​usr/​local/​bin/​sudo /sbin/ipfw -q delete %NUM;\\ /​usr/​local/​bin/​sudo /sbin/ipfw -q add %NUM allow ip from %IP to any;\\ /​usr/​local/​bin/​sudo /sbin/ipfw -q add %NUM allow ip from any to %IP";​\\ **Пример с шейпером**\\ $conf{INTERNET_IPOE_START}="/​usr/​local/​bin/​sudo /​usr/​abills/​libexec/​linkupdown ipn up fxp1 %LOGIN %IP". ' > /dev/null 2>&​1;'​. "/​usr/​local/​bin/​sudo /sbin/ipfw -q add %NUM allow ip from %IP to any; /​usr/​local/​bin/​sudo /sbin/ipfw -q add %NUM allow ip from any to %IP";​\\ \\ **Linux**\\ "/​usr/​bin/​sudo /​sbin/​iptables -t nat -I PREROUTING 1 -s %IP/%MASK -j ACCEPT;\\ /​usr/​bin/​sudo iptables -I FORWARD 1 -s %IP -d 0/0 -j ACCEPT;\\ /​usr/​bin/​sudo iptables -I FORWARD 1 -s 0/0 -d %IP -j ACCEPT";​| ​ 
-^$conf{INETRNET_IPOE_STOP}=""​| Правила для закрытия доступа.\\ **FreeBSD**\\ "/​usr/​local/​bin/​sudo /sbin/ipfw -q delete %NUM;\\ /​usr/​local/​bin/​sudo /sbin/ipfw -q add %NUM deny ip from %IP to any;\\ /​usr/​local/​bin/​sudo /sbin/ipfw -q add %NUM deny ip from any to %IP";​\\ **Пример с шейпером**\\ $conf{INETRNET_IPOE_STOP}="/​usr/​local/​bin/​sudo /​usr/​abills/​libexec/​linkupdown ipn down fxp1 %LOGIN %IP". ' > /dev/null 2>&​1;'​. "/​usr/​local/​bin/​sudo /sbin/ipfw -q delete %NUM"; \\ \\ **Linux**\\ "/​usr/​bin/​sudo /​sbin/​iptables -t nat -D PREROUTING -s %IP/%MASK -j ACCEPT;\\ /​usr/​bin/​sudo iptables -D FORWARD -s 0/0 -d %IP -j ACCEPT;\\ /​usr/​bin/​sudo iptables -D FORWARD -s %IP -d 0/0 -j ACCEPT";​\\ |  
  
  
Строка 28: Строка 21:
 |NAS_MNG_USER | Пользователь для управления сервером доступа | |NAS_MNG_USER | Пользователь для управления сервером доступа |
 |NAS_MNG_IP_PORT | IP:​PORT ​ управления сервером доступа | |NAS_MNG_IP_PORT | IP:​PORT ​ управления сервером доступа |
 +|NAS_MNG_IP | NAS IP  управления |
 +|NAS_MNG_PORT | порт управления сервером доступа |
 |NAS_ID | Номер ​ сервера доступа | |NAS_ID | Номер ​ сервера доступа |
 |NAS_TYPE | Тип сервера доступа | |NAS_TYPE | Тип сервера доступа |
Строка 40: Строка 35:
 $conf{INTERNET_IPOE_START}='​SUDO=/​usr/​local/​bin/​sudo;​ $conf{INTERNET_IPOE_START}='​SUDO=/​usr/​local/​bin/​sudo;​
 CMD="​${SUDO} /​usr/​abills/​libexec/​linkupdown ipn up getif %LOGIN %IP %DEBUG > /dev/null 2>&​1";​ CMD="​${SUDO} /​usr/​abills/​libexec/​linkupdown ipn up getif %LOGIN %IP %DEBUG > /dev/null 2>&​1";​
-if [ "​${NAS_TYPE}"​ = "​mikrotik"​ ]; then CMD="/​usr/​abills/​libexec/​linkupdown mikrotik up - %LOGIN %IP NAS_HOST=${NAS_MNG_IP_PORT} ​NAS_ADMIN=${NAS_MNG_USER}";​+if [ "​${NAS_TYPE}"​ = "​mikrotik"​ ]; then CMD="/​usr/​abills/​libexec/​linkupdown mikrotik up - %LOGIN %IP NAS_HOST=${NAS_MNG_IP_PORT} ​NAS_MNG_USER=${NAS_MNG_USER}";​
 elif [ "​${NAS_MNG_IP_PORT}"​ != ""​ ]; then CMD="/​usr/​bin/​ssh -o StrictHostKeyChecking=no -i /​usr/​abills/​Certs/​id_rsa.${NAS_MNG_USER} ${NAS_MNG_USER}@${NAS_MNG_IP_PORT} \"​${CMD}\"";​ fi; elif [ "​${NAS_MNG_IP_PORT}"​ != ""​ ]; then CMD="/​usr/​bin/​ssh -o StrictHostKeyChecking=no -i /​usr/​abills/​Certs/​id_rsa.${NAS_MNG_USER} ${NAS_MNG_USER}@${NAS_MNG_IP_PORT} \"​${CMD}\"";​ fi;
 eval "​${CMD}"';​ eval "​${CMD}"';​
Строка 46: Строка 41:
 $conf{INTERNET_IPOE_STOP}='​SUDO=/​usr/​local/​bin/​sudo;​ $conf{INTERNET_IPOE_STOP}='​SUDO=/​usr/​local/​bin/​sudo;​
 CMD="​${SUDO} /​usr/​abills/​libexec/​linkupdown ipn down getif %LOGIN %IP %DEBUG > /dev/null 2>&​1";​ CMD="​${SUDO} /​usr/​abills/​libexec/​linkupdown ipn down getif %LOGIN %IP %DEBUG > /dev/null 2>&​1";​
-if [ "​${NAS_TYPE}"​ = "​mikrotik"​ ]; then CMD="/​usr/​abills/​libexec/​linkupdown mikrotik down - %LOGIN %IP NAS_HOST=${NAS_MNG_IP_PORT} ​NAS_ADMIN=${NAS_MNG_USER}";​ +if [ "​${NAS_TYPE}"​ = "​mikrotik"​ ]; then CMD="/​usr/​abills/​libexec/​linkupdown mikrotik down - %LOGIN %IP NAS_HOST=${NAS_MNG_IP_PORT} ​NAS_MNG_USER=${NAS_MNG_USER}";​ 
-elif [ "​${NAS_MNG_IP_PORT}"​ != ""​ ]; then CMD="/​usr/​bin/​ssh -o StrictHostKeyChecking=no -i /​usr/​abills/​Certs/​id_rsa.${NAS_MNG_USER} ${NAS_MNG_USER}@${NAS_MNG_IP_PORT} \"​${CMD}\"";​ fi;+elif [ "​${NAS_MNG_IP_PORT}"​ != ""​ ]; then CMD="/​usr/​bin/​ssh -o StrictHostKeyChecking=no -i /​usr/​abills/​Certs/​id_rsa.${NAS_MNG_USER} ${NAS_MNG_USER}@${NAS_MNG_IP} \"​${CMD}\"";​ fi;
 eval "​${CMD}"';​ eval "​${CMD}"';​
 </​code>​ </​code>​
Строка 53: Строка 48:
 Для типа сервера - mikrotik-dhcp:​ Для типа сервера - mikrotik-dhcp:​
 <​code>​ <​code>​
-$conf{INTERNET_IPOE_START_RULE}='​SUDO=/​usr/​local/​bin/​sudo;​+$conf{INTERNET_IPOE_START}='​SUDO=/​usr/​local/​bin/​sudo;​
 CMD="​${SUDO} /​usr/​abills/​libexec/​linkupdown ipn up getif %LOGIN %IP %DEBUG > /dev/null 2>&​1";​ CMD="​${SUDO} /​usr/​abills/​libexec/​linkupdown ipn up getif %LOGIN %IP %DEBUG > /dev/null 2>&​1";​
 if [ "​${NAS_TYPE}"​ = "​mikrotik_dhcp"​ ]; then CMD="/​usr/​abills/​libexec/​linkupdown mikrotik up - %LOGIN %IP NAS_HOST=${NAS_MNG_IP_PORT} if [ "​${NAS_TYPE}"​ = "​mikrotik_dhcp"​ ]; then CMD="/​usr/​abills/​libexec/​linkupdown mikrotik up - %LOGIN %IP NAS_HOST=${NAS_MNG_IP_PORT}
-NAS_ADMIN=${NAS_MNG_USER}";​+NAS_MNG_USER=${NAS_MNG_USER}";​
 elif [ "​${NAS_MNG_IP_PORT}"​ != ""​ ]; then CMD="/​usr/​bin/​ssh -o StrictHostKeyChecking=no -i /​usr/​abills/​Certs/​id_rsa.${NAS_MNG_USER} elif [ "​${NAS_MNG_IP_PORT}"​ != ""​ ]; then CMD="/​usr/​bin/​ssh -o StrictHostKeyChecking=no -i /​usr/​abills/​Certs/​id_rsa.${NAS_MNG_USER}
-${NAS_MNG_USER}@${NAS_MNG_IP_PORT} \"​${CMD}\"";​ fi;+${NAS_MNG_USER}@${NAS_MNG_IP} \"​${CMD}\"";​ fi;
 eval "​${CMD}"';​ eval "​${CMD}"';​
  
-$conf{INTERNET_IPOE_STOP_RULE}='​SUDO=/​usr/​local/​bin/​sudo;​+$conf{INTERNET_IPOE_STOP}='​SUDO=/​usr/​local/​bin/​sudo;​
 CMD="​${SUDO} /​usr/​abills/​libexec/​linkupdown ipn down getif %LOGIN %IP %DEBUG > /dev/null 2>&​1";​ CMD="​${SUDO} /​usr/​abills/​libexec/​linkupdown ipn down getif %LOGIN %IP %DEBUG > /dev/null 2>&​1";​
 if [ "​${NAS_TYPE}"​ = "​mikrotik_dhcp"​ ]; then CMD="/​usr/​abills/​libexec/​linkupdown mikrotik down - %LOGIN %IP NAS_HOST=${NAS_MNG_IP_PORT} if [ "​${NAS_TYPE}"​ = "​mikrotik_dhcp"​ ]; then CMD="/​usr/​abills/​libexec/​linkupdown mikrotik down - %LOGIN %IP NAS_HOST=${NAS_MNG_IP_PORT}
-NAS_ADMIN=${NAS_MNG_USER}";​+NAS_MNG_USER=${NAS_MNG_USER}";​
 elif [ "​${NAS_MNG_IP_PORT}"​ != ""​ ]; then CMD="/​usr/​bin/​ssh -o StrictHostKeyChecking=no -i /​usr/​abills/​Certs/​id_rsa.${NAS_MNG_USER} elif [ "​${NAS_MNG_IP_PORT}"​ != ""​ ]; then CMD="/​usr/​bin/​ssh -o StrictHostKeyChecking=no -i /​usr/​abills/​Certs/​id_rsa.${NAS_MNG_USER}
-${NAS_MNG_USER}@${NAS_MNG_IP_PORT} \"​${CMD}\"";​ fi;+${NAS_MNG_USER}@${NAS_MNG_IP} \"​${CMD}\"";​ fi;
 eval "​${CMD}"';​ eval "​${CMD}"';​
 </​code> ​ </​code> ​
 +
 +И дополнительная команда фильтров
 +
 +**$conf{INTERNET_IPOE_FILTER} **
 +
 +Полный путь к программе,​ которая запустится,​ если у клиента заполнено поле Filter ID. Данная программа запускается после командіпрописанной в $conf{IPN_FW_START_RULE} и $conf{IPN_FW_STOP_RULE}.
 +Программе передаются следующие аргументы %STATUS (ONLINE_ENABLE,​ONLINE_DISABLE,​HANGUP)
 +
 +  %LOGIN
 +  %IP
 +  %FILTER_ID
 +  %PORT
 +  %UID
 +в виде аргументов.
 +
 +Также передаются переменные окружения:​
 +  NAS_IP_ADDRESS
 +  NAS_MNG_USER
 +  NAS_MNG_IP_PORT
 +  NAS_MNG_IP
 +  NAS_MNG_PORT
 +
 +Не забывайте,​ что при ручной активации пользователя программа может выполняться с правами веб-сервера,​ поэтому лучше её запускать через sudo.
 +Пример:​ abills/​misc/​ipn_filter.sh ​
 +
 +
 Также внизу указано настройка дополнительных параметров ​ для разных операционных систем и удалённых серверов доступа Также внизу указано настройка дополнительных параметров ​ для разных операционных систем и удалённых серверов доступа
  
  
 +
 +===FreeBSD===
 +
 +Управление доступом,​ шейпером и переинициализация сессий при перезагрузке сервера осуществляется программой ​ **[[abills:​docs:​manual:​shaper_start|/​usr/​local/​etc/​rc.d/​shaper_start.sh]]** \\
 +
 +параметры /​etc/​rc.conf
 +^ abills_shaper_enable="​YES"​ | Поднятие правил шейпера при перезапуске системы | 
 +^ abills_ipn_nas_id="​Номер IPN  наса"​ | Номер сервера доступа. Обязательный параметр | 
 +^ abills_ipn_if="​интерфейс к которому подключаются пользователи"​ | Интерфейс к которому подключаются клиенты | 
 +^ abills_ipn_allow_ip="​разрешённые ип адреса"​ | Разрешённые без авторизации IP адреса. Разделяются запятой | 
 +^ abills_nat="​xx.xx.xx.xx:​10.0.0.0/​16:​interface"​ | Если нужно использовать NAT   |
 +
 + ​При использовании шейпера ipfw система по умолчанию использует правила с номера 20000 по 40000. Для изменения номера начального правила можно воспользоваться опцией $conf{IPN_FW_FIRST_RULE}.
 +
 +==sudo==
 +Установка sudo, для запуска правил фаервола от имени пользователя,​ под которым работает WEB сервер. ​
 +freebsd:
 +  # cd /​usr/​ports/​security/​sudo
 +  # make
 +  # make install
 +
 +**/​usr/​local/​etc/​sudoers**
 +  #Allow ABillS shapper
 +  www   ALL = NOPASSWD: /​usr/​abills/​libexec/​linkupdown
 +  www   ALL = NOPASSWD: /sbin/ipfw
 +
 +
 +===Linux===
 +Скрипт которые подготавливает интерфейс для использования шейпера и устанавливает контроль доступа . \\
 +**/​etc/​rc.d/​init.d/​shaper_start.sh**
 +\\
 +
 +**/​etc/​rc.conf**
 +
 +  abills_shaper_enable="​YES"​
 +  abills_ipn_if="​eth0,​eth2"​
 +  abills_nat_enable=":​192.168.0.0/​24:​eth1"​
 +
 +^eth0,eth2 | интерфейс в локальную сеть к которому подключены пользователи ​ |
 +^eth1 | интерфейс наружу |
 +^192.168.0.1 | локальный IP сервера |
 +^192.168.0.0/​255.255.255.0| локальная сеть|
 +
 +
 +или альтернативный скрипт ​
 +
 +\\
 +  #!/bin/sh
 +  # При использовании нескольких интерфейсов указываем их через пробел
 +  INTERFACES='​eth0 eth2';
 +  TC="/​sbin/​tc"​
 +  ​
 +  for INTERFACE in ${INTERFACES};​ do
 +    TCQA="​${TC} qdisc add dev ${INTERFACE}"​
 +    TCQD="​${TC} qdisc del dev ${INTERFACE}"​
 +  ​
 +    $TCQD root &>/​dev/​null
 +    $TCQD ingress &>/​dev/​null
 +  ​
 +    $TCQA root handle 1: htb
 +    $TCQA handle ffff: ingress
 +  ​
 +    echo "​Shaper UP ${INTERFACE}"​
 +  done
 +  ​
 +  # Доступ к странице авторизации
 +  /​sbin/​iptables -t nat -A PREROUTING -s 192.168.0.0/​24 -p tcp --dport 80 -j REDIRECT --to-ports 80
 +  /​sbin/​iptables -t nat -A PREROUTING -s 192.168.0.0/​24 -p tcp --dport 443 -j REDIRECT --to-ports 80
 +  ​
 +  # Закрыть доступ неактивизированым хостам
 +  /​sbin/​iptables -A FORWARD -j DROP
 +
 +
 +==sudo==
 +**/​etc/​sudoers**
 +  #Allow ABillS shapper
 +  apache ​  ALL = NOPASSWD: /​usr/​abills/​libexec/​linkupdown
 +  apache ​  ALL = NOPASSWD: /​sbin/​iptables
 +
 +
 +
 +
 +====Включение активных пользователей====
 +Данная команда автоматически включает всех пользователей с положительным депозитом и правами получать сервис (статус услуги активно). Активируются только те пользователи у которых прописан ​ IP адрес сервиса ​ Internet. Также обязательно на IPN  серверах доступа прописать пулы адресов для таких пользователей чтобы система знала на каких серверах доступа активировать абонентов. Данную команду стоит запускать через crontab ​ с промежутком раз в 5 минут.
 +
 +  # /​usr/​abills/​libexec/​periodic monthly MODULES=Internet LOGON_ACTIVE_USERS
 +
 +Параметры:​
 +^ NAS_IDS=1;2 | Идентификаторы серверов доступа. По умолчанию система переинициализирует пользователей на всех серверах доступа с типом '​ipcad' ​ |
 +^ TP_ID=3,6 | Номера тарифных планов для активации. По умолчанию все |
 +^ LOGIN=test,​test3 | Логины пользователей. По умолчанию все |
 +^ GID=1 | Группы пользователей ​ |
 +^ DEBUG=... | Дебаг режимы \\ 1-4 Детализация процесса \\ 5 - Отображать команды на выполнение \\ 6 - Отображать команды но не выполнять |
 +
 +====Рестарт активных IPoE сессий====
 +**Растартовать только сессии которые поднимаюстя в ручном режиме**
 +
 +  /​usr/​abills/​libexec/​periodic monthly MODULES=Internet SRESTART=1 NO_ADM_REPORT=1 NAS_IDS=1 LOCAL_NAS=1 FN=ipoe_periodic_session_restart ​
 +
 +^ NAS_IDS=1 | Список серверов доступа для рестарта |
 +^ LOCAL_NAS=1 | работать как с локальным сервером доступа. Указывается номер NAS. \\ Опция NAS_IDS игнорируется |
 +^ FN=ipoe_periodic_session_restart ​ | Функция рестарта |
 +====Утилиты====
 +
 +  * [[abills:​docs:​modules:​internet:​ipoe:​online_snapshot:​ru|Online snapshot]]