Для построения Wi-Fi сети обычно используют готовые маршрутизаторы, функциональность которых всегда ограничен прошивкой. А если необходимо добавить блокировщик рекламы, VPN шлюз и красивый Captive portal, покупать новую железку? Стоимость устройства с такими возможностями будет уже весьма высока. Можно взять Linux с Hostapd и сделать точку доступа с Wi-Fi, но в отличие от готовых маршрутизаторов не будет наглядного Web-интерфейса. И для решения этой задачи был создан проект RaspAP, который на базе устройств с ОС Debian создает Wi-Fi Hotspot с Captive portal, VPN-шлюзом, Ad block. Для RaspAP в отличие от OpenWrt не требуется непосредственная поддержка устройства, достаточно поддержки последней версии Debian. RaspAP работает поверх уже установленных ОС: Raspberry Pi OS, Armbian, Debian, Ubuntu. Как сделать Wi-Fi Hotspot на RaspAP прошу под кат.
RaspAP — open-source проект создания беспроводного маршрутизатора из многих популярных устройств работающих на ОС Debian, включая Raspberry Pi. Содержит удобный Web-интерфейс для настройки, блокировщик рекламы, осуществляет маршрутизацию сетевого трафика через OpenVPN или WireGuard.
Используя RaspAP можно быстро развернуть Hotspot с доступом в сеть Интернет, где угодно: в магазине или торговом центре, заправке, кафе и ресторане, библиотеке, больнице, аэропорте и вокзале, а также в совершенно непривычных, уединенных местах, например на вершине горы. Благодаря наличию Captive portal, посетители подключаясь к Сети, обязательно увидят информацию, которую владелец Wi-Fi желает довести до пользователей. Это может быть информация о соглашении использования публичного hotspot, и т.д.
Поддерживаемые устройства и ОС
Для устройств на ARM-архитектуре заявлена официальная поддержка, устройства на x86 процессорах в настоящее время находится в стадии Beta.
Поддерживаемые ОС и архитектуры RaspAP
Базовой платформой работы RaspAP является устройство Raspberry Pi. Но благодаря проекту Armbian, на устаревших и многих современных одноплатных компьютеров возможен запуск последней версии Debian, поэтому список поддерживаемых устройств не ограничивается только Raspberry Pi.
Wi-Fi Hotspot на RaspAP будет развернут на одноплатном компьютере Cubietruck, процессор AllWinner A20 (ARM32), с ОС Armbian (на базе Debian). Для задач маршрутизации сетевого трафика для нескольких клиентов процессора AllWinner A20 с двумя ядрами Cortex-A7 будет недостаточно, но вы можете взять гораздо более мощное устройства из каталога поддерживаемых проектом Armbian.
RaspAP
Под капотом RaspAP использует hostapd, dnsmasq, iptables, веб-интерфейс работает на lighttpd с php-скриптами. С точки зрения использования новых функций применяется политика спонсорства. Если оформить ежемесячное спонсорство, то ваш аккаунт на GitHub будет добавлен в группу Insiders, которые первыми получают возможность протестировать новые функции. Функции доступные на данный момент только спонсорам будут помечены — Insiders Edition.
Веб-интерфейс RaspAP
Возможности RaspAP:
- Графический интерфейс для настройки и отображения графиков активности клиентских устройств;
- Поддержка сертификатов SSL;
- Интеграция с Captive portal;
- Управление DHCP-сервером;
- Поддержка адаптеров 802.11ac 5 ГГц;
- Автоопределение внешних беспроводных адаптеров.
Пройдемся коротко по основным функциям RaspAP.
Точка доступа
По умолчанию создается точка доступа со следующими параметрами:
- Interface: wlan0
- SSID: raspi-webgui
- Wireless Mode: 802.11n — 2.4GHz
- Channel: 1
- Security Type: WPA2
- Encryption Type: CCMP
- Passphrase: ChangeMe
К AP можно подключаться по ключевой паре SSID + пароль или по QR-коду. В случае бездействия клиента, AP может его отключить (требуется поддержка в драйверах). В Insiders Edition доступна возможность изменять мощность в dBm. Для обеспечения гарантированной работы можно задать ограниченное количество подключаемых клиентов.
Для Raspberry Pi Zero W доступен режим виртуализации беспроводного устройства. Единственное на борту Wi-Fi устройство будет работать в режиме клиента и точки доступа. Режим виртуализации сетевых интерфейсов работает и на других адаптерах USB Wi-Fi таких как RTL8188.
Блокировщик рекламы (Ad blocking)
Блокирует рекламу, трекеры и узлы из черного списка. В качестве источника черного списка выступает проект notracking, список обновляется автоматически. Блокируются следующие типы узлов: трекеры, поставщики рекламы, сбор аналитики, фишинговые и мошенические сайты, содержащие вредоносные программы, веб-майнеры.
Captive portal
Captive portal
Из коробки интегрирован nodogsplash. nodogsplash — легкое и простое решения создания кастомизируемых порталов. Поддерживает различные политики работы клиентов.
Поддержка дисплея для вывода состояния работы
Статистическую работу можно выводить на TFT-экран Adafruit Mini PiTFT контроллер ST7789. Скрипт вывода информации написан на Python, поэтому программный код можно легко адаптировать и для другого дисплея, например для ILI9341.
Вывод информации о работе AP
Поддержка различных сетевых устройств в качестве WAN-интерфейса (Insiders Edition)
В качестве доступа к сети Интернет, RaspAP поддерживает несколько различных типов сетевых устройств, такие как:
- Ethernet interface (eth);
- Wireless adapter (wlan);
- Mobile data modem (ppp);
- Mobile data adapter with built-in router;
- USB connected smartphone (USB tethering);
Это особенно удобно когда вы путешествуете или работает в полевых условиях.
OpenVPN
Сетевой трафик можно туннелировать используя клиент OpenVPN. В Insiders Edition доступна возможность хранения нескольких профилей OpenVPN с функцией быстрого переключения между ними.
WireGuard (Insiders Edition)
WireGuard — быстрый и современный VPN, в котором используется самая современная криптография, самое простое VPN решение для дистрибутивов Linux. Благодаря низкому overhead, производительность WireGuard выше, чем OpenVPN.
Доступ к Web-интересу настроек через SSL
Для защиты сетевого трафика от перехвата, доступно шифрование по SSL в пределах локальной сети. Проект mkcert позволяет в несколько простых шагов развернуть корневой центр сертификации и генерировать сертификаты, подписанные вашим собственным частным ЦС.
Постановка задачи
Установка RaspAP будет произведена из публичного репозитория, на Cubietruck установлена последняя версия Armbian (на основе Debian): Armbian 21.02.3 Buster, Linux 5.10.21-sunxi. На борту имеется встроенный адаптер wlan0, будет выступать в качестве клиентского доступа к сети Интернет (WAN-интерфейс). Для Hotspot подключим RTL8188 USB WiFi dongle — wlan1.
- IP конфигурация для wlan0: address 192.168.43.12 netmask 255.255.255.0 gateway 192.168.43.1.
- IP конфигурация для wlan1: address 10.3.141.1 netmask 255.255.255.0 gateway 10.3.141.1.
Конфигурация DHCP-сервера:
- Диапазон выдаваемых IP-адресов — 10.3.141.50 — 10.3.141.254;
- Шлюз/DNS-сервер: 10.3.141.1.
Для маршрутизации сетевого трафика через OpenVPN установим на VPS сервер SoftEther VPN Server. SoftEther VPN Server — мультипротокольный VPN-сервер, который может поднимать L2TP/IPsec, OpenVPN, MS-SSTP, L2TPv3, EtherIP-серверы, а также имеет свой собственный протокол «SSL-VPN», который неотличим от обычного HTTPS-трафика (чего не скажешь про OpenVPN handshake, например), может работать не только через TCP/UDP, но и через ICMP (подобно pingtunnel, hanstunnel) и DNS (подобно iodine), работает быстрее (по заверению разработчиков) текущих имплементаций, строит L2 и L3 туннели, имеет встроенный DHCP-сервер, поддерживает как kernel-mode, так и user-mode NAT, IPv6, шейпинг, QoS, кластеризацию, load balancing и fault tolerance, может быть запущен под Windows, Linux, Mac OS, FreeBSD и Solaris и является Open-Source проектом под GPLv2.
Для VPS сервера выберем тариф на vdsina.ru за 330 р./месяц, в который включена квота на 32 ТБ трафика, чего более чем достаточно. SoftEther VPN Server будет развернут в Docker контейнере, поэтому выбор ОС CentOS/Debian/Ubuntu не принципиально важен.
Развертывание сервера выполняется просто и очень быстро, по результату необходимо отметить автоматическую выдачу DNS имени, можно не покупать доменное имя.
VPS сервер на vdsina.ru
Сервер был развернут в Московской локации, IP-адрес 94.103.85.152, dns-имя: v636096.hosted-by-vdsina.ru. Подключение к серверу будет по DNS имени.
Итоговая схема сети
Как будет выглядеть Web-интерфейс RaspAP и подключение к Hotspot
Подключение к AP — SSID: raspi-webgui
Подключение к AP — raspi-webgui
Конфигурационные файлы RaspAP
Для установки RaspAP есть Quick installer, но он выполняется без задания параметров и wlan0 — настроен как Hotspot, что нам не подходит. Поэтому воспользуемся Manual installation, с некоторыми изменениями т.к. руководство содержит некоторые ошибки и сам RaspAP работает с некоторыми некритичными багами, из-за этого пришлось немного больше потратить время на установку. О багах будет в ходе установки.
До установки рассмотрим конфигурационные файлы, которые можно использовать как опорные для своей адаптации.
Список конфигурационных файлов (GitHub):
- hostapd.conf — служба hostapd
- default_hostapd — служба hostapd
- 090_raspap.conf — служба dnsmasq.d
- 090_wlan1.conf — служба dnsmasq.d
- defaults.json — служба raspap
- dhcpcd.conf — служба raspap
- config.php — портал конфигурации RaspAP
hostapd.conf — служба hostapd
Содержит настройки AP по умолчанию такие как: ssid, channel, password и т.д.
driver=nl80211
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
beacon_int=100
auth_algs=1
wpa_key_mgmt=WPA-PSK
ssid=raspi-webgui
channel=1
hw_mode=g
wpa_passphrase=ChangeMe
interface=wlan1
wpa=2
wpa_pairwise=CCMP
country_code=RU
## Rapberry Pi 3 specific to on board WLAN/WiFi
#ieee80211n=1 # 802.11n support (Raspberry Pi 3)
#wmm_enabled=1 # QoS support (Raspberry Pi 3)
#ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40] # (Raspberry Pi 3)
## RaspAP wireless client AP mode
#interface=uap0
## RaspAP bridge AP mode (disabled by default)
#bridge=br0
default_hostapd — служба hostapd
Настройка службы hostapd, параметр DAEMON_CONF определяет путь к настройкам.
# Location of hostapd configuration file
DAEMON_CONF="/etc/hostapd/hostapd.conf"
090_raspap.conf — служба dnsmasq.d
Настройка службы dnsmasq, параметр conf-dir определяет путь к настройкам.
# RaspAP default config
log-facility=/tmp/dnsmasq.log
conf-dir=/etc/dnsmasq.d
090_wlan1.conf — служба dnsmasq.d
Настройка dnsmasq для сетевого интерфейса wlan1. Содержит диапазон выдаваемых IP-адресов, и другие сетевые настройки. Необходимо обратить внимание на название файла по маске — 090_[ИДЕНТИФИКАТОР_ИНТЕРФЕЙСА_HOTSPOT].conf. Если у вас сетевой интерфейс для hostspot будет назваться например wlan2, то следует задать название файла 090_wlan2.conf.
# RaspAP wlan0 configuration for wired (ethernet) AP mode
interface=wlan1
domain-needed
dhcp-range=10.3.141.50,10.3.141.255,255.255.255.0,12h
dhcp-option=6,10.3.141.1
defaults.json — служба raspap
Настройка DHCP серверов для интерфейсов wlan0 и wlan1.
{
"dhcp": {
"wlan1": {
"static ip_address": [ "10.3.141.1/24" ],
"static routers": [ "10.3.141.1" ],
"static domain_name_server": [ "10.3.141.1" ],
"subnetmask": [ "255.255.255.0" ]
},
"wlan0": {
"static ip_address": [ "192.168.43.12/24" ],
"static routers": [ "192.168.43.1" ],
"static domain_name_server": [ "1.1.1.1 8.8.8.8" ],
"subnetmask": [ "255.255.255.0" ]
},
"options": {
"# RaspAP default configuration": null,
"hostname": null,
"clientid": null,
"persistent": null,
"option rapid_commit": null,
"option domain_name_servers, domain_name, domain_search, host_name": null,
"option classless_static_routes": null,
"option ntp_servers": null,
"require dhcp_server_identifier": null,
"slaac private": null,
"nohook lookup-hostname": null
}
},
"dnsmasq": {
"wlan1": {
"dhcp-range": [ "10.3.141.50,10.3.141.255,255.255.255.0,12h" ]
},
"wlan0": {
"dhcp-range": [ "192.168.43.50,192.168.50.150,12h" ]
}
}
}
dhcpcd.conf — служба raspap
Настройка для сетевого интерфейса wlan0, который выходит в сеть Интернет.
# RaspAP default configuration
hostname
clientid
persistent
option rapid_commit
option domain_name_servers, domain_name, domain_search, host_name
option classless_static_routes
option ntp_servers
require dhcp_server_identifier
slaac private
nohook lookup-hostname
# RaspAP wlan0 configuration
interface wlan0
static ip_address=192.168.43.12/24
static routers=192.168.43.1
static domain_name_server=1.1.1.1 8.8.8.8
config.php — портал конфигурации RaspAP
Файл настроек графического Web-интерфейса. Содержит переменные влияющие на отображение настроек. Самый главный параметр define('RASPI_WIFI_AP_INTERFACE', 'wlan1');. В качестве значения указать сетевой интерфейс hotspot — wlan1.
...
define('RASPI_WIFI_AP_INTERFACE', 'wlan1');
...
define('RASPI_ADBLOCK_ENABLED', true);
define('RASPI_OPENVPN_ENABLED', false);
...
Пошаговая установка RaspAP
Руководство установки доступно в разделе Manual installation.
Шаг 1 — Подключение адаптера USB WiFi RTL8188
Подключаем адаптер в любой доступный USB порт. В Armbian драйвера уже есть, поэтому проверим подключение командой lsusb:
root@bananapim64:~# lsusb
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 004: ID 0bda:c811 Realtek Semiconductor Corp.
Bus 003 Device 002: ID 1a40:0101 Terminus Technology Inc. Hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
root@bananapim64:~#
В списке присутствует Realtek Semiconductor Corp., значит адаптер успешно распознался. Если вывести название интерфейса для подключенного адаптера, то его имя будет — wlxe81e0584796d, что несколько далеко от привычного именования вида wlanX. Для задания названия для адаптера — wlan1, необходимо выполнить следующие действия (более подробнее почитать про именование сетевых интерфейсов по ссылке1,ссылке2):
$ sudo ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules
$ sudo reboot
После перезагрузки в системе будет два беспроводных адаптера: wlan0 и wlan1.
Шаг 2 — Настройка сетевых интерфейсов
Настроим сетевые интерфейсы в конфигурационном файле: /etc/network/interfaces.
# Network is managed by Network manager
auto lo
iface lo inet loopback
# WAN
auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
# Wi-Fi AP
auto wlan1
iface wlan1 inet static
address 10.3.141.1
netmask 255.255.255.0
gateway 10.3.141.1
Шаг 3 — Установка RaspAP
Теперь приступаем к установке RaspAP.
Обновление системы:
sudo apt-get update
sudo apt-get full-upgrade
Установка зависимостей для не RPi OS:
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt-get install dhcpcd5
Установка пакетов:
sudo apt-get install -y lighttpd git hostapd dnsmasq iptables-persistent vnstat qrencode php7.3-cgi
PHP:
sudo lighttpd-enable-mod fastcgi-php
sudo service lighttpd force-reload
sudo systemctl restart lighttpd.service
Создание Web-портала:
sudo rm -rf /var/www/html
sudo git clone https://github.com/RaspAP/raspap-webgui /var/www/html
WEBROOT="/var/www/html"
CONFSRC="$WEBROOT/config/50-raspap-router.conf"
LTROOT=$(grep "server.document-root" /etc/lighttpd/lighttpd.conf | awk -F '=' '{print $2}' | tr -d " \"")
HTROOT=${WEBROOT/$LTROOT}
HTROOT=$(echo "$HTROOT" | sed -e 's/\/$//')
awk "{gsub(\"/REPLACE_ME\",\"$HTROOT\")}1" $CONFSRC > /tmp/50-raspap-router.conf
sudo cp /tmp/50-raspap-router.conf /etc/lighttpd/conf-available/
sudo ln -s /etc/lighttpd/conf-available/50-raspap-router.conf /etc/lighttpd/conf-enabled/50-raspap-router.conf
sudo systemctl restart lighttpd.service
cd /var/www/html
sudo cp installers/raspap.sudoers /etc/sudoers.d/090_raspap
Создание конфигурации:
sudo mkdir /etc/raspap/
sudo mkdir /etc/raspap/backups
sudo mkdir /etc/raspap/networking
sudo mkdir /etc/raspap/hostapd
sudo mkdir /etc/raspap/lighttpd
sudo cp raspap.php /etc/raspap
Установка разрешения:
sudo chown -R www-data:www-data /var/www/html
sudo chown -R www-data:www-data /etc/raspap
Настройка контролирующих скриптов:
sudo mv installers/*log.sh /etc/raspap/hostapd
sudo mv installers/service*.sh /etc/raspap/hostapd
sudo chown -c root:www-data /etc/raspap/hostapd/*.sh
sudo chmod 750 /etc/raspap/hostapd/*.sh
sudo cp installers/configport.sh /etc/raspap/lighttpd
sudo chown -c root:www-data /etc/raspap/lighttpd/*.sh
sudo mv installers/raspapd.service /lib/systemd/system
sudo systemctl daemon-reload
sudo systemctl enable raspapd.service
Установка стартовых настроек, настройки в каталоге ~/temp, при необходимости заменить на свои:
sudo apt-get install -y curl unzip
mkdir -p ~/temp
curl -SL --output ~/temp/config_ct.zip https://github.com/devdotnetorg/Site/raw/master/Uploads/files/config_ct.zip
unzip ~/temp/config_ct.zip -d ~/temp
rm ~/temp/config_ct.zip
если есть: sudo mv /etc/default/hostapd ~/default_hostapd.old
если есть: sudo cp /etc/hostapd/hostapd.conf ~/hostapd.conf.old
sudo cp ~/temp/default_hostapd /etc/default/hostapd
sudo cp ~/temp/hostapd.conf /etc/hostapd/hostapd.conf
sudo cp config/090_raspap.conf /etc/dnsmasq.d/090_raspap.conf
sudo cp ~/temp/090_wlan1.conf /etc/dnsmasq.d/090_wlan1.conf
sudo cp ~/temp/dhcpcd.conf /etc/dhcpcd.conf
sudo cp ~/temp/config.php /var/www/html/includes/
sudo cp ~/temp/defaults.json /etc/raspap/networking/
sudo systemctl stop systemd-networkd
sudo systemctl disable systemd-networkd
sudo cp config/raspap-bridge-br0.netdev /etc/systemd/network/raspap-bridge-br0.netdev
sudo cp config/raspap-br0-member-eth0.network /etc/systemd/network/raspap-br0-member-eth0.network
Оптимизация PHP:
sudo sed -i -E 's/^session\.cookie_httponly\s*=\s*(0|([O|o]ff)|([F|f]alse)|([N|n]o))\s*$/session.cookie_httponly = 1/' /etc/php/7.3/cgi/php.ini
sudo sed -i -E 's/^;?opcache\.enable\s*=\s*(0|([O|o]ff)|([F|f]alse)|([N|n]o))\s*$/opcache.enable = 1/' /etc/php/7.3/cgi/php.ini
sudo phpenmod opcache
Настройка маршрутизации:
echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/90_raspap.conf > /dev/null
sudo sysctl -p /etc/sysctl.d/90_raspap.conf
sudo /etc/init.d/procps restart
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
sudo iptables -t nat -A POSTROUTING -s 192.168.43.0/24 ! -d 192.168.43.0/24 -j MASQUERADE
sudo iptables-save | sudo tee /etc/iptables/rules.v4
Включение hostapd:
sudo systemctl unmask hostapd.service
sudo systemctl enable hostapd.service
OpenVPN:
sudo apt-get install openvpn
sudo sed -i "s/\('RASPI_OPENVPN_ENABLED', \)false/\1true/g" /var/www/html/includes/config.php
sudo systemctl enable openvpn-client@client
sudo mkdir /etc/raspap/openvpn/
sudo cp installers/configauth.sh /etc/raspap/openvpn/
sudo chown -c root:www-data /etc/raspap/openvpn/*.sh
sudo chmod 750 /etc/raspap/openvpn/*.sh
Ad blocking:
sudo mkdir /etc/raspap/adblock
wget https://raw.githubusercontent.com/notracking/hosts-blocklists/master/hostnames.txt -O /tmp/hostnames.txt
wget https://raw.githubusercontent.com/notracking/hosts-blocklists/master/domains.txt -O /tmp/domains.txt
sudo cp /tmp/hostnames.txt /etc/raspap/adblock
sudo cp /tmp/domains.txt /etc/raspap/adblock
sudo cp installers/update_blocklist.sh /etc/raspap/adblock/
sudo chown -c root:www-data /etc/raspap/adblock/*.*
sudo chmod 750 /etc/raspap/adblock/*.sh
sudo touch /etc/dnsmasq.d/090_adblock.conf
echo "conf-file=/etc/raspap/adblock/domains.txt" | sudo tee -a /etc/dnsmasq.d/090_adblock.conf > /dev/null
echo "addn-hosts=/etc/raspap/adblock/hostnames.txt" | sudo tee -a /etc/dnsmasq.d/090_adblock.conf > /dev/null
sudo sed -i '/dhcp-option=6/d' /etc/dnsmasq.d/090_raspap.conf
sudo sed -i "s/\('RASPI_ADBLOCK_ENABLED', \)false/\1true/g" includes/config.php
При конфигурирование через Web-интерфейс столкнулся с багом, который при изменение настроек DHCP сервера на интерфейсе wlan1 удаляет файл конфигурации 090_wlan1.conf и не создает его заново. В результате DHCP сервер не выдает IP-конфигурацию новым клиентам. Временное решение этой проблемы заключается в блокировке файла на удаление, необходимо выполнить следующую команду (по блокировке файлов почитать по ссылке):
sudo chattr +i /etc/dnsmasq.d/090_wlan1.conf
После установки необходимо перезагрузить систему:
sudo reboot now
После перезагрузке появится Wi-Fi точка доступа с SSID raspi-webgui и паролем ChangeMe. Портал будет доступен по адресу: http://10.3.141.1.
Установка SoftEther VPN Server на VPS сервер
На сервер v636096.hosted-by-vdsina.ru установим Docker по официальному руководству — Install Docker Engine on Ubuntu.
Создание сети для Docker контейнеров
Для подсети в которой будет контейнер с SoftEther VPN Server определим следующие параметры:
- Название сети: vpnnetwork;
- Subnet: 172.22.0.0/24;
- Driver: bridge;
- Range: 172.22.0.0/25;
- gateway: 172.22.0.127;
- HostMin: 172.22.0.1;
- HostMax: 172.22.0.126;
- Hosts/Net: 126.
Для создание внутренней сети Docker выполним команду:
$ docker network create --driver bridge --subnet 172.22.0.0/24 --ip-range=172.22.0.0/25 --gateway 172.22.0.127 vpnnetwork
Для проверки доступности сети выполнить команду: ping 172.22.0.127.
Создание контейнера с SoftEther VPN Server
Для создание контейнера будем использовать образ siomiz/softethervpn. До запуска основного контейнера необходимо создать конфигурацию, в которой указать пароль для управления сервером — параметр SPW и пароль для управления хабом — параметр HPW. Файл конфигурации будет располагаться по пути /usr/vpnserver/vpn_server.config. Выполнить следующие команды:
$ mkdir -p /usr/vpnserver
$ docker run --name vpnconf -e "SPW={PASSWORD}" -e "HPW={PASSWORD}" siomiz/softethervpn echo
$ docker cp vpnconf:/usr/vpnserver/vpn_server.config /usr/vpnserver/vpn_server.config
$ docker rm vpnconf
Для уменьшения размера контейнера возьмем образ на основе Alpine, все журналы log в null. Выполнить следующие команды для создание контейнера:
$ docker run --name vps-server-softethervpn -d --cap-add NET_ADMIN --restart always --net vpnnetwork --ip 172.22.0.2 -p 443:443/tcp -p 992:992/tcp -p 1194:1194/udp -p 5555:5555/tcp -v /usr/vpnserver/vpn_server.config:/usr/vpnserver/vpn_server.config -v /dev/null:/usr/vpnserver/server_log -v /dev/null:/usr/vpnserver/packet_log -v /dev/null:/usr/vpnserver/security_log siomiz/softethervpn:alpine
Если контейнер запустился, то переходим к следующему шагу.
Настройка SoftEther VPN Server
Для настройки SoftEther VPN Server лучше использовать графическую утилиту для ОС Windows. Для загрузки необходимо перейти на страницу SoftEther Download Center. В списке Select Component, выбрать SoftEther VPN Server Manager for Windows, далее Select Platform windows. Можно выбрать пакет .zip без необходимости установки. Пакет softether-vpn_admin_tools-v4.34-9745-rtm-2020.04.05-win32.zip распаковать и запустить vpnsmgr.exe.
Создаем новый профиль кнопка New Setting, указываем следующие настройка:
- Setting Name: VDSina_ru_main_server
- Host Name: v636096.hosted-by-vdsina.ru
- Port Number: 443
- Password: пароль который был указан в переменной SPW при создание конфигурационного файла vpn_server.config
Затем подключаемся к серверу кнопка — Connect.
При первом подключение появится вопрос об включение поддержки протокола IPSec. Если в дальнейшем планируете подключать мобильные устройства без использования программных клиентов, то выбрать Да. В данном случае поддержка IPSec не требуется, отвеваем Нет.
Для настройки алгоритма шифрования нажать на кнопку Encryption and Network. По умолчанию включен алгоритм — DHE-RSA-AES256-SHA. Из списка выбрать другие более стойкие комбинации шифрования, но нужно помнить чем «сильнее» алгоритм, тем больше нагрузка на CPU сервера и на конечное маршрутизирующее устройство.
По умолчанию будет доступен хаб — DEFAULT, удаляем его.
Создаем новый хаб — кнопка Create a Virtual Hub. Укажем Virtual Hub Name: VPNROOT. Открываем настройки хаба кнопка — Manage Virtual Hub.
Создадим пользователя подключения, кнопка Manage Users, затем кнопка New. Аутентификация будет по паре логин/пароль, укажем имя: officeuser1.
Для отделение подсети клиентов VPN сервера и подсети Docker контейнеров включим NAT, кнопка Virtual NAT and Virtual DHCP Server (SecureNAT), далее кнопка Enable SecureNAT. Изменим подсеть VPN клиентов на: 192.168.30.x, закроем окно, кнопка Exit.
На этом настройка сервера закончена.
Последовательность действий по настройке SoftEther VPN Server
Получение файлов конфигурации *.ovpn
Для подключения OpenVPN клиента необходимо получить файлы конфигурации *.ovpn, для этого переходим на главный экран настроек SoftEther VPN Server и нажимаем на кнопку OpenVPN / MS-SSTP Settings. Далее, в следующем окне генерируем файлы конфигурации, кнопка Generate a Sample Configuration File for OpenVPN Clients. Сохраняем архив OpenVPN_Sample_Config_v636096.hosted-by-vdsina.ru_20210519_150311.zip, для дальнейшего подключения потребуется файл f1167ecd086e_openvpn_remote_access_l3.ovpn.
Последовательность действий по получению файлов конфигурации *.ovpn
Настройка OpenVPN на RaspAP
Создание маршрутов
Теперь переходим в консоль Cubietruck и добавляем маршруты:
sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
sudo iptables -A FORWARD -i tun0 -o wlan1 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan1 -o tun0 -j ACCEPT
Делаем копию существующих маршрутов и сохраняем новые
cp /etc/iptables/rules.v4 /etc/iptables/rules.v4.bak
sudo iptables-save | sudo tee /etc/iptables/rules.v4
Настройка профиля OpenVPN
Переходим на портал по адресу 192.168.43.12/openvpn_conf и указываем данные для подключения:
- Username: officeuser1
- Password: указанный для officeuser1 в SoftEther VPN Server
- Для конфигурационного файла выбираем файл f1167ecd086e_openvpn_remote_access_l3.ovpn.
Сохраняем настройки и перезапускаем OpenVPN. Если подключение удалось, но в поле IPV4 ADDRESS будет публичный IP-адрес VPN сервера: 94.103.85.152 (v636096.hosted-by-vdsina.ru).
Страница настроек OpenVPN в RaspAP
Настройка Captive portal
Установка Captive portal в руководстве Captive portal setup.
Для установки выполним следующие действия:
sudo apt-get update
sudo apt-get install -y libmicrohttpd-dev
cd ~/
git clone https://github.com/nodogsplash/nodogsplash.git
cd nodogsplash
make
sudo make install
Далее необходимо внести изменения в конфигурационный файл /etc/nodogsplash/nodogsplash.conf. Указать следующие параметры:
...
GatewayInterface wlan1
...
GatewayAddress 10.3.141.1
...
Регистрация службы и запуск:
sudo cp ~/nodogsplash/debian/nodogsplash.service /lib/systemd/system/
sudo systemctl enable nodogsplash.service
sudo systemctl start nodogsplash.service
sudo systemctl status nodogsplash.service
Страницы html для изменение дизайна страниц располагаются по пути: /etc/nodogsplash/htdocs/. Теперь выполним подключение к AP — SSID: raspi-webgui.
Устранение проблем
Первым делом необходимо проверить IP-конфигурацию сетевых интерфейсов, командами: ifconfig или ip a.
Проверить занятость портов, командами:
netstat -ntlp | grep LISTEN
lsof -i | grep LISTEN
lsof -nP -i | grep LISTEN
Если установка RaspAP выполняется на Ubuntu, то вы можете столкнуться с конфликтом использования 53 порта, который занят службой systemd-resolved. Для отключения данной службы, воспользоваться материалом How to disable systemd-resolved in Ubuntu.
Проверить статусы используемых служб, выполнить следующие команды:
sudo systemctl status hostapd.service
sudo systemctl status dnsmasq.service
sudo systemctl status lighttpd.service
sudo systemctl status openvpn-client@client
sudo systemctl status nodogsplash.service
sudo systemctl status raspapd.service
Что дальше?
Для проверки совместимости необходимо RaspAP развернуть на Banana Pi BPI-M64 (Armbian 21.02.1 на основе Ubuntu 18.04.5 LTS). Далее, развернуть на x86 с другим более новым адаптером, например USB Realtek 8811CU Wireless LAN 802.11ac. На GitHub размещен репозиторий raspap-docker, который оборачивает RaspAP в контейнер, но по факту запускает скрипт автоматической установки, что несколько неудобно и неправильно. Поэтому для более широкого распространения RaspAP необходимо его правильно обернуть в Docker контейнер для ARM и x86 архитектур.
Итог
Проект RaspAP безусловно заслуживает внимания, основные функции работают отлично. Это единственный проект связанный с Wi-Fi сетями, работающий поверх существующей ОС, у которого работает Web-интерфейс (пока есть небольшие баги). Для личного использования, теста, стоит попробовать. Но для продакшен в бизнесе пока лучше не использовать, необходимо более детально просмотреть исходный код и конфигурацию на предмет безопасности. В любом случае, проект добавил себе в закладки, надеюсь баги исправят в скором времени.
На правах рекламы
VDSina предлагает виртуальные серверы на Linux и Windows — выбирайте одну из предустановленных ОС, либо устанавливайте из своего образа.
Присоединяйтесь к нашему чату в Telegram.
TCH2019
Замечательно! А чем Кинетик например Гига не устраивает? Все тоже самое из коробки