{{indexmenu_n>6}}
======Настройка GUI, СКАТ и WiFi HotSpot при включенном менеджменте сессий======
=====Топология сети=====
- Подключить оборудование согласно топологии сети.\\ {{ :dpi:dpi_options:use_cases:img1.jpg?nolink&700 |}}
=====Последовательность действий при авторизации=====
- Абонент подключается к сети WiFi
- Появляется welcome page с информацией, что абонент должен открыть браузер и идентифицировать себя
- Абонент отрывает браузер, при переходе на любой URL происходит переадресация абонента на страницу идентификации
- Абонент вводит телефонный номер, запрашивает код доступа
- Код доступа отправляется на телефонный номер через SMS
- Абонент вводит полученный код доступа
- Происходит запись сессионных куки на абонентское устройство с сохранением заданного периода, а также переход на запрошенный пользователем URL
=====Установка виртуальных машин (ВМ)=====
- Создать две виртуальные машины со следующими минимальными характеристиками:
* ВМ ''dpiui_vm'' – 1 cpu, 2Gb Ram, 50G hard disk, Guest OS Centos 7, nic 1
* ВМ ''cp_wifi_vm'' – 1 cpu, 1Gb Ram, 30G hard disk, Guest OS Centos 7, nic
- Устанавить последнюю версию CentOS 7 (build-2009 на момент написания) на обе виртуальные машины. По ходу установки выбрать минимальную установку (minimal install).\\ После установки ОС открыть консоль и установить пакеты на обе ВМ: сначалаyum install epel-release
и после: yum install nano tcpdump openssh-server openssh-clients
- Выключить selinux на обоих ВМ:
* Отредактировать файл ''/etc/sysconfig/selinux''
* Задать значение параметра ''SELINUX=disabled'' и перезагрузить ВМ
=====Установка и настройка dpiui_vm=====
- Установить DPIUI на ''dpiui_vm'' по [[dpi:dpi_components:dpiui:install_and_update:install|инструкции]]
- Настроить сеть на обоих ВМ и СКАТ:BOOTPROTO=static
ONBOOT=yes
IPADDR=10.0.0.x
NETMASK=255.255.255.0
GATEWAY=10.0.0.1
DNS1=10.0.0.2
''IPADDR'' — указать для каждого хоста согласно схеме (или использовать свою адресацию).
- Войти в GUI и добавить обе ВМ и СКАТ в разделе «ОБОРУДОВАНИЕ», следуя [[dpi:dpi_components:dpiui:user_guide:admin_section:equipment_management|инструкции]]:
=====Установка и настройка cp_wifi_vm=====
- Установить пакет ''wifi_hotspot'' на ВМ ''cp_wifi_vm'' по [[dpi:dpi_components:module_wi-fi_hotspot|инструкции]]:
- Отредактировать конфиг файл для Hotspot:nano /var/www/html/wifi_hotspot/backend/.env
Изменить/добавить только эти строчки:
- **''AAA_HOTSPOT_IP – 10.0.0.4''**\\ Адрес NAS сервера, IPv4/IPv6, если неизвестно — 0.0.0.0
- **''AAA_HOTSPOT_PORT – 0''**\\ Порт NAS сервера, число, если неизвестно — 0
- **''AAA_HOTSPOT_ID – 2''**\\ ИД точки подключения к сети передачи данных, целое число в диапазоне от 0 до 1000, необходимо заполнять для абонентов публичных WiFi-точек, соответствует идентификатору точки подключения в поле 1 из выгрузки точек подключения
- **''AAA_EXPORT_ENABLED=1''**\\ Включить экспорт ААА
- **''AUTH_CODE_LENGTH=4''**\\ Поменять количество символов в коде для SMS авторизации
Если прописан параметр ''AUTH_CODE_LENGTH'', то в файле ''/var/www/html/wifi_hotspot/frontend/env.js'' установить значение:AppEnv.AuthCodePlaceHolder = "0000";
В конце выполнить команду:php /var/www/html/wifi_hotspot/backend/artisan queue:restart
=====Установка и настройка dhcp-isc на cp_wifi_vm=====
- Установить пакет ''dhcp-isc'': yum install dhcp expect
- Настроить скрипты статического ARP и конфигурационный файл ''dhcpd.conf'':
* Сначала конфигурационный файл ''dhcpd'': nano /etc/dhcp/dhcpd.conf
Поставить свои значения ''option domain-name'' и ''option ntp-servers''!ddns-update-style none;
authoritative;
db-time-format local;
log-facility local7;
subnet 100.64.0.0 netmask 255.255.252.0 {
range 100.64.0.3 100.64.3.254;
default-lease-time 600;
max-lease-time 600;
option subnet-mask 255.255.252.0;
option broadcast-address 100.64.3.255;
option routers 100.64.0.1;
option ntp-servers ;
option domain-name-servers 10.0.0.2;
option domain-name "name.local";
on commit {
set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
set ClientMac = concat (
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,1,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,2,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,3,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,4,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,5,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,6,1))),2));
log(concat("Request: IP: ", ClientIP, " Mac: ", ClientMac));
execute("/usr/local/etc/dhcpd/clients_add_drop.sh", "add", ClientIP, ClientMac);}
on release {
set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
set ClientMac = concat (
suffix (concat ("0", binary-to-ascii (16, 8, "",
substring(hardware,1,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,2,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,3,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,4,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,5,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,6,1))),2));
log(concat("Release: IP: ", ClientIP, " Mac: ", ClientMac));
execute("/usr/local/etc/dhcpd/clients_add_drop.sh", "drop_rls", ClientIP, ClientMac);}
on expiry {
set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
log(concat("Timeout: IP: ", ClientIP));
execute("/usr/local/etc/dhcpd/clients_add_drop.sh", "drop_exp", ClientIP);}
}
subnet 10.0.0.0 netmask 255.255.255.0 {
}
Создать директории и изменить её права:mkdir /usr/local/etc/dhcpd/ && chown dhcpd:dhcpd /usr/local/etc/dhcpd/
touch /usr/local/etc/dhcpd/clients_add_drop_mysql.sh && touch /usr/local/etc/dhcpd/clients_add_drop.sh
&& chown dpiacc:dpiacc /usr/local/etc/dhcpd/*
chmod 755 /usr/local/etc/dhcpd/
chmod 755 /usr/local/etc/dhcpd/*
Далее скопировать следующий скрипт в ''/usr/local/etc/dhcpd/clients_add_drop.sh'':#!/usr/bin/expect -f
set METHOD [lindex $argv 0]
set IP_ADDR [lindex $argv 1]
set MAC_ADDR [lindex $argv 2]
set MAC_ADDR [string toupper $MAC_ADDR]
#Клиентский интерфейс на микротике:
set INT_ClIENT "vWifi"
set status 0
#Запись dhcp-lease (start and end) в базе Hotspot
spawn /usr/local/etc/dhcpd/./clients_add_drop_mysql.sh "$METHOD" "$IP_ADDR" "$MAC_ADDR"
expect "end_mysql";
#Подключение к роутеру
spawn ssh -i /usr/local/etc/dhcpd/.ssh/id_rsa admin+t@100.64.0.1 -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null
expect {
"password:" {send "\n";}
"timeout" {set status 1;}
">" {}
}
if { $METHOD == "add" && $status == 0} {
send "ip arp add address=$IP_ADDR mac-address=$MAC_ADDR interface=$INT_ClIENT\r";
expect ">";
send "ip firewall address-list remove \[find address=$IP_ADDR list=DROP_CLIENTS\]\r";
expect ">";
send "log info \"ADD: $IP_ADDR -- $MAC_ADDR\"\r";
expect ">"
send "quit\r";
expect eof
} elseif { $METHOD == "drop_rls" && $status == 0} {
send "ip arp remove \[find mac-address=$MAC_ADDR\]\r";
expect ">";
send "ip firewall address-list add address=$IP_ADDR list=DROP_CLIENTS\r";
expect ">";
send "log info \"DROP_RLS: $IP_ADDR -- $MAC_ADDR\"\r";
expect ">"
send "quit\r";
expect eof
} elseif { $METHOD == "drop_exp" && $status == 0} {
send "ip arp remove \[find address=$IP_ADDR\]\r";
expect ">";
send "ip firewall address-list add address=$IP_ADDR list=DROP_CLIENTS\r";
expect ">";
send "log info \"DROP_EXP: $IP_ADDR\"\r";
expect ">"
send "quit\r";
expect eof
} elseif {$status == 0} {
send "quit\r";
expect eof
exit 1;
}
set status 0
#Подключение к СКАТ и прописывание статической записи абонента
spawn ssh -i /usr/local/etc/dhcpd/.ssh/id_rsa dpisu@10.0.0.6 -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null
expect {
"password" {send "\r"}
"timeout" {set status 1; exit 4}
"\$" {}
}
if {$status == 0} {
send "/var/dpiui2/add_captive_portal_auth_ivstar.sh $IP_ADDR\r"
expect "\$"
send "exit\r";
expect eof
}
И скопировать в ''/usr/local/etc/dhcpd/clients_add_drop_mysql.sh'' скрипт для добавления в базу Hotspot данных о ''dhcp-lease'':#!/bin/bash
METHOD=$1
IP_ADDR=$2
MAC_ADDR=$3
MYSQL_CONNECT_LEASEDB="mysql -u root -pvasexperts -Dwifi_hotspot -h 127.0.0.1"
if [ "$METHOD" = "add" ]; then
echo "insert into hotspot_aaa(TYPE,MAC,IP) values("1",\""$MAC_ADDR"\",\""$IP_ADDR"\");" | $MYSQL_CONNECT_LEASEDB
elif
[ "$METHOD" = "drop_rls" ]; then
echo "insert into hotspot_aaa(TYPE,MAC,IP) values("2",\""$MAC_ADDR"\",\""$IP_ADDR"\");" | $MYSQL_CONNECT_LEASEDB
elif
[ "$METHOD" = "drop_exp" ]; then
echo "insert into hotspot_aaa(TYPE,MAC,IP) values("2",\"""\",\""$IP_ADDR"\");" | $MYSQL_CONNECT_LEASEDB
fi
echo "end mysql"
Включить сервер ''dhcpd'' и добавиить правило в firewall:systemctl enable dhcpd
systemctl start dhcpd
firewall-cmd --permanent —add-service=dhcp
firewall-cmd --reload
- Создать скрипт для переноса файла сессий на FTP:mkdir /srv/aaa/
mkdir /srv/aaa/processed/
mkdir /srv/aaa/script/
touch /srv/aaa/script/script.sh
Скопировать содержимое в ''/srv/aaa/script/script.sh'':#!/bin/bash
FTP_ADDR=""
FTP_USER=""
FTP_PASS=""
#Директория с ААА Hotspot
DIR="/var/www/html/wifi_hotspot/backend/storage/aaa_events"
ls $DIR | while read f; do
curl --user $FTP_USER:$FTP_PASS --upload-file $DIR/$f ftp://$FTP_ADDR/ISP/aaa/ > /dev/null 2>&1
mv $DIR/$f /srv/aaa/processed
и добавить на выполнение в cron:crontab -e
*/5 * * * * /srv/aaa/script/script.sh
- Создать открытый и закрытый ключ:mkdir usr/local/etc/dhcpd/.ssh && cd usr/local/etc/dhcpd/.ssh
ssh-keygen -t rsa
Секретную фразу оставить пустой.\\
**Внимание! Перенести id.pub на СКАТ (10.0.0.6) и Mikrotik (100.64.0.1)!**
* СКАТ (10.0.0.6): перенести файл по SSH на СКАТ и добавить в ''authorized_keys'' cat id.pub >> ~/.ssh/authorized_keys
* Mikrotik (100.64.0.1): перенести файл по SSH или через Web-интерфейс и сделать import: user ssh-keys import public-key-file=id.pub user=admin
=====Настройка СКАТ=====
- Настроить на СКАТе DB для юзеров:nano /etc/dpi/fastdpi.conf
udr=1
- Настроить фильтрацию по федеральному списку:black_list_sm=0
federal_black_list=1
#редирект на страничку
black_list_redirect=http://block.lan/
- Задать класс по умолчанию: class_order=0
- Включить выгрузку IPFIX:
* Настроить интерфейс ''eth1'': ''nano /etc/sysconfig/network-scripts/ifcfg-eth1'' BOOTPROTO=none
ONBOOT=yes
IPADDR=
PREFIX=24
netflow=8
netflow_dev=eth1
netflow_timeout=20
netflow_full_collector_type=2
netflow_full_collector=127.0.0.1:1500
netflow_passive_timeout=10
netflow_active_timeout=20
netflow_rate_limit=30
ipfix_dev=eth1
ipfix_tcp_collectors=
ipfix_meta_tcp_collectors=
ipfix_observation=127
ipfix_dns_tcp_collectors=
ipfix_nat_udp_collectors=
- Сделать трафик в class 7 минимальным:tbf_class7=rate 1kbit
tbf_inbound_class7=rate 1kbit
- Включить редирект на Captive portal: ''cp_server=10.0.0.4 (ip cp)''
- Выключить NAT для приватных адресов: ''nat_exclude_private=1''
- Остальные настройки СКАТ:ctrl_port=29000
ctrl_dev=lo
scale_factor=1
num_threads=2
class_order=0
mem_tracking_flow=1500000
mem_tracking_ip=3000000
http_parse_reply=1
rlimit_fsize=32000000000
- Заменить содержимое скрипта ''/var/dpiui2/add_captive_portal_auth_ivstar.sh'' на следующие:#!/bin/sh
fdpi_ctrl load --service 5 --profile.name='hotspot_white_list_profile' --ip $1
fdpi_ctrl load --service 11 --profile.name='NAT_PUBLIC_WIFI' --ip $1
fdpi_ctrl load --policing --profile.name='wifi_hotspot_auth_policing' --ip $1
- Добавить открытый ключ для доступа с Hotspot на СКАТ в файл ''/home/dpisu/.ssh/authorized_keys'':#!/bin/sh
fdpi_ctrl load --service 5 --profile.name='hotspot_white_list_profile' --ip $1
fdpi_ctrl load --service 11 --profile.name='NAT_PUBLIC_WIFI' --ip $1
fdpi_ctrl load --policing --profile.name='wifi_hotspot_auth_policing' --ip $1
Сохранить все изменения в файле ''/etc/dpi/fastdpi.conf'' и делаем ''reboot''.
- Настроить интерфейс ''eth0'' для доступа к Hotspot и DPIUInano /etc/sysconfig/network-scripts/ifcfg-eth0
BOOTPROTO=none
ONBOOT=yes
IPADDR=10.0.0.6
PREFIX=24
DNS1=10.0.0.2
=====Настройка DPI и Hotspot через DPIUI=====
Настройка приоритизации по протоколам.
1. Перейти во вкладку Управление DPI → ПРИОРИТИЗАЦИЯ ПО ПРОТОКОЛАМ (DSCP) → Редактор
* cs0 – что пропускаем
* cs1 – что зажимаем тарифом
* cs7 – что зажимаем глобальноBittorrent cs7
default cs1
dns cs0
http cs0
https cs0
2. CG-NAT в СКАТе:\\ Перейти во вкладку Управление услугами → Услуги → CGNAT\\ Создать профиль:\\ Описание: ''NAT_WIFI''\\Тип: ''CGNAT''\\ Nat IP пул: ''''\\ Число tcp сессий: ''1000'' (на абонента)\\ Число udp сессий: ''1000'' (на абонента)
**Настройка Hotspot:**
- Перейти во вкладку Управление услугами → Hotspot\\ Web сервер: ''WiFi-Hotspot'' (ВМ ''cp_wifi_vm'' заведенная ранее в DPIUI)\\ Captive portal URL: ''https://10.0.0.4'' (url cp)\\ Время жизни сессии: ''36000''\\ URL для редиректа: ''https://google.ru'' (страница редиректа после успешной авторизации)
- Включить WiFi и SMS авторизацию\\ SMS авторизацию через сервис sms.ru:\\ Метод: ''Post''\\ Url: ''https://sms.ru/sms/send''
- Тело (From):api_id =
to = [PHONE]
msg = Ваш код для WIFI: [CODE]
**Настройка тарифов Hotspot (в редакторе):**
- Тариф для авторизации:htb_inbound_root=rate 5mbit ceil 5mbit burst 2500kbit cburst 2500kbit
htb_inbound_class0=rate 8bit ceil 5mbit burst 8bit cburst 2500kbit
htb_inbound_class1=rate 8bit ceil 8bit burst 8bit cburst 8bit
htb_inbound_class2=rate 8bit ceil 8bit burst 8bit cburst 8bit
htb_inbound_class3=rate 8bit ceil 8bit burst 8bit cburst 8bit
htb_inbound_class4=rate 8bit ceil 8bit burst 8bit cburst 8bit
htb_inbound_class5=rate 8bit ceil 8bit burst 8bit cburst 8bit
htb_inbound_class6=rate 8bit ceil 8bit burst 8bit cburst 8bit
htb_inbound_class7=rate 8bit ceil 8bit burst 8bit cburst 8bit
htb_root=rate 100kbit ceil 100kbit burst 50kbit cburst 50kbit
htb_class0=rate 8bit ceil 100kbit burst 8bit cburst 50kbit
htb_class1=rate 8bit ceil 8bit burst 8bit cburst 8bit
htb_class2=rate 8bit ceil 8bit burst 8bit cburst 8bit
htb_class3=rate 8bit ceil 8bit burst 8bit cburst 8bit
htb_class4=rate 8bit ceil 8bit burst 8bit cburst 8bit
htb_class5=rate 8bit ceil 8bit burst 8bit cburst 8bit
htb_class6=rate 8bit ceil 8bit burst 8bit cburst 8bit
htb_class7=rate 8bit ceil 8bit burst 8bit cburst 8bit
- Тариф для бесплатного WiFi:htb_inbound_root=rate 10mbit ceil 10mbit burst 5mbit cburst 5mbit
htb_inbound_class0=rate 8bit ceil 10mbit burst 8bit cburst 5mbit
htb_inbound_class1=rate 8bit ceil 10mbit burst 8bit cburst 5mbit
htb_inbound_class2=rate 8bit ceil 10mbit burst 8bit cburst 5mbit
htb_inbound_class3=rate 8bit ceil 10mbit burst 8bit cburst 5mbit
htb_inbound_class4=rate 8bit ceil 10mbit burst 8bit cburst 5mbit
htb_inbound_class5=rate 8bit ceil 10mbit burst 8bit cburst 5mbit
htb_inbound_class6=rate 8bit ceil 10mbit burst 8bit cburst 5mbit
htb_inbound_class7=rate 8bit ceil 8bit burst 8bit cburst 8bit
htb_root=rate 10mbit ceil 10mbit burst 5mbit cburst 5mbit
htb_class0=rate 8bit ceil 10mbit burst 8bit cburst 5mbit
htb_class1=rate 8bit ceil 10mbit burst 8bit cburst 5mbit
htb_class2=rate 8bit ceil 10mbit burst 8bit cburst 5mbit
htb_class3=rate 8bit ceil 10mbit burst 8bit cburst 5mbit
htb_class4=rate 8bit ceil 10mbit burst 8bit cburst 5mbit
htb_class5=rate 8bit ceil 10mbit burst 8bit cburst 5mbit
htb_class6=rate 8bit ceil 10mbit burst 8bit cburst 5mbit
htb_class7=rate 8bit ceil 8bit burst 8bit cburst 8bit
3. Услуги:\\
Перейти к управлению услугами, включить CGNAT и выбрать профиль NAT_WIFI
4. Белый список:\\
Перейти во вкладку Управление услугами → Услуги → Черные и белые списки.\\
Выбрать нужный профиль и создать список: ''ip 10.0.0.4 (ip cp)''\\
Если для CP есть запись в DNS, то добавить так: ''cn example.com''\\
Сохранить настройки через интерфейс.
=====Настройка Mikrotik 100.64.0.1=====
- Настроить клиентский интерфейса Mikrotik\\ Обновить до Router OS 6.48.x/interface vlan
add arp=reply-only arp-timeout=10m interface=sfp1 name=vWifi vlan-id=40
/ip settings
set icmp-rate-limit=5 rp-filter=strict
/ip address
add address=100.64.0.1/22 interface=vWifi network=100.64.0.0
/ip dhcp-relay
add dhcp-server=10.0.0.4 disabled=no interface=vWifi local-address=100.64.0.1 name=relay1
/ip dns
set servers=10.0.0.2
/ip route
add distance=1 dst-address=10.0.0.4/32 gateway=<указать шлюз> pref-src=100.64.0.1
/system clock
set time-zone-name=Europe/Moscow
/system ntp client
set enabled=yes primary-ntp=<указать ntp сервер>
/tool bandwidth-server
set authenticate=no enabled=no
- Настроить IP связь между DHCP/Hotspot и Mikrotik
=====Настройка unifi network=====
- Настроить точки ubiquiti:
* Установить unifi network на сервер
* Настроить DHCP для выдачи настроек точкам
* Если точки и контроллер в разных подсетях, то в DHCP указать option 43 и присвоить ей значение IP контроллера (в формате hex) используя инструкцию: https://help.ui.com/hc/en-us/articles/204909754-UniFi-Device-Adoption-Methods-for-Remote-UniFi-Controllers\\ **Внимание!** Нужно переключиться на старый интерфейс, для этого надо отжать рычажок в System Settings → New USER Interface
- Настроить Сеть и прочее:
* Перейти в настройки и далее в Network\\ Создать новою сеть и указать vlan 40 и название WiFi-Client, шлюз указать как 100.64.0.1/22, остальное по желанию
* Перейти в настройки и далее в Guest Control\\ В Pre-Authorization Access указать IP Hotspot (10.0.0.4)
* Перейти в настройки и далее в Wireless Networks
* Создать WiFi сеть
* Сразу открыть ADVANCED OPTIONS
* Вписать любое имя/SSID
* Поставить галочку напротив Enabled
* Поставить галочку напротив Open
* Поставить галочку напротив Guest Policy
* В Network выбрать WiFi-Client
* Поставить галочку напротив Block LAN to WLAN Multicast and Broadcast Data
* Поставить галочку напротив Allow BSS Transition with WNM
* Поставить галочку напротив Block Tunneled Link Direct Setup (TDLS) connections
* Поставить галочку напротив Isolates stations on layer 2 (ethernet) level
* Нажать Save