Если вдруг у вас есть Raspberry Pi, вы уже с ним наигрались и хотите найти ему полезное применение, то в этой статье я расскажу как быстро и просто превратить его в роутер, который может работать c VPN сервером по протоколу WireGuard. В виду того, что вычислительные возможности Raspberry Pi выше, чем у среднестатистического роутера, вы получите большую скорость Интернет при работе через VPN.

Ранее я публиковал статью, в которой рассказывал, как настроить WireGuard VPN клиент на роутере ASUS RT N56U. Вы можете сказать, что можно купить более мощный роутер или вообще роутер, который поддерживает WireGuard из коробки, но мне хотелось обойтись устройствами, которые были у меня в наличии. К тому же, что-то сделанное своими руками часто приносит большее удовольствие, так как ты начинаешь лучше разбираться в теме, да и греет душу мысль о том, что ты сэкономил деньги и можешь потратить их на что-то другое.

Как возникла идея

Купив себе Raspberry Pi 4 пару лет назад , я поигрался с ним, и как всегда, когда угасает интерес к вещи, положил на полку и забыл.

Когда я пытался установить VPN клиент на своей коллекции старых роутеров (TP-Link WR-841N, TP-Link WR-702N), и у меня это не выходило из-за их низких технических характеристик, я уже начал рассматривать Raspberry Pi в качестве альтернативы. У него было все для того, чтобы стать хорошим роутером: компактный размер, Ethernet разъем, встроенный модуль WiFi, производительный SoC и большой объем оперативной памяти, но мне попался ASUS RT N56U, и я решил использовать его.

На свой роутер АSUS я поставил прошивку OpenWRT и WireGuard клиент. Все работало, я даже написал статью о своем уcпешном опыте, но уж очень меня растраивала скорость Интернета через VPN. Да, она была больше, чем при использовании OpenVPN, достаточна для просмотра 4К видео, но WireGuard клиент на компьютере выдавал результат в несколько раз больше, так как производительность компьютера в разы выше производительности роутера.

Raspberry Pi 4 - это полноценный компьютер, отличающийся компактностью, на который можно установить множество операционных систем, такие как различные дистрибутивы Linux и даже Windows, поэтому я решил сделать из него роутер.

Поиск решения

Итак, задача о превращении Raspberry Pi 4 в роутер с поддержкой WireGuard была поставлена, и я принялся за ее решение.

Так как у мне удалось заставить свой роутер ASUS работать с протоколом WireGuard, используя прошивку OpenWRT, я и сейчас решил использовать ее.

OpenWRT – это Linux дистрибутив, основная задача которого – обеспечение работы роутера. Он имеет обширную библиотеку пакетов, позволяющую подстроить роутер под свои нужды.

WireGuard — это программное обеспечение и протокол, который проще и быстрее, чем OpenVPN и IPSec.

Первым делом я изучил видео и статьи в Интернете о том, как люди решали задачу, подобную моей. Но нужной мне полноценной инструкции от А до Я, я не нашел.

Больше всего меня увлекло эмоциональное и захватывающее видео от NetworkChuck, хотя оно подразумевало установку OpenVPN клиента, а не WireGuard, и подразумевалась настройка из командной строки, а не из GUI OpenWRT.

Как это часто бывает, видео немного устарело, и мне приходилось решать что-то уже по-своему, но когда я дошел до шага установки драйвера для WiFi USB адаптера, я не смог его установить, ни для одного из имеющихся у меня адаптеров.

Предлагаемое на форумах решение в виде компиляции исходного кода драйверов для OpenWRT мне с одной стороны показалось интересным и позволяющим получить новые знания, но с другой – нудным и менее универсальным. Хотелось какое-то другое решение.

У меня есть дорожный роутер TP-Link WR-702N, у которого всего лишь один разъем Ethernet и один встроенный модуль WiFi, я подумал, что ничто не мешает мне сделать что-то похожее из моего Raspberry Pi. Не знаю, для кого как, но для меня, когда я вижу, что задачу можно решить – это вдохновляет и мотивирует.

