Поддержка взаимодействия WNAM с маршрутизатором pfSense (http://www.pfsense.org) появилась, начиная с версии ПО WNAM 1.2.567.
pfSense представляет собой основанный на кодовой базе ОС FreeBSD специализированный дистрибутив, позволяющий организовать на основе x86 компьютера полноценный маршрутизатор, шлюз сети Internet, с большим набором возможностей и управлением через веб-интерфейс. Переда началом настойки взаимодействия вашего сервера pfSense c WNAM вы должны настроить и отладить сам pfSense, в том числе настроить сервис DHCP, маршрутизацию, правила межсетевого экранирования и трансляции адресов между локальной (где находятся любый точки доступа, и абоненты Wi-Fi), и глобальной (внешней, Internet) сетью.
При работе в качестве шлюза с авторизацией доступа pfSense использует встроенный компонент Captive Portal. Необходимо создать новый портал через меню "Services - Captive Portal". Портал здесь называется "зоной":
Необходимо задать имя портала (зоны), интерфейс, на котором он будет работать (это интерфейс LAN, на котором находятся Wi-Fi точки доступа, и их абоненты).
Далее, нажав на кнопку "е", необходимо установить параметры портала, как показано на рисунке:
Ниже перечислены параметры портала, которые необходимо заполнить:
Параметр | Описание |
---|---|
Interfaces | Выбрать LAN - имя интерфейса, на котором будет работать портал |
Pre-authentication redirect URL | Указать ссылку на сервер WNAM, в формате http://адрес_сервера:порт/cp/pfsense например |
Authentication | RADIUS Authentication - RADIUS Protocol - PAP |
Primary RADIUS server - IP address | IP-адрес сервера WNAM, например 10.200.0.2 |
Primary RADIUS server - Shared secret | Пароль взаимодействия с RADIUS-сервером, должен совпадать с аналогичным параметром в файле /etc/freeradius/clients.conf на сервере WNAM |
Accounting | send RADIUS accounting packets |
Accounting updates | interim update |
RADIUS NAS IP attribute | WAN, указать имя (и адрес) внешнего сетевого интерфейса |
Session-Timeout | Use RADIUS Session-Timeout attributes |
Type | default |
MAC address format | default |
Portal page contents | взять файл по ссылке: http://www.netams.com/files/wnam/misc/index.php и загрузить его на этой странице. при помощи этого файла производится перенаправление перехваченной порталом pfSense HTTP-сессии абонента на сервер WNAM для целей авторизации |
В файле, который определяет перенаправление на внешний портал авторизации (сервер WNAM), index.php, необходимо изменить идентификатор площадки (параметр "site-id"), указав номер площадки из конфигурации WNAM. В противном случае будет подставляться имя зоны (в примере - HomeK18). Вы также можете создавать зоны с именами (идентификаторами), численно равными номуре площадки из WNAM. Всё это требуется, если вы используете более чем одну зону на одном портале pfSense.
Необходимо также разрешить трафик в обход портала pfSense для еще не авторизованных клиентов. Как минимум, до DNS-сервера (в примере - до сервера Google 8.8.8.8), и до самого портала авторизации WNAM (в примере: 172.16.130.5):
Для учёта сведений по потокам трафика (на какие внешние ресурсы обращались абоненты), необходимо организовать сбор сведений по трафику и отправку из в сторону WNAM по протоколу NetFlow. Для этого вы должны установить и настроить пакет softflowd (включен в набор штатных пакетов pfSense). Параметры настройки приведены ниже:
Вы должны указать интерфейс (LAN), IP-адрес сервера WNAM, порт коллектора (20002), протокол (5), тип трекинга (full), а также таймауты. Затем необходимо включить softflowd в меню "Status - Services".
Внимание: сбор статистики по объему трафика ведется по значениям счетчиков, получаемых в сообщениях RADIUS Accounting-Interim, а статистика по самому трафику (кто и какие ресурсы посещал) - по NetFlow.
Внимание: единственный параметр, который RADIUS-клиент, встроенный в pfSense, воспринимает, это Session-Timeout. Таймаут (длительность сессии абонента) вы должны явным образом задать в разделе "Ограничения" (глобально, или для выбранной площадки). Возможности задать длительность сессии через конфигурацию самого pfSense нет.
Внимание: Неизменяемым значением является интервал между сообщениями Accounting-Interim, равный 1 минуте. Это значит, что при наличии большого числа одновременно работающих абонентов будет создаваться значительная нагрузка на RADIUS-сервер и на WNAM.
Для определения имен устройств абонентов необходимо дополнительно включить механизм информирования сервера WNAM о присвоении IP-адреса абонентским устройствам встроенным в pfSense DHCP-сервером.
- Необходимо настроить и проверить сам DHCP-сервер. Затем, поскольку вы будете вручную вносить изменения в текстовый конфигурационный файл сервера, через Web-интерфейс донастраивать DHCP-сервер нельзя.
- Необходимо зайти в консоль (shell) pfSense и установить пакеты:
- pkg bootstrap
- pkg install perl5
- pkg install p5-IO-Socket-IP
- pkg install joe
- Необходимо создать файл-скрипт оповещения WNAM: /usr/local/bin/joe /usr/local/bin/wnam-dhcpd-bridge.pl
#!/usr/local/bin/perl
use constant WNAM_HOST => "172.16.130.5";
use IO::Socket::INET;
$| = 1;
my $sock = new IO::Socket::INET(PeerAddr => WNAM_HOST, PeerPort => 20001, Proto => 'tcp', Timeout => 0.5) or undef $sock;
if (defined $sock) {
if (defined $ARGV[0]){
my $type = $ARGV[0];
my $ip = $ARGV[1];
my $mac = uc $ARGV[2];
my $name = $ARGV[3];
if (defined $type and defined $ip and defined $mac) {
print $sock "DHCP type=$type ip=$ip mac=$mac name=$name\n";
}
}
} - Необходимо дать скрипту права на исполнение: chmod +x /usr/local/bin/wnam-dhcpd-bridge.pl
- Необходимо отредактировать конфигурационный файл сервера DHCP: /usr/local/bin/joe /var/dhcpd/etc/dhcpd.conf и добавить в него строки:
on commit {
set clip = binary-to-ascii(10, 8, ".", leased-address);
set clhw = binary-to-ascii(16, 8, ":", substring(hardware, 1, 6));
set clhost = pick-first-value(host-decl-name, option fqdn.hostname, option host-name, "");
execute("/usr/local/bin/wnam-dhcpd-bridge.pl", "commit", clip, clhw, clhost);
} - Последний шаг - перезапуск сервиса DHCP: "Services - DHCP Server".