Превращаем одноплатник Cubietruck в Wi-Fi Hotspot с Captive portal, VPN-шлюзом и Ad block +31


AliExpress RU&CIS

raspap

Для построения 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

Базовой платформой работы RaspAP является устройство Raspberry Pi. Но благодаря проекту Armbian, на устаревших и многих современных одноплатных компьютеров возможен запуск последней версии Debian, поэтому список поддерживаемых устройств не ограничивается только Raspberry Pi.

Wi-Fi Hotspot на RaspAP будет развернут на одноплатном компьютере Cubietruck, процессор AllWinner A20 (ARM32), с ОС Armbian (на базе Debian). Для задач маршрутизации сетевого трафика для нескольких клиентов процессора AllWinner A20 с двумя ядрами Cortex-A7 будет недостаточно, но вы можете взять гораздо более мощное устройства из каталога поддерживаемых проектом Armbian.

RaspAP


raspap

Под капотом RaspAP использует hostapd, dnsmasq, iptables, веб-интерфейс работает на lighttpd с php-скриптами. С точки зрения использования новых функций применяется политика спонсорства. Если оформить ежемесячное спонсорство, то ваш аккаунт на GitHub будет добавлен в группу Insiders, которые первыми получают возможность протестировать новые функции. Функции доступные на данный момент только спонсорам будут помечены — Insiders Edition.

raspap

Веб-интерфейс 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


raspap

Captive portal

Из коробки интегрирован nodogsplash. nodogsplash — легкое и простое решения создания кастомизируемых порталов. Поддерживает различные политики работы клиентов.

Поддержка дисплея для вывода состояния работы


Статистическую работу можно выводить на TFT-экран Adafruit Mini PiTFT контроллер ST7789. Скрипт вывода информации написан на Python, поэтому программный код можно легко адаптировать и для другого дисплея, например для ILI9341.

raspap

Вывод информации о работе 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


raspap

Сетевой трафик можно туннелировать используя клиент OpenVPN. В Insiders Edition доступна возможность хранения нескольких профилей OpenVPN с функцией быстрого переключения между ними.

WireGuard (Insiders Edition)


raspap

WireGuard — быстрый и современный VPN, в котором используется самая современная криптография, самое простое VPN решение для дистрибутивов Linux. Благодаря низкому overhead, производительность WireGuard выше, чем OpenVPN.

Доступ к Web-интересу настроек через SSL


raspap

Для защиты сетевого трафика от перехвата, доступно шифрование по 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 имени, можно не покупать доменное имя.

raspap

VPS сервер на vdsina.ru

Сервер был развернут в Московской локации, IP-адрес 94.103.85.152, dns-имя: v636096.hosted-by-vdsina.ru. Подключение к серверу будет по DNS имени.

raspap

Итоговая схема сети

Как будет выглядеть 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 и  т.д.

hostapd.conf
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 определяет путь к настройкам.

default_hostapd
# Location of hostapd configuration file
DAEMON_CONF="/etc/hostapd/hostapd.conf"



090_raspap.conf — служба dnsmasq.d

Настройка службы dnsmasq, параметр conf-dir определяет путь к настройкам.

090_raspap.conf
# 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.

090_wlan1.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.

defaults.json
{
  "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, который выходит в сеть Интернет.

dhcpcd.conf
# 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.

config.php
...
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).

raspap
Страница настроек 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.




