Для организации провайдером услуги СМС-авторизации на основе хотспотов, подключенных через Интернет, ООО "Нетамс" рекомендует придерживаться описанной ниже схемы.
Данный сценарий подходит, если:
- вы обслуживаете значительное число небольших площадок (мест оказания услуги), подключенных через Интернет
- подключения площадок осуществляется через сеть стороннего провайдера Интернет
- вы используете в качестве хотспотов устройства, установленные непосредственно на площадках клиента - маршрутизаторы Mikrotik со встроенной точкой доступа, либо точки доступа, перепрошитые на OpenWrt или dd-wrt
Сценарий не подходит вам, если вы используете:
- профессиональное Wi-Fi оборудование, управляемое контроллером (выполняющим роль хотспота)
- вы обеспечиваете прозрачный (Layer-2) транспорт сетей с площадок клиентов, в центральный узел вашей сети, где установлен большой хотспот (маршрутизатор Mikrotik, Cisco ASR, Alcatel и т.п.)
- у вас одна площадка оказания услуги (корпоративная сеть)
Рекомендуемая схема предполагает:
- Установку маршрутизатора-хотспота на каждой площадке оказания услуги. Внешний (WAN) интерфейс хотспота подключается к местному провайдеру Интернет, внутренний (LAN) интерфейс либо не используется, либо к нему подключена локальная сеть с точками доступа
- Хотспот либо содержит в себе встроенную точку доступа, либо не содержит радио-модуля. В последнем случае Wi-Fi доступ обеспечивается подключенными к LAN-порту любыми точками доступа Wi-Fi, работающими в режиме "access point".
- Для управления радио-ресурсами (каналы, SSID и т.п.) в случае применения внешних точек доступа рекомендуется использовать Uniquity UniFi. При этом контроллер точек доступа UniFi может располагаться на сервере WNAM. На контроллере должен быть отключен "гостевой доступ"
- Для обеспечения надежности и безопасности обмена информацией между хотспотами и центральным узлом вашей сети требуется настроить VPN-туннели. В противном случае вам придется открыть доступ к порталу авторизации абонентов, и к RADIUS-серверу, для всего Интернета
- Трафик авторизации абонентов (страницы приветствия, реклама), трафик RADIUS и NetFlow будут идти до сервера WNAM в туннеле, а остальной абонентский трафик (доступ в интернет) - напрямую через локального провайдера Интернет
- В качестве VPN-сервера используется OpenVPN с парольной авторизацией
Конфигурация интерфейсов на сервере
eth0: 1.2.3.4
tun0: 10.1.0.255
Конфигурация OpenVPN сервиса на сервере
Установите пакет openvpn:
apt-get install openvpn easy-rsa
Создайте сертификаты согласно инструкции отсюда: https://www.digitalocean.com/community/tutorials/how-to-set-up-an-openvpn-server-on-debian-8#step-5-—-configure-and-build-the-certificate-authority
Отредактируйте файл /etc/openvpn/server.conf
mode server
dev tun
proto tcp-server
tls-server
port 1194
topology subnet
ca keys/ca.crt
cert keys/wnam.provider.ru.crt
key keys/wnam.provider.ru.key
dh keys/dh2048.pem
cipher AES-128-CBC
auth md5
keepalive 10 120
status /var/log/openvpn-status.log
log /var/log/openvpn.log
user nobody
group nogroup
persist-key
persist-tun
ifconfig 10.1.0.255 10.1.0.254
ifconfig-pool 10.1.0.1 10.1.0.253
route 10.1.0.0 255.255.0.0
push "route 10.1.0.255"
ifconfig-pool-persist ipp.txt 0
auth-user-pass-verify /etc/openvpn/verify.sh via-file
script-security 2
client-cert-not-required
username-as-common-name
verb 2
Создайте скрипт, выполняющий проверку логина-пароля /etc/openvpn/verify.sh
#!/bin/sh
USERS=`cat /etc/openvpn/user.pass`
vpn_verify() {
if [ ! $1 ] || [ ! $2 ]; then
#echo "No username or password: $*"
exit 1
fi
## it can also be done with grep or sed
for i in $USERS; do
if [ "$i" = "$1:$2" ]; then
## you can add here logging of users
## if you have enough space for log file
#echo `date` $1:$2 >> your_log_file
exit 0
fi
done
}
if [ ! $1 ] || [ ! -e $1 ]; then
#echo "No file"
exit 1
fi
## $1 is file name which contains
## passed username and password
vpn_verify `cat $1`
#echo "No user with this password found"
exit 1
Затем выполните:
chmod +x /etc/openvpn/verify.sh
Создайте файл с IP-адресами клиентов /etc/openvpn/user.pass
vpn1,10.1.0.1
vpn2,10.1.0.2
vpn3,10.1.0.3
Создайте файл с логинами-паролями VPN клиентов /etc/openvpn/ipp.txt
vpn1:ate45cf7y345c5y2x3
vpn2:r2d346c34t4356yucf
vpn3:23cxterthure5y2yw3
Перезапустите сервис openvpn, проконтролируйте успешность запуска в файле /var/log/openvpn.log:
Конфигурация интерфейсов на хотспоте
Настройку маршрутизатора Микротик будем демонстрировать на примере первого клиента, имеющего vpn-имя vpn1.
В качестве WAN интерфейса используется ether1-gateway с настройками от локального провайдера Интернет:
/ip address
add address=272.16.130.9/24 interface=ether1-gateway network=272.16.130.0
/ip route
add distance=1 gateway=272.16.130.1
В качестве LAN/WLAN интерфейса используется bridge с такими настройками:
/ip address
add address=10.1.1.1/24 interface=bridge-guest network=10.1.1.0
Интерфейс для OpenVpn подключения к серверу WNAM:
/interface ovpn-client
add auth=md5 cipher=aes128 connect-to=vpn.provider.ru name=wnam password=ate45cf7y345c5y2x3 user=vpn1
Настройка DHCP и DNS:
/ip dhcp-server
add address-pool=dhcp-1 disabled=no interface=bridge lease-time=1h name=server
/ip dhcp-server network
add address=10.1.1.0/24 dns-server=8.8.4.4 gateway=10.1.1.1
/ip pool
add name=dhcp-102 ranges=10.1.1.2-10.1.1.254
/ip dns
set allow-remote-requests=yes servers=8.8.4.4
/ip dns static
add address=10.1.0.255 name=wnam.provider.ru
Внимание! Статической DNS записью мы переопределяем (для абонентов) адрес сервера авторизации с той целью, чтобы трафик авторизации шёл в VPN-туннеле.
Настройка трансляции адресов (NAT):
/ip firewall nat
add action=masquerade chain=srcnat comment="defconf: masquerade" out-interface=ether1-gateway
add action=masquerade chain=srcnat out-interface=wnam src-address=10.1.1.0/24
Теперь со стороны хотспота надо проверить, что портал авторизации доступен:
/ping wnam.provider.ru src-address=10.1.1.1
/system telnet wnam.provider.ru port=80
Настройка Radius клиента и Netflow-клиента:
/radius
add address=wnam.provider.ru domain=wnam secret=wnam_radius service=hotspot
/ip traffic-flow
set interfaces=ether1-gateway
/ip traffic-flow target
add dst-address=wnam.provider.ru port=20002 version=5
Конфигурация хотспота
/ip hotspot
add disabled=no idle-timeout=none interface=bridge name=mk-wnam profile=mk-profile-wnam
/ip hotspot profile
add dns-name=mk.provider.ru hotspot-address=10.1.1.1 html-directory=hotspot login-by=http-pap name=mk-profile-wnam radius-default-domain=wnam radius-interim-update=5m use-radius=yes
/ip hotspot user profile
set [ find default=yes ] add-mac-cookie=no name=default1 shared-users=unlimited status-autorefresh=1h
/ip hotspot walled-garden
add dst-host=*.gosuslugi.ru dst-port=443
add dst-host=ocsp.int-x3.letsencrypt.org dst-port=80
add dst-host=cert.int-x3.letsencrypt.org dst-port=80
add dst-host=*.provider.ru dst-port=443
add dst-host=provider.ru dst-port=443
add dst-host=*.provider.ru dst-port=80
add dst-host=provider.ru dst-port=80
add dst-host=10.1.0.255 dst-port=80
Содержимое файла hotspot/rlogin.html:
<html><head><title>...</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="expires" content="-1">
</head>
<body>
<form name="wnamlogin" action="http://wnam.provider.ru/cp/mikrotik" method="post">
<input type="hidden" name="dst" value="$(link-orig)" />
<input type="hidden" name="username" value = "user"/>
<input type="hidden" name="password" value = "password" />
<input type="hidden" name="mac" value = "$(mac)" />
<input type="hidden" name="ip" value = "$(ip)" />
<input type="hidden" name="server-name" value = "$(server-name)" />
<input type="hidden" name="server-address" value = "$(server-address)" />
<input type="hidden" name="client-id" value="$(client-id)"/>
<input type="hidden" name="site-id" value="$(site-id)"/>
</form>
<script type="text/javascript">
<!--
document.wnamlogin.submit();
//-->
</script>
</body>
</html>
Конфигурация WNAM
Настройка сервера доступа
Тип: Mikrotik
Адрес: 10.1.0.1 (туннельный адрес хотспота)
Отметить:Использовать счетчики аккаунтинга, Определять имена абонентов, Принимать детализацию потоков NetFlow
Настройка площадки:
Присвоенная IP подсеть: 10.1.1.0/24 (диапазон IP-адресов клиентов)