Начиная с версии 1.4.1411 система WNAM поддерживает взаимодействие с точками доступа/маршрутизаторами Zyxel Keenetic, на которые установлены современные прошивки. Keenetic использует модифицированную версию CoovaChilli, поддерживает взаимодействие по RADIUS, ограничение на длительности сессии и скорость в канале до абонента, позволяет сбросить активную сессию заданного абонента или все сессии.

В нижеследующем примере использовалось устройство Keenetic Giga II с версией ПО 2.10.A.7.0. Устройство имело WAN адрес 172.16.130.88, и в качестве LAN сегмента использовалась встроенная точка доступа с адресом на интерфейса 192.168.1.1. Сервер авторизации WNAM работал в другой сети, связь с которой осуществлялась по сети Интернет через OpenVPN туннель, так как описано здесь (раздел "VPN-сеть для подключения хотспотов через Интернет" настоящей документации).

Домашняя сеть представлена сегментом Home, гостевая сеть не используется.

Помимо WAN подключения, настроено OpenVPN подключение и присвоен туннельный адрес 172.16.255.6.

Настройка OpenVPN производится путем вставки клиентской части конфигурационного файла. В данном примере используется авторизация по паре ключ-пароль, а не по клиентским сертификатом (это сделано для совместимости сервера с клиентами Mikrotik).

Конфигурационный файл клиента приведен ниже:

client
dev tun
proto tcp
remote wnam-srv1.provider.net 11194
resolv-retry infinite
nobind
persist-key
persist-tun
cipher AES-128-CBC
auth md5
verb 3
<ca>
-----BEGIN CERTIFICATE-----
здесь идет СА сертификат вашего сервера openvpn
-----END CERTIFICATE-----
</ca>
<auth-user-pass>
keenetic
keenetic
</auth-user-pass>

Беспроводная сеть (точка доступа) настроена так, как показа ниже. Можно выбрать другое имя сети и отключить Wi-Fi безопасность.