Комментарии (19):

  1. TCH2019
    /#23076900

    Замечательно! А чем Кинетик например Гига не устраивает? Все тоже самое из коробки

  2. devzona
    /#23076920

    Можно сделать свой маршрутизатор, не покупая специализированные железки. Для домашней сети Интернета-вещей очень удобный вариант, затраты низкие, функциональность можно наращивать.

  3. TCH2019
    /#23076958

    Цена распберри отнюдь не копеечная, многие сервисы ( например Mesh сеть) даже в версии OpenWRT для него не реализованы. Т.е. все равно получается недороутер-недокомпьютер.
    Если только рассматривать этот проект как песочницу для изучения сетевых технологий…

    • devzona
      /#23077048

      Почему же? Заявленные функции работают прекрасно, VPN держит стабильно, без разрывов. Если Вы возьмете готовый Wi-Fi маршрутизатор с поддержкой VPN, блокировкой рекламы, то стоимость будет не маленькая. Весь вопрос заключается в производительности используемого компьютера. В тесте, Cubietruck с двумя ядрами Cortex-A7 при загрузке торрента через VPN(AES-128-CBC) показал среднюю скорость в 8 Мбит/c. Загрузка ядер немного более 50%.

      Скриншот загрузки торрента используя Cubietruck через VPN

      • tmin10
        /#23077716

        Хм, мой старый RT-AC51U со встроенным OpenVPN клиентом вытягивал скорость в районе 10 мегабит, упираясь в полную загрузку процессора.
        Но это довольно простой роутер (580 MHz процессор и 64 MB оперативной памяти), можно накатить кастомную прошивку и там взять какой-то WireGuard, должно вытянуть побольше.

        • devzona
          /#23077816

          В данном случае факторов влияющих на скорость может быть очень много. Оптимизация драйверов для процессора AllWinner A20, влияние других точек доступа в многоквартирном доме. Не была проведена проверка сколько AP используют тот же самый канал. Пример добавил для приблизительной оценки скорости. В RT-AC51U установлен специализированный RISC процессор для IP сетей, обработка данных выполняется на «железе». В случае AllWinner A20, это программная обработка.

          • tmin10
            /#23077830

            Как я понял, OpenVPN там сделан чисто программно, иначе откуда 100% загрузка процессора, если всё железом ускорено? Вроде бы только в микротиках было аппаратное ускорение OpenVPN.

      • forsam
        /#23078532

        Господа, что Вы там «подкуриваете». Как такая скорость может быть? и загрузка проца?
        Плата Orangepi one 512MB. CPU — H3 Quad-core Cortex-A7 H.265/HEVC 4K
        Debian Buster, Pi-hole + wireguard over cable cat5. Канал 25Mb/12Mb(оптика), канал используется почти на 100%. Загрузка проца %-ов 10-20. И по поводу мэшь сетей — а этим г@@-ном кто нить пользуется?
        Цена сего удовольствия плата — баксов 10, влэха 8Гб(на тот момен баксов 8), мини радиатор(на шару), кулер 5В(5 баксов на тот момент) и халявный советский транзистор и резистор, всё!!!

        • devzona
          /#23078558

          На объективность данных загрузки процессора при использование Cubietruck не претендую. Процессор весьма старый, возможно драйвера недопилены. А в H3 Quad-core уже четыре ядра Cortex-A7, против двух в Allwinner A20, неудивительно что производительность будет выше. Согласно Datasheet у Allwinner A20 — 256KB L2 cache, Allwinner H3 — 512KB L2-cache, процессоры весьма разные, поэтому сравнивать не вижу смысла. У меня есть еще Banana pi M64 на Allwinner A64, вот на этой плате можно сделать объективные замеры, покупал давно за $46 в 2016 году.

          • forsam
            /#23080246

            Разница в процах в %-тах почти в 5 раз, странно это. Я не помню, сколько жрал у меня проц под openvpn. И да я заметил, что у Вас 2 ядра. Я ща перетестил у себя с включённым торентом, процессы (4 ядра макс 10%), потребляющие проц: fail2ban, nut, htop и всё. Я так предполагаю( У вас не видно по htop-пу кто проц кушает, нажмите f6 и выбирите cpu) там не виноват проц а софт, скорей всего надо пересобирать опенвпн и включать при сборке neon(проверено на aircrack).
            У меня есть 2 проца Н3 и Н5. Они в повседневке не сильно в работе отличаются.

            • devzona
              /#23081512

              Действительно, дело оказалось в OpenVPN, кушает 20-30% CPU при небольшой загрузке канала. Еще посмотрю использует ли Cubietruck аппаратное ускорение шифрования AES.

              • forsam
                /#23081886

                проще переехать на wireguard. Выигрыш в скорости и пинге. У меня раньше скорость, на опенвпн максимум 18Мб была, а на вирегуарде стабильно 23Мб и бывают скачки повыше 25Мб

  4. TCH2019
    /#23077102

    Ок, посчитаем. Pi 4 Model B 4Gb — 6.6к + корпус 2.5к + бп 1.3к + свич на 5 портов 1.2к= 11.6к.
    Кинетик вива — 6.0к.
    Кинетик — впны (сервер-клиент) — l2tp, pptp, openVPN, sstp, Wireguard, туннели всех сортов. Облако. Mesh. Модемы CDC, Ndis, QMI… и т.д. и т.п. (из коробки!)
    Игрался с OpenWRT для Пи, как то не зашло. А кинетики работают как часы. Поэтому, по моему скромному мнению, ну только для ОЧЕНЬ больших энтузиастов ;+)

    • komtur
      /#23081406

      Что-то много за малину, за 6.6 можно взять все вместе кроме свича. Примерно то на то и выйдет по деньгам.

  5. devzona
    /#23077772

    Так никто и не говорит о замене вашего решения на RaspAP. Серийное специализированное решение всегда будет выигрывать у сборного по стоимости. Но на Keenetic Viva никогда Docker не установишь. RaspAP очень удобно использовать для Интернета-вещей, на самом Cubietruck работает RaspAP и docker контейнеры с СУБД и центром IoT. Все в одной железке.
    Потом очень странно вы оцениваете стоимость. БП для Pi 4 Model за 1300 р., не многовато ли будет? Для данной модели нужен БП на 3A. Если мы возьмем фирменный брендированный БП под Raspberry Pi на Ali, то даже в этом случае стоимость будет 12$ = 75x12=900 р. Откуда сударь Вы взяли 1.3k?
    Вот прямая ссылка на Aliexpress, лот Raspberry Pi 4 Model B. Комплект: RPI4 4G. US $74.65 вместе с доставкой. 75x74.65= 5600 р. И где взяли Pi 4 Model B 4Gb за 6.6к?

    Игрался с OpenWRT для Пи, как то не зашло.

    — может просто не разобрались? Тем более про OpenWRT ничего в публикации не сказано.
    А кинетики работают как часы

    — Cubietruck и Banana Pi M64 тоже работают как часы, ничего удивительного. Достаточно в Linux настроить регулярную очистку логов, что бы диск не забился.
    Далее, с блокировкой рекламы на Keenetic не все так хорошо Блокируем интернет-рекламу на роутерах Keenetic . Если мне потребуется более крутое решение, на одноплатный компьютер можно установить например Pi-hole. А в случае Keenetic Viva, будет только то, что вендор прописал. Захотели что нибудь новое, покупайте новую железку.
    Дополнение: Adguard DNS в Keenetic Viva отправляет DNS запросы на сторонние сервера которые могут хранить историю ваших запросов, и на них же выполняется фильтрация. При использование RaspAP и/или Pi-hole, фильтрация работает локально.

    • jryj
      /#23079350

      А что мешает на кинетик поставить entware и уже туда тот же adguardhome и будет локальная фильтрация.

  6. sol77
    /#23079236

    Не, штука конечно интересная но это для сугубо гиг фан, не более того, чисто прокачка скила в сетевых технологиях

  7. sasmir94
    /#23091234

    Сейчас видимо стало модным ставить докер к месту и не к месту… Чаще, к сожалению, встречается второе.

    • devzona
      /#23091250

      Что плохого в Docker? Экономит много времени на установку, гарантирует работоспособность ПО, накладные расходы практически нулевые.
      Все инструкцию по установке RaspAP выполнять довольно занятно. А в Docker, задал переменные, и вуаля все работает.