Raspberry Pi как роутер раздающий интернет-соединение через VPN
1. Установка и подключение к VPN на RPi – 1.1. OpenVPN – 1.2. SoftEther 2. Раздача интернет-соединения через VPN по Wi-Fi – 2.1. Установка create_ap – 2.2. Создание Wi-Fi точки доступа через create_ap 3. Раздача интернет-соединения через VPN по Ethernet-кабелю – 3.1. Настройка Ethernet-интерфейса – 3.2. Настройка маршрутизацииВсе инструкции описанные ниже тестировались на оригинальной ОС для Raspberry Pi Raspberry Pi OS (ранее Raspbian). Оригинальный Raspberry Pi OS это дистрибутив Linux на основе Debian, в случае установки на устройство ОС Linux на основе RedHat или иной базы, пакетный менеджер и названия пакетов могут отличаться.
Образ Raspberry Pi OS, на основе которого была написана данная статья: 2019-09-26-raspbian-buster.img.
Все действия описанные ниже производятся только в терминале (консоли) Linux.
Команды начинающиеся с приглашения # выполняются от root-пользователя, приглашение $ означает выполнение от обычного пользователя.
Для получения root-прав в Raspberry Pi OS воспользуйтесь командами sudo su.
1. Установка и подключение к VPN на RPi
1.1. Установка OpenVPN-клиента и подключение к OpenVPN-цепи на RPi
Установка OpenVPN-клиента и подключение к OpenVPN на Raspberry Pi полностью совпадает с инструкцией описанной для Linux на основе Debian. Следует помнить, что название сетевого интерфейса, через который будет прокидываться описываемая в дальнейшем раздача интернет-соединения, будет иметь вид tun0 или аналогичный, но с другим порядковым номером.Для подключения к OpenVPN в фонов режиме (режиме демона) следует вставить в начало файла-конфигурации VPN-цепи следующую строку.
deamon
1.2 Установка SoftEther-клиента и подключение к SoftEther-цепи на RPi
Аналогично ситуации с OpenVPN, инструкция по установке SoftEther-клиента и подключению к SoftEther-цепи почти полностью совпадает с инструкцией по SoftEther для Debian-based Linux, за исключением выбора архива с исходным кодом SoftEther-клиента. Raspberry Pi это устройство на основе ARM-процессора, поэтому SoftEther-клиент следует выбирать ARM EABI. Например, на момент написания статьи актуальной была версия v4.34-9745-rtm. Для этой версии команды скачивания SoftEther-клиента и распаковки его архива (пункт 1 в инструкции по SoftEther для Linux) выглядят как в листинге ниже.$ wget https://www.softether-download.com/files/softether/v4.34-9745-rtm-2020.04.05-tree/Linux/SoftEther_VPN_Client/32bit_-_ARM_EABI/softether-vpnclient-v4.34-9745-rtm-2020.04.05-linux-arm_eabi-32bit.tar.gz $ tar -xvf softether-vpnclient-v4.34-9745-rtm-2020.04.05-linux-arm_eabi-32bit.tar.gzВ случае с SoftEther название сетевого интерфейса, который будет использован в дальнейшем для прокидывания интернет-соединения, будет иметь вид vpn_vpn.
2. Раздача интернет-соединения через VPN по Wi-Fi
Существует несколько способов организации Wi-Fi точки доступа на ОС семейства Linux. Одним из наиболее быстрых и простых является использование утилиты create_ap. Далее будет рассмотрен именно этот вариант.2.1 Установка create_ap на RPi
Перед установкой create_ap следует устранить зависимости.# apt update # apt install git cmake gcc g++ libncurses5-dev libreadline-dev libssl-dev make zlib1g-dev dnsmasq hostapdДалее нужно непосредственно скачать и установить утилиту.
# git clone https://github.com/oblique/create_ap # cd create_ap # make install
2.2. Создание Wi-Fi точки доступа через create_ap на RPi
Перед созданием Wi-Fi точки доступа VPN-соединение, будь то OpenVPN или SoftEther, уже должно быть успешно установлено.
Не все модели Raspberry Pi имеют встроенный Wi-Fi адаптер способный раздавать беспроводную сеть, возможно к устройству потребуется подключить дополнительный USB-адаптер беспроводной сети.
Для создания Wi-Fi точки доступа раздающий интернет под VPN следует перейти в директорию create_ap, скачанной и установленной на предыдущем шаге, и выполнить команду аналогичную указанной в листинге ниже.
# cd create_ap # create_ap wlan0 tun0 VPNWiFi strongpasswordВ данном примере wlan0 – адаптер беспроводной сети (внешний USB-адаптер, без дополнительных действий по отключению встроенного адаптера, будет иметь название wlan1), tun0 – название сетевого интерфейса, созданного VPN-подключением, для OpenVPN – tun0 (или аналогичное, но с другим порядковым номером), для SoftEther – vpn_vpn. VPNWiFi – название Wi-Fi сети, а strongpassword следует заменить на пароль точки доступа.
3. Раздача интернет-соединения через VPN по Ethernet-кабелю на RPi
Все последующие инструкции подразумевают имя eth0 для Ethernet-интерфейса, который и будет раздавать интернет через VPN.
В консольном редакторе nano комбинация клавиш Ctrl+O сохраняет изменения, а после нажатия Ctrl+X будет произведен выход из редактора и возврат к командной строке.
3.1. Настройка Ethernet-интерфейса
Перед началом настройки следует обновить репозитории, установить и настроить dnsmasq.# apt update # apt install dnsmasqПосле успешной установки необходимо отредактировать /etc/dnsmasq.conf, например открыв файл в консольном редакторе nano.
# nano /etc/dnsmasq.confВид открывшегося для редактирования файла следует привести к виду аналогичному примеру ниже (9.9.9.9 и 7.7.7.7 следует заменить на DNS DeepWebVPN).
interface=eth0 listen-address=192.168.2.1 dhcp-range=192.168.2.10,192.168.2.100,12h server=9.9.9.9 server=7.7.7.7 bind-interfaces domain-needed bogus-privДалее следует отключить dhcpcd для Ethernet-интерфейса через который планируется раздача интернета под VPN. По умолчанию на Raspberry Pi это eth0.
# echo "denyinterfaces eth0" >> /etc/dhcpcd.confНа данном этапе необходимо сконфигурировать Ethernet-интерфейс устройства, придав содержимому файла /etc/network/interfaces следующий вид.
auto eth0 allow-hotplug eth0 iface eth0 inet static address 192.168.2.1 netmask 255.255.255.0 network 192.168.2.0 broadcast 192.168.2.255
В результате преобразования /etc/network/interfaces после перезагрузки RPi другие сетевые интерфейсы (wlan0, внешний wlan1, если таковой имеется, и другие), кроме явно определенных в листинге выше, вероятнее всего перестанут автоматически подключаться к сетям. Поэтому если необходимо, чтобы и другие сетевые интерфейсы работали после перезагрузки, их надо однозначно задать, дописав конфигурацию в конец файла.
Пример конфигурации /etc/network/interfaces для случая, когда само RPi получает доступ к интернету от 4G-роутера, определяемого ОС не как внешнее USB-устройство, а как Ethernet-интерфейс eth1.
auto eth0 allow-hotplug eth0 iface eth0 inet static address 192.168.2.1 netmask 255.255.255.0 network 192.168.2.0 broadcast 192.168.2.255 auto eth1 allow-hotplug eth1 iface eth1 inet dhcp
3.2. Настройка маршрутизации
После успешного подключения к VPN следует перейти к настройки маршрутизации, команды для которой можно отобразить в одном скрипте.#!/bin/sh #Setup IP forwarding echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf echo 1 > /proc/sys/net/ipv4/ip_forward sysctl net.ipv4.ip_forward=1 #Restart dnsmasq service dnsmasq restart #Reset Iptables rules ipt="/sbin/iptables" ## Failsafe - die if /sbin/iptables not found ! -x "$ipt" ] && { echo "$0: \"${ipt}\" command not found."; exit 1; } $ipt -P INPUT ACCEPT $ipt -P FORWARD ACCEPT $ipt -P OUTPUT ACCEPT $ipt -F $ipt -X $ipt -t nat -F $ipt -t nat -X $ipt -t mangle -F $ipt -t mangle -X $ipt -t raw -F $ipt -t raw -X #Set Iptables rules $ipt -t nat -A POSTROUTING -o tun0 -j MASQUERADE $ipt -A FORWARD -i tun0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT $ipt -A FORWARD -i eth0 -o tun0 -j ACCEPT
В данном скрипте tun0 возможно потребуется заменить на сетевой интерфейс туннеля VPN. Для OpenVPN сетевой интерфейс туннеля будет иметь имя tun0 (или аналогичное, но с другим порядковым номером), для SoftEther – vpn_vpn.
Скрипт следует записать в файл, например, /home/pi/start-router.sh, дать ему права на исполнение.
# chmod a+x /home/pi/start-router.shТеперь можно запустить скрипт.
# cd /home/pi/ && ./start-router.sh