Последним шагом настраивается сервис Captive Portal, по сути являющийся конфигурацией к ChilliSpot. Для настройки сервиса необходимо выполнить следующие действия:

  • выбрать режим "ручная настройка", чтобы указать все параметры самостоятельно;
  • в окне выбора сегмента ничего не выбирать;
  • в поле "UAM Allowed" указать IP-адрес сервера WNAM - это будет разрешенный абонентам до авторизации адрес (аналог Walled Garden);
  • в поле "UAM Server" указать путь до сервера авторизации системы WNAM клиентского интерфейса (поскольку взаимодействие идет в туннеле, в данном примере указан туннельный адрес сервера WNAM, и путь: http://172.16.255.1/cp/keenetic);
  • в поле "UAM Secret" указать ключ взаимодействия для шифрования паролей (это должен быть тот же ключ, что указан в параметре "пароль" настроек сервера доступа (см. ниже.));
  • указать IP-адрес RADIUS-сервера (это тот же сервер WNAM) и RADIUS-пароль (должен совпадать с значением, указанным в /etc/freeradius/clienst.conf на сервере WNAM);
  • в качестве "RADIUS Location ID" указать идентификатор площадки, которую настроили для Keenetic на сервере WNAM (это требуется для того, чтобы в случае пересекающихся диапазонов клиентских IP-сетей на разных роутерах Keenetic отделить статистику этих сетей и площадок друг от друга).

Помимо этих настроек в интерфейсе командной строки роутера необходимо выполнить ряд дополнительных действий. В этот интерфейс можно попасть через telnet.

Дополнительные команды для отключение аппаратного ускорения роутинга  (без этого счетчики байт в RADIUS сообщениях, и, соответственно, вся статистика по трафику будет некорректной):

no ppe software
no ppe hardware

Необходимо установить NAS-IP-Address в параметрах RADIUS-сообщений, для того чтобы сервер WNAM мог отделить трафик от разных роутеров. Рекомендуется указывать WAN адрес или туннельный адрес роутера:

interface Chilli0 chilli nasip 172.16.255.6

На этом настройка роутера Keenetic закончена. Можно перейти в журнал роутера, чтобы убедиться в работе CoovaChilli и OpenVPN-клиента:

Полный конфигурационный файл роутера приведен здесь (startup-config.txt).

Затем следует настроить систему WNAM. На самом сервере следует настроить OpenVPN-сервер, создать запись о новом маршрутизаторе Keenetic в файлах ipp.txt и users.txt, а также указать RADIUS-ключ в конфигурационном файле /etc/freeradius/clients.conf.

В веб-интерфейсе администратора системы WNAM необходимо создать запись о сервере доступа типа Keeentic, укажите туннельный IP-адрес, логин и пароль (они же будут использоваться для сброса сессии абонента через API роутера), включить чекбокс "Использовать счетчики аккаунтинга" (раздел "Конфигурация" → "Сервера доступа" вкладка "Параметры" настроек выбранного сервера).

Затем следует создать площадку с заданным идентификатором (номером) (в примере - 5), выбрать в выпадающем списке соответствующий сервер доступа (только что созданный), указать диапазон IP-адресов площадки (раздел "Конфигурация" → "Площадки" вкладка "Параметры").

При успешном подключении к сети Wi-Fi абонента система WNAM отобразит работающую сессию подключения.

При этом в лог-файле /var/log/tomcat8/catalina.out появятся следующие строки:

23:42:13.325 DEBUG [c.n.w.web.cp.CaptivePortalController:630] - CP Keenetic redirect: cid=4C:57:CA:XX:XX:XX, ip=192.168.1.2, ap='10:7b:ef:60:0f:58', Keenetic=192.168.1.1:3990, challenge=fb39b73e23bd70cb0766e604b3e7c9cb
23:42:13.343 DEBUG [c.n.w.web.cp.CaptivePortalController:2158] - processAuthRequest KEENETIC: username=4C:57:CA:XX:XX:XX, ip=192.168.1.2, server=192.168.1.1:3990, site_id=5, domain_id=fb39b73e23bd70cb0766e604b3e7c9cb, dst='http://bash.im'
23:42:13.343 DEBUG [c.n.w.web.cp.CaptivePortalController:2327] - processRedirectRequestCi mac=4C:57:CA:XX:XX:XX, method=FORM, formName=58bdc4965e4df6273ac60210, redirectUrl=http://bash.im, key=a064a5a8-f940-4a49-af65-e79c306e4416
23:42:17.111 DEBUG [c.n.w.web.cp.CaptivePortalController:2016] - RedirectCi login: site_id=5, username=4C:57:CA:XX:XX:XX, dst='http://bash.im', dst_extra='null'
23:42:17.112 DEBUG [c.n.w.web.cp.CaptivePortalController:2752] - loginAtNasCi KEENETIC mac=4C:57:CA:XX:XX:XX, ip=192.168.1.2, server=192.168.1.1:3990, dst='http://bash.im'
23:42:17.115 DEBUG [com.netams.wnam.web.cp.CoovaChilli:62] - backToKeenetic login len=501, server='192.168.1.1:3990', username=4C:57:CA:XX:XX:XX, enc_password=8b58c44d54d202af, dst='http://bash.im'
23:42:17.235 INFO [WnamRadius:659] - AUTH for new session ID=59a71fbb00000001-2c0f4c, request MAC=4C:57:CA:XX:XX:XX, IP=192.168.1.2, cust_clientid=null
23:42:17.261 INFO [WnamRadius:842] - ACCT Start new session ID=59a71fbb00000001-2c0f4c, MAC=4C:57:CA:XX:XX:XX, IP=192.168.1.2, NAS=172.16.255.6
23:47:17.764 INFO [WnamRadius:842] - ACCT Interim-Update existing session ID=59a71fbb00000001-2c0f4c, duration=00:05:00, MAC=4C:57:CA:XX:XX:XX, IP=192.168.1.2, NAS=172.16.255.6
23:52:17.162 INFO [WnamRadius:842] - ACCT Interim-Update existing session ID=59a71fbb00000001-2c0f4c, duration=00:09:59, MAC=4C:57:CA:XX:XX:XX, IP=192.168.1.2, NAS=172.16.255.6
23:57:17.417 INFO [WnamRadius:842] - ACCT Interim-Update existing session ID=59a71fbb00000001-2c0f4c, duration=00:15:00, MAC=4C:57:CA:XX:XX:XX, IP=192.168.1.2, NAS=172.16.255.6
00:01:21.056 INFO [WnamRadius:842] - ACCT Stop existing session ID=59a71fbb00000001-2c0f4c, duration=00:19:03, MAC=4C:57:CA:XX:XX:XX, IP=192.168.1.2, NAS=172.16.255.6

C точки зрения RADIUS-сервера в его лог файле будет примерно следующее (запуск через freeradius -X):

rad_recv: Access-Request packet from host 172.16.255.6 port 53932, id=10, length=262
ChilliSpot-Version = "1.3.1.4"
User-Name = "4C:57:CA:XX:XX:XX"
User-Password = "\261-f\324\345\220\331D"
Service-Type = Login-User
Acct-Session-Id = "59a7168600000001"
Framed-IP-Address = 192.168.1.2
NAS-Port-Type = Wireless-802.11
NAS-Port = 1
NAS-Port-Id = "00000001"
Calling-Station-Id = "4C-57-CA-XX-XX-XX"
Called-Station-Id = "10-7B-EF-60-0F-58"
NAS-IP-Address = 172.16.255.6
NAS-Identifier = "nas01"
WISPr-Location-ID = "--dns1=8.8.4.4"
WISPr-Location-Name = "5"
WISPr-Logoff-URL = "http://192.168.1.1:3990/logoff"
Message-Authenticator = 0x0f04a9f4438becd4311576f74febd188

# Executing section authorize from file /etc/freeradius/sites-enabled/default
+group authorize {
++[preprocess] = ok
[pap] WARNING! No "known good" password found for the user. Authentication may fail because of this.
++[pap] = noop
++[chap] = noop
rlm_perl: RECV: IO::Socket::INET=GLOB(0xfd2ec0)
rlm_perl: authorize reply: .OK.
rlm_perl: Added pair Message-Authenticator = 0x0f04a9f4438becd4311576f74febd188
rlm_perl: Added pair NAS-Port = 1
rlm_perl: Added pair Framed-IP-Address = 192.168.1.2
rlm_perl: Added pair Acct-Session-Id = 59a7168600000001
rlm_perl: Added pair NAS-Identifier = nas01
rlm_perl: Added pair Called-Station-Id = 10-7B-EF-60-0F-58
rlm_perl: Added pair User-Name = 4C:57:CA:XX:XX:XX
rlm_perl: Added pair WISPr-Logoff-URL = http://192.168.1.1:3990/logoff
rlm_perl: Added pair NAS-IP-Address = 172.16.255.6
rlm_perl: Added pair NAS-Port-Type = Wireless-802.11
rlm_perl: Added pair User-Password = \261-f\324\345\220\331D
rlm_perl: Added pair NAS-Port-Id = 00000001
rlm_perl: Added pair ChilliSpot-Version = 1.3.1.4
rlm_perl: Added pair Calling-Station-Id = 4C-57-CA-XX-XX-XX
rlm_perl: Added pair WISPr-Location-Name = 5
rlm_perl: Added pair Service-Type = Login-User
rlm_perl: Added pair WISPr-Location-ID = --dns1=8.8.4.4
rlm_perl: Added pair Acct-Interim-Interval = 300
rlm_perl: Added pair Cleartext-Password = \261-f\324\345\220\331D
rlm_perl: Added pair Auth-Type = PAP
++[perl] = ok
+} # group authorize = ok
Found Auth-Type = PAP
# Executing group from file /etc/freeradius/sites-enabled/default
+group PAP {
[pap] login attempt with password ""
[pap] Using clear text password ""
[pap] User authenticated successfully
++[pap] = ok
+} # group PAP = ok
WARNING: Empty post-auth section. Using default return values.
# Executing section post-auth from file /etc/freeradius/sites-enabled/default
Sending Access-Accept of id 10 to 172.16.255.6 port 53932
Acct-Interim-Interval += 300
Finished request 0.
Going to the next request

Waking up in 4.9 seconds.
rad_recv: Accounting-Request packet from host 172.16.255.6 port 45617, id=1, length=206
ChilliSpot-Version = "1.3.1.4"
ChilliSpot-Attr-10 = 0x00000001
Event-Timestamp = "авг 30 2017 22:50:06 MSK"
User-Name = "4C:57:CA:XX:XX:XX"
Acct-Status-Type = Start
Acct-Session-Id = "59a7168600000001"
Framed-IP-Address = 192.168.1.2
NAS-Port-Type = Wireless-802.11
NAS-Port = 1
NAS-Port-Id = "00000001"
Calling-Station-Id = "4C-57-CA-XX-XX-XX"
Called-Station-Id = "10-7B-EF-60-0F-58"
NAS-IP-Address = 172.16.255.6
NAS-Identifier = "nas01"
WISPr-Location-ID = "--dns1=8.8.4.4"
WISPr-Location-Name = "5"

# Executing section preacct from file /etc/freeradius/sites-enabled/default
+group preacct {
++[preprocess] = ok
[acct_unique] Hashing 'NAS-Port = 1,NAS-Identifier = "nas01",NAS-IP-Address = 172.16.255.6,Acct-Session-Id = "59a7168600000001",User-Name = "4C:57:CA:XX:XX:XX"'
[acct_unique] Acct-Unique-Session-ID = "7e353f41a7bfac9e".
++[acct_unique] = ok
+} # group preacct = ok
# Executing section accounting from file /etc/freeradius/sites-enabled/default
+group accounting {
[radutmp] expand: /var/log/freeradius/radutmp -> /var/log/freeradius/radutmp
[radutmp] expand: %{User-Name} -> 4C:57:CA:XX:XX:XX
++[radutmp] = ok
rlm_perl: RECV: IO::Socket::INET=GLOB(0xfd2ec0)
rlm_perl: Added pair NAS-Port = 1
rlm_perl: Added pair ChilliSpot-Attr-10 = 0x00000001
rlm_perl: Added pair Framed-IP-Address = 192.168.1.2
rlm_perl: Added pair Acct-Session-Id = 59a7168600000001
rlm_perl: Added pair NAS-Identifier = nas01
rlm_perl: Added pair Called-Station-Id = 10-7B-EF-60-0F-58
rlm_perl: Added pair User-Name = 4C:57:CA:XX:XX:XX
rlm_perl: ERROR: Failed to create pair Event-Timestamp = авг 30 2017 22:50:06 MSK
rlm_perl: Added pair NAS-IP-Address = 172.16.255.6
rlm_perl: Added pair Acct-Unique-Session-Id = 7e353f41a7bfac9e
rlm_perl: Added pair NAS-Port-Type = Wireless-802.11
rlm_perl: Added pair NAS-Port-Id = 00000001
rlm_perl: Added pair ChilliSpot-Version = 1.3.1.4
rlm_perl: Added pair Calling-Station-Id = 4C-57-CA-XX-XX-XX
rlm_perl: Added pair WISPr-Location-Name = 5
rlm_perl: Added pair Acct-Status-Type = Start
rlm_perl: Added pair WISPr-Location-ID = --dns1=8.8.4.4
++[perl] = ok
[attr_filter.accounting_response] expand: %{User-Name} -> 4C:57:CA:XX:XX:XX
attr_filter: Matched entry DEFAULT at line 12
++[attr_filter.accounting_response] = updated
+} # group accounting = updated
Sending Accounting-Response of id 1 to 172.16.255.6 port 45617
Finished request 1.
  • No labels