Для организации провайдером услуги СМС-авторизации на основе хотспотов, подключенных через сеть Интернет, мы рекомендуем придерживаться описанной ниже схемы.

Данный сценарий вам подходит, если:

Сценарий не подходит, если:

Рекомендуемая схема предполагает:

  1. Установку маршрутизатора-хотспота на каждой площадке оказания услуги. Внешний (WAN) интерфейс хотспота подключается к местному провайдеру сети Интернет, внутренний (LAN) интерфейс либо не используется, либо к нему подключена локальная сеть с точками доступа.
  2. Хотспот может содержать в себе встроенную точку доступа либо не содержать радио-модуля. В последнем случае Wi-Fi доступ обеспечивается подключенными к LAN-порту любыми точками доступа Wi-Fi, работающими в режиме "access point".
  3. Для управления радио-ресурсами (каналы, SSID и т.п.) в случае применения внешних точек доступа рекомендуется использовать Uniquity UniFi. При этом, контроллер точек доступа UniFi может располагаться на сервере системы WNAM. На контроллере должен быть отключен "гостевой доступ".
  4. Для обеспечения надежности и безопасности обмена информацией между хотспотами и центральным узлом используемой сети требуется настроить VPN-туннели. В противном случае придется открыть доступ к порталу авторизации абонентов и к RADIUS-серверу для всего Интернета.
  5. Трафик авторизации абонентов (страницы приветствия, реклама), трафик RADIUS и NetFlow будут идти до сервера системы WNAM в туннеле, а остальной абонентский трафик (доступ в сеть Интернет) - напрямую через локального провайдера Интернет.
  6. В качестве VPN-сервера используется OpenVPN с парольной авторизацией.
Для настройки площадок рекомендуется придерживаться непересекающейся схемы IP-адресации клиентских подсетей. Используется частная авторизация. В данном примере используется:

Конфигурация интерфейсов на сервере

Необходимо установить сетевые интерфейсы:

Конфигурация OpenVPN сервиса на сервере

Необходимо установить пакет openvpn:

 apt-get install openvpn easy-rsa

Затем необходимо создать сертификаты согласно инструкции:
Для удобства работы скопируйте дистрибутив easy-rsa в папку etc

cp -r /usr/share/easy-rsa /etc

Далее перейдите в скопированную папку:

cd /etc/easy-rsa

Теперь создайте центр сертификации (CA):

./easyrsa init-pki
touch pki/.rnd
./easyrsa build-ca

На запрос  нужно ввести пароль, который далее будет использоваться для генерации сертификатов.
Далее на запрос введите наименование центра сертификации, например WNAM.
После этого сгенерируйте файл параметров Диффи-Хеллмана dh.pem

./easyrsa gen-dh

Затем создайте сертификат и ключ для сервера:

./easyrsa gen-req ovpn-server nopass
./easyrsa sign-req server ovpn-server

Выпущенные сертификаты будут располагаться в pki/issued.

Теперь скопируйте сертификат и ключ в конфигурационную папку openvpn:

mkdir /etc/openvpn/keys
cp pki/ca.crt pki/dh.pem /etc/openvpn/keys
cp pki/private/ovpn-server.key pki/issued/ovpn-server.crt /etc/openvpn/keys

Далее следует отредактировать файл /etc/openvpn/server.conf:

mode server
dev tun
proto tcp-server
tls-server
port 1194
topology subnet
ca keys/ca.crt
cert keys/ovpn-server.crt
key keys/ovpn-server.key
dh keys/dh.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
verify-client-cert none
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.

systemctl daemon-reload
systemctl restart openvpn

Конфигурация интерфейсов на хотспоте

Настройка маршрутизатора Mikrotik будеn демонстрироватьcz на примере первого клиента, имеющего 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

Для конфигурации системы следует настроить сервер доступа:

А также следует произвести настройку площадки. Для этого установить IP-адрес подсети 10.1.1.0/24 (диапазон IP-адресов клиентов).