В итоге я нашел решение для своей задачи. Оно решает проблему подключения устройств из локальной сети к VPN, позволяет узнать новое применение вашему Raspberry Pi, разнообразить свой досуг или удивить друзей и знакомых необычным применением малинки.

Что понадобится

  1. Raspberry Pi 4.

  2. Роутер с доступом в Интернет.

  3. Ethernet кабель.

  4. Сетевой адаптер питания на 5В 3A с кабелем USB type C.

  5. MicroSD карта. Достаточно и 4GB.

  6. Адаптер MicroSD-SD и ноутбук с кардридером или USB MicroSD кардридер.

Решение задачи

  1. Заходим на страницу официального сайта OpenWRT, посвященную Raspberry Pi и загружаем свежий образ OpenWRT для Raspberry Pi 4. На момент написания статьи это версия 22.03.2

  2. Записываем образ OpenWRT на Micro SD карту. Я делал это в Windows при помощи программы balenaEtcher.

  3. Соединяем Ethernet кабелем компьютер и Raspberry Pi . Включаем Raspberry Pi. По умолчанию Raspberry Pi 4 c установленным OpenWRT имеет статический IP адрес 192.168.1.1, не имеет пароль для входа, также по умолчанию отключен WiFi интерфейс. Поэтому нужно включить и настроить WiFi, а также желательно поменять IP адрес и установить пароль.

  4. Настраиваем WiFi. Network->Wireless->Edit->Interface Configuration. Вводим настройки на владках General Setup, Advanced Settings.

  5. Устанавливаем пароль. System->Administration.

  6. Меняем IP адрес и убираем Ethernet интерфейс из LAN, чтобы использовать Ethernet интерфейс в качестве WAN. Network->Interfaces->Edit->LAN.

  7. Отключаем Raspberry Pi от сетевой карты компьютера.

  8. Подключаемся к точке доступа, созданной на Raspberry Pi. Открываем в браузере URL c адресом IP, который вы назначили Raspberry Pi.

  9. Настраиваем WAN порт Raspberry. Network->Interfaces->Add New Interface... В качестве WAN порта мы будем использовать Ethernet разъем Raspberry Pi. Так как разъем будет использоваться как WAN порт, а доступ к Raspberry Pi будет осуществляться через WiFi, при неверных настройках, которые нарушат работу интерфейса WiFi вам прийдется заново записать образ OpenWRT на microSD карту.

  10. Выключаем Raspberry Pi. Подключаем WAN порт Raspberry Pi к LAN порту домашнего роутера. Включаем Raspberry Pi.

  11. Убеждаемся, что доступ в интернет есть. Network->Diagnostics.

  12. Настраиваем файервол для WAN интерфейса. Network->Interfaces->WAN->Edit->Firewall Settings.

  13. Заходим на сайт https://www.myip.com/ чтобы узнать свой внешний IP адрес.

  14. Устанавливаем WireGuard. System->Software. Обновляем список пакетов (Update lists...), находим пакет luci-i18n-wireguard-en и устанавливаем его.

  15. Перегружаем Rasperry Pi. System->Reboot.

  16. Устанавливаем WireGuard на VPS сервер. Как это сделать я подробно расписал в своей статье.

  17. Добавляем Wireguard интерфейс. Network->Interfaces->Add New Interface... -> Create Interface

  18. Вводим данные на вкладке General Settings. Здесь необходимо ввести Private Key, Public Key, IP Address для созданного WireGuard интерфейса, который теперь находится на Raspberry Pi. Public Key можно посмотреть в секции Peer в конфиграционном файле /etc/wireguard/wg0.conf на VPS сервере с установленным WireGuard или получить из имеющегося Private Key.

  19. Заходим на вкладку Peers. Нажимаем Add Peer. Вводим оставшиеся данные для WireGuard. Это параметры интерфейса WireGuard, который находится на удаленном сервере.

  20. Удостоверяемся, что WireGuard интерфейс работает. RX и TX должны содержать ненулевые значения.

  21. Настраиваем Firewall. Network->Firewall->Add.

  22. Настраиваем маршрутизацию. Network->Routing->Add. В поле Target вводится IP адрес вашего сервера WireGuard фомате CIDR (<IP адрес>/32).

  23. Настраиваем DNS. Network->Interfaces->WAN->Edit->Advanced Settings.

  24. Проверяем работу VPN. Заходим на сайт https://www.myip.com/ и смотрим на свой внешний IP. Если он отличается от того, что был до включения VPN, то VPN работает.

  25. Если все устраивает, то можно сделать резервную копию micro SD карты при помощи программы Win32 Disk Imager. Это позволит хранить всю настроенную OpenWRT для вашего Raspberry Pi на локальном диске компьютера и быстро развернуть уже настроенный OpenWRT в случае, если собьются настройки.

Надеюсь, что я вас не сильно утомил, и вы теперь наслаждаетесь результатами своего труда.

Сравнение с решением от NetworkChuck

Мое решение отличается от решения NetworkChuck следующим:

1. Я использую только один WiFi интерфейс, который работает в качестве точки доступа, а не два, один из которых (встроенный) работает в качестве WiFi клиента к точке доступа, предоставляющей доступ в Интернет, а второй (USB WiFi адаптер, желательно с антенной) в качестве точки доступа.

2. Я выполняю все настройки, используя исключительно GUI OpenWRT.

3. Для VPN я использую WireGuard, а не OpenVPN.

У решения от NetworkChuck есть ряд преимуществ:

1. Так как не нужен проводной доступ роутеру, раздающему Интернет, решение подходит для публичной точки доступа в кафе или в аэропорту (если конечно публичная точка доступа позволит это сделать).

2. Так как для организации точки доступа используется USB WiFi адаптер с антенной, покрытие созданной WiFi сети будет шире и стабильнее.

У моего решения тоже есть ряд преимуществ:

1. Неподготовленному пользователю проще выполнить все в GUI OpenWRT по приведенным скриншотам, чем вводить все в комадной строке.

2. Cкорость Интернет, у моего решения будет выше и стабильнее, так как я подключаю Raspberry Pi к роутеру с Интернет через проводное соединение и использую WireGuard вместо OpenVPN.

Оставляю вам возможность проверить решение от NetworkChuck, если у вас окажется USB WiFi адаптер, для которого вы сможете установить драйвер в OpenWRT.

Анализ результатов

У меня дома не было лабораторных условий для проведения эксперимента.

Подключившись к VPN серверу, установленному на VPS от PulseHeberg и проверив скорость Интернета, я получил заветные цифры. Если учитывать, что у меня Интернет от провайдера с заявленной скоростью 100 МБ/c, я не уже не вижу смысла улучшать скорость соединения.

Я надеюсь, что вы получите результат не хуже моего. Буду признателен, если вы в комментариях напишете, какие результаты получились у вас. Желательно указать версию Raspberry PI, версию OpenWRT, заявленную скорость интренет вашего провайдера, на каком хостинге располагается WireGuard VPN сервер, и полученные вами результаты в SPEEDTEST.

Выводы

Raspberry Pi подходит для создания компактного роутера с поддержкой WireGuard. Скорость Internet через Wireguard VPN на Rapsberry Pi практически такая же как и при работе без него.

Теоретически можно попробовать сделать роутер и из Raspberry Pi 3, но я не проверял и думаю скорость VPN будет значительно ниже.

К спорным моментам можно отнести:

  1. Cтоимость Raspberry Pi (роутер, на который можно поставить OpenWRT все-таки стоит дешевле).

  2. Доступность Raspberry Pi в контексте происходящих сейчас событий.

  3. Мощность антенны встроенного модуля WiFi (я считаю, что у обычного роутера антенна получше).

Сфера применения Raspberry Pi не ограничивается домашним роутером с VPN, я находил и другие интересные решения, способные удивить вас и ваших знакомых. Я думаю, что это тема моей следующей статьи.

Комментарии (13)


  1. Aelliari
    21.10.2022 16:12

    Эх, прошел бы кто путь с IKEv2, аутентификацией по сертификатам на radius (возможно с хранением юзеров/ip в какой mariadb...) сервере, и статическими ip назначаемыми через radius...


    1. artyomsoft Автор
      21.10.2022 16:17
      +1

      Я старался сделать проще и доступнее. Но спасибо за наводку, я про IKEv2 не знал.


      1. Aelliari
        21.10.2022 16:18

        То что я написал не будет ни проще, ни доступнее:) это геморрой "на развернуть"

        Wireguard хорош, с легким шифрованием, можно запустить хоть на табуретке, но IKEv2 выглядящий как ктулху, тоже есть повсюду чуть ли не из коробки


        1. artyomsoft Автор
          21.10.2022 16:20

          Да я понял, просто я узнал еще про один протокол для VPN от Вас, поэтому и поблагодарил.


      1. Vasily_Pechersky
        23.10.2022 10:38

        Есть ещё FreeIPA которая фронтэнд ко всему этому(Ldap,RADIUS,user management Web interface).
        Ну и Swan(Open, strong) который IKE реализует. К нему есть плаг под NetwokManager и под винду стандартное подключение. Также iOS и Зелёный робот.
        Также принимаем во внимание VLAN, которыми можно разделить проводной интерфейс малины, чтобы она занималась VPN а раутер занимался WiFi.


  1. Sabirman
    21.10.2022 16:15

    Классная идея - использовать малину в качестве роутера. Интересно, какую задержку дает такое решение по сравнению, например с кенетиками (у роутеров есть аппаратная маршрутизация).


  1. kik_krsk
    21.10.2022 16:29

    А нельзя на базе OpenWRT сделать "роутер на палочке" чтобы были клиенты подключаемые по кабелю и обычный роутер в качестве точки доступа?


    1. artyomsoft Автор
      21.10.2022 18:56

      Я правильно Вас понимаю, что в этом случае Raspberry будет только предоставлять доступ по WireGuard, а доступ к провайдеру и WiFi будет предоставлять роутер со стандартной стоковой прошивкой и гораздо лучшим, чем у raspberry покрытием?


      1. kik_krsk
        22.10.2022 05:41

        raspberry будет предоставлять доступ к интернет и к Wireguard


  1. Djonyx7566
    22.10.2022 00:54

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


  1. Kenya-West
    23.10.2022 09:46

    Думаю, что лучше бы запостить на Хабр Q&A... но спрошу здесь?

    А как заставить WireGuard маршрутизировать трафик именно по доменам, а не по маскам IP/адресов? Знакомый devops-инженер пояснил мне за теорию OSI, что большинство VPN работает на третьем уровне модели, а там доменов, как таковых, не существует.

    И я не могу, соответственно, заставить WireGuard, скажем, маршрутизировать домены Facebook, а их, с учетом CDN, серверов авторизаций и сопутствующих доменов Meta, выходит под 30 штук. Если указывать ненадежные в данном случае маски IP, их там явно больше 80 выйдет, причем о них узнаешь лишь методом "тыка", и они часто меняются.

    Вот такая вот проблема


    1. Aelliari
      23.10.2022 12:08

      Я не дам тебе готового решения (но нааерняка в интернете есть, это не самый редкий кейс), но в целом, задача перенаправления в туннель по домену - решаемая. Ключевые слова для поиска - policy routing (vpn policy routing). Идея в чем, при ресолвинге доменного имени добавлять для ip (ipset списка, вернее даже добавить ip в ipset список) отдельный маршрут через другой интерфейс.


    1. artyomsoft Автор
      23.10.2022 13:46

      В кометариях к предыдущей моей статье, мне советовали посмотреть https://openwrt.org/docs/guide-user/network/routing/pbr, но я еще не разбирался, как можно сделать