Наверное, ни для кого уже не секрет, что использование технологии Virtual Private Network (VPN) становится повседневной необходимостью. На рынке присутствует много решений – платных и бесплатных.

Так как бесплатным бывает только сыр в мышеловке, бесплатные решения вызывают подозрения, да и надоедливая реклама, которая сейчас окружает все бесплатное в интернете, очень раздражает. Стоимость же платных решений достаточно высока.

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

Установка приложения на компьютер, смартфон или браузер имеет ряд недостатков.

  1. На некоторые устройства, например телевизор со Smart TV, или какое-то нестандартное устройство, требующее доступа к интернету, установка приложения может быть невозможна.

  2. На разные виды устройств ставятся разные приложения. Для Android оно будут одни, для Windows - другие.

  3. Приложение может содержать вирус или какую-нибудь уязвимость. Чем больше различных устройств с этим приложением вы используете, тем больше вероятность, что оно их содержит.

Мне хотелось более простого доступа к интернету через VPN, и я понял, что самое удобное решение, это предоставить доступ из локальной сети в сеть VPN. Для этого понадобится роутер, который может выступать в качестве VPN клиента, и VPN сервер.

То, что скорее всего, моя идея осуществима, меня вдохновило, и я принялся воплощать ее в жизнь. Процесс этот был методом проб и ошибок, я его не документировал, да и, наверное, это было бы утомительно приводить его в этой статье. Результатом стало то, что из множества протоколов VPN (PPTP, L2TP/IPSec, OpenVPN и WireGuard) я выбрал WireGuard, а из различных кастомных прошивок (DD-WRT, FreshTomato, OpenWRT) я выбрал OpenWRT. Также из-за того, что я хотел иметь постоянный доступ в интернет и проводить различные эксперименты, я установил кастомную прошивку на один роутер и подключил его WAN порт к одному из LAN портов другого, имеющего доступ в интернет.

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

Установка кастомной прошивки на роутер

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

Вам понадобится одна из самых последних версий этой прошивки.  На момент написания статьи это OpenWrt 22.03.0.  

Для начала необходимо убедиться, что эта версия прошивки есть для вашего роутера, что у роутера достаточно ресурсов, чтобы корректно работала прошивка и была возможность поставить VPN клиент.

Следует внимательно почитать страницу на сайте OpenWRT для вашего роутера, посмотреть какие у него есть особенности. Например, как можно восстановить стоковую прошивку на вашем роутере, как необходимо устанавливать кастомную прошивку. Также необходимо внимательно изучить информацию об аппаратных версиях вашего роутера. Роутеры одной модели могут иметь разные аппаратные реализации, это очень важно, чтобы не испортить роутер при перепрошивке.

Так как у меня был роутер ASUS RT-56U V1, то здесь приведу, как я устанавливал прошивку на свой роутер. Подробно процесс описан по следующей ссылке https://www.asus.com/ru/support/FAQ/1000814/.

  1. Загружаем свежую прошивку для ASUS RT-N56U от OpenWRT.

  2. Загружаем приложение для прошивки роутера ASUS(Firmware Restoration).

  3. Отключаем в Windows все сетевые карты на компьютере, кроме той, к которой при помощи кабеля будем подключать роутер.

  4. Заходим в настройки TCP/IP для сетевой карты и вводим адрес 192.168.1.10 и маску 255.255.255.0.

  5. Запускаем приложение для прошивки.

  6. Выбираем файл с нужной прошивкой.

  7. Подключаем роутер по сетевому кабелю к компьютеру. Зажимаем кнопку Reset и включаем роутер. Ждем пока он перейдет в режим обновления (мигающий светодиод питания, я подождал на всякий случай секунд 15).

  8. Нажимаем кнопку Upload в приложении.

  9. Ждем пока роутер прошьется и перезагрузится.

  10. Заходим в настройки TCP/IP для сетевой карты и устанавливаем переключатель на «Получать IP адрес автоматически».

Настройка WiFi на роутере

Так как в прошивке OpenWRТ по умолчанию отключен WiFi, его нужно включить в настройках.

  1. Заходим в браузере по адресу  https://192.168.1.1 и выполняем базовую настройку роутера (устанавливаем пароли и доступ к роутеру через SSH, включаем и настраиваем WiFi.)

  2. Подключаем роутер к интернету.

  3. Перезагружаем роутер.

  4. Подключаемся к роутеру через WiFi.

Я использовал еще один роутер, у которого было настроено подключение к интернету, поэтому мне достаточно было WAN порт роутера с кастомной прошивкой соединить при помощи кабеля с LAN портом роутера с интернетом. Вам же, если, вы хотите обойтись одним роутером, в зависимости от вида доступа в интернет вашего провайдера придётся больше покопаться в настройках роутера (например, если доступ предоставляется по технологии PPPoE).

Установка WireGuard клиента на роутер

Если вы через роутер с прошивкой от OpenWRT можете заходить в Internet, то можно приступать к установке WireGuard клиента. Во многих видео и статьях это делается из командной строки. На мой взгляд, это проще это сделать из графического интерфейса роутера.

  1. Обновляем список пакетов: System -> Software -> Update Lists…

  2. Заходим в раздел System -> Software и устанавливаем пакет luci-i18n-wireguard-en.

  3. Перегружаем роутер.

Роутер у нас предварительно настроен, теперь можно приступить к настройке VPN сервера WireGuard.

Выбор и создание VPS сервера

Для начала нужно выбрать провайдера VPS сервера. Есть несколько вариантов, у каждого есть свои достоинства и недостатки. Все зависит от ваших потребностей. Вам необходимо выбрать следующие параметры:

  • стоимость аренды;

  • производитель процессора;

  • количество процессоров;

  • количество оперативной памяти;

  • тип жесткого диска;

  • размер жесткого диска;

  • пропускная способность сети;

  • лимит исходящего и входящего трафика.

Выбор провайдера VPS сервера оставляют за вами, для проверки решения можно использовать, например, DigitalOcean.

Выбор операционной системы на VPS серверe

Обычно на VPS сервер при создании можно установить какую-либо операционную из списка. Все зависит от ваших предпочтений и знаний, но по опыту хочу сказать, что Ubuntu 20.04 будет самым оптимальным решением для начала.

Установка VPN сервера

Следующий шаг, это установка VPN сервера. Для установки сервера WireGuard существует множество статей и видео в Internet. Если вы хотите лучше понимать технологию или улучшить свои знания по Linux, можно настраивать по ним. Но к счастью, на данный момент существует решение, которое позволяет установить и настроить сервер без труда человеку, имеющему минимальные знания по Linux. Утилита располагается на GitHub по адресу: https://github.com/angristan/wireguard-install

Нужно зайти в консоль ОС, установленной на VPS и выполнить следующие команды:

# curl -O https://raw.githubusercontent.com/angristan/wireguard-install/master/wireguard-install.sh
# chmod +x wireguard-install.sh
# ./wireguard-install.sh

Если вы боитесь выполнять этот скрипт вслепую, что логично, просмотрите его содержимое с помощью следующей команды перед установкой.

# cat wireguard-install.sh

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

После выполнения скрипт сообщит, где находится файл с настройками для клиента. Этот файл нам необходимо скачать к себе на компьютер при помощи команды scp, утилиты WinSCP, так как он понадобится нам для настройки WireGuard клиента. Но можно просто вывести его содержимое, используя команду cat в SSH консоли и копировать данные, которые нам понадобятся.

Настройка WireGuard клиента на роутере

1.    Добавляем интерфейс WireGuard. Network -> Interfaces -> Add new interface…

Создание интерфейса WireGuard
Создание интерфейса WireGuard

2.    Заполняем вкладку General Settings настройками из файла конфигурации WireGuard клиента (Private Key, Public Key, IP Addresses). Для получения Public Key в SSH консоли необходимо ввести:

# echo <значение приватного ключа> | wg pubkey
Содержимое файла конфигурации клиента
Содержимое файла конфигурации клиента
Вкладка General Settings
Вкладка General Settings

3.    Добавляем параметры WireGuard сервера (Description, Public Key, Preshared Key, Allowed IPs, Route Allowed IPs,  End Point Host, End Point Port, Persistent Keep Alive). Большинство параметров располагается в файле /etc/wireguard/wg0.conf на сервере. Peers -> Add Peer  

Содержимое файла конфигурации сервера WireGuard
Содержимое файла конфигурации сервера WireGuard
Параметры WireGuard сервера
Параметры WireGuard сервера

4.    Удостоверяемся, что VPN поднялся. Network -> Interfaces. Если он работает, то зачения RX и TX будут ненулевые.

 

Работающий WireGuard VPN
Работающий WireGuard VPN

5.    Настраиваем файервол для Fireguard. Network -> Firewall -> Add.

Параметры файервола для WireGuard
Параметры файервола для WireGuard

 

6.    Добавляем маршрут в таблицу маршрутизации. В поле Target, вам необходимо ввести реальный IP адрес вашего сервера в нотации CIDR (<IP адрес>/32) Network -> Routing -> Add.

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

Выводы

На мой взгляд, такой вариант организации VPN отличается простотой в использовании самого VPN. При использовании VPN достаточно просто подключить WAN порт роутера к порту, имеющему доступ в интернет. Настроенный таким образом роутер можно взять с собой в командировку и подключить к роутеру, который будет там, и получить точно такой же интернет за тысячи километров от дома. Решение немного напоминает рецепт борща, так как можно экспериментировать с различными VPS провайдерами, роутерами, прошивками, VPN протоколами, VPN серверами и их настройками, операционными системами. Я привел только тот вариант, который у меня получился и устроил. Например, я пробовал использовать OpenVPN, но хочу сразу сказать, меня не устроила скорость получаемого интернета, она была в 2-3 раза ниже, чем при использовании WireGuard.

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

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


  1. leveler
    15.10.2022 22:09
    +5

    Я пробовал такую схему. У нее есть неприятная особенность - при постоянном VPN могут оказаться недоступными некоторые российские ресурсы. Чтобы этого избежать нужно разносить маршруты, а это нетривиальная задача, но решаемая.


    1. leveler
      15.10.2022 22:23

      Вдогонку самому себе. Решал так: VDS с Mikrotik CHR внутри РФ, он рулит маршрутизацией и, собственно, VPN-сервером. Второй VDS уже у иностранного провайдера, чтобы выпускать только нужный траффик, остальной ходит внутри РФ. Списки IP, отдельные зоны, AS обновляются скриптом на CHR. В итоге роутер можно точно так же перемещать с собой куда угодно, но нет проблемы с отечественными ресурсами.


      1. edo1h
        15.10.2022 23:03

        Списки IP, отдельные зоны, AS обновляются скриптом на CHR

        откуда берёте списки? я использую ip2location, недавно наткнулся, что для ipv6 адреса ya.ru ошибочно определяется финляндия.


    1. artyomsoft Автор
      15.10.2022 23:58

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


    1. SergeyMax
      16.10.2022 09:27
      +2

      Чтобы этого избежать нужно разносить маршруты, а это нетривиальная задача, но решаемая.

      В OpenWrt нажмите кнопочку vpn policy routing, и впишите в список все сайты, к которым нужен прямой доступ.


    1. prony
      16.10.2022 13:29

      Не особо сложно, на самом деле. Делал маршрутизацию по белому листу, т.к. нет смысла весь трафик перегонять через vpn. https://github.com/prony5/antizapret


    1. vikarti
      17.10.2022 06:55

      При желании списки что куда роутить можно брать по BGP
      https://habr.com/ru/post/594551/
      https://habr.com/ru/post/549282/
      у https://antifilter.network/bgp есть не только списки заблокированного и около но и например списки российских адресов.
      Другое дело что это не решает проблему с условными двумя сайтами который используют cloudflare, и при этом один закрылся от России а второй от всего кроме России, и при этом их обслуживает ближайшая к пользователю нода cloudflare с одним и тем же IP. Тут уж только прикручивать дополнительно что-то вроде ControlD


  1. INSTE
    15.10.2022 22:38
    +17

    • Берем любой кинетик

    • Настраиваем в веб подключение к практически любому мыслимому VPN

    • Создаем политику только с этим подключением

    • Кидаем в нее мышкой сегменты и/или устройства

    • ...

    • PROFIT


    1. artyomsoft Автор
      15.10.2022 23:47
      -1

      К сожалению, роутера, который бы cодержал vpn клиента из коробки типа Keenetic не было, хотелось обойтись тем, что есть.


      1. DaemonGloom
        16.10.2022 09:02
        +3

        Ваш Asus и так умеет быть vpn-клиентом, просто в нём нет именно wireguard клиента.


        1. artyomsoft Автор
          16.10.2022 09:41

          Именно vpn клиент? Или подключение по pptp, l2tp протоколам к провайдеру?


          1. DaemonGloom
            16.10.2022 12:12

            https://www.asus.com/ru/support/FAQ/1011232/
            Это именно VPN-клиент. В соседней вкладке можно и VPN-сервер настроить, если это захочется.


            1. artyomsoft Автор
              16.10.2022 19:25

              Ccылка, которую вы привели, касается роутера ASUS RT-AX88U c прошивкой ASUSWRT, которая является модифицированной прошивкой Tomato , но у меня ASUS RT-N56U v1, и на него, на сколько я знаю, такой прошивки ASUSWRT нет.


  1. Fullspb
    16.10.2022 02:52
    +9

    Чуть укоротить можно. Покупаем keenetic. Там весь зоопарк из коробки, включая wireguard. Кнопками указываем кому ломиться через впн а кому нет. Либо же вообще конкретные адреса.


    1. Nahrenako
      16.10.2022 04:32

      Или Firewalla Gold…


    1. SerpentFly
      16.10.2022 10:57
      +3

      Плюсую за Keenetic. Я, к примеру, так Яндекс-станции за границей через домашний VPN в РФ подключаю, чтобы обойти региональные ограничения Кинопоиска.


      1. Vitvitsky
        16.10.2022 16:37

        Kinopoisk при таком подключении не ругается на vpn? VPN на каком хостинге настраивали?


        1. SerpentFly
          16.10.2022 17:19

          Нет, не ругается, но VPN поднят не на хостинге, это моя домашняя сеть в РФ. VPN/VPS провайдера действительно несложно вычислить по IP.

          Не так давно, кстати, делал под заказ один проект для сервиса, где клиенты-провайдеры подключаются к серверу-посреднику, а последний предоставляет клиентам-пользователям ходить в сеть используя адреса клиентов-провайдеров. Причем пакеты от сервера-посредника идут напрямую со спуфингом адреса-источника (меняется на адрес клиента-провайдера) для уменьшения RTT, соответственно целевой сервер отвечает на этот адрес, ответ идет клиенту-провайдеру и от него внутри UDP тоннеля доставляется серверу-посреднику, который уже отвечает клиенту-пользователю. Удивительно, но работало и целевой сайт видел адрес клиента-провайдера. Правда с сайтами на CDN хостингах возникали сложности, похоже такая схема что-то ломала в маршрутизации.


      1. Reev3R
        16.10.2022 19:29

        Я тоже до недавнего времени пользовался такой схемой, но примерно месяца два назад КиноПоиск начал ругается на то что у меня включен vpn и скрывает весь контент. Не встречались с таким?


        1. SerpentFly
          16.10.2022 19:41

          Пока нет. И Яндекс-станция и Кинопоиск на iPad работают из Испании через домашний VPN в полном обьеме.


  1. Hellion
    16.10.2022 11:27

    Ни у кинетика ни на openWrt(вроде как) нет удобной фишки как у pfSense: добавить роут до хостов через выбранный туннель, а не через ip. Тогда вообще получается очень удобно, а то некоторые запрещенные ресурсы имеют привычку менять/добавлять адреса, и по этой причине приходиться лазить на роутер и добавлять записи. Для масс-ресурсов типа facebook/instagram я выгрузил адреса по AS и этого было достаточно.


    1. INSTE
      16.10.2022 11:31

      Вообще есть, но это работает не на всех подключениях. Скажем на Ethernet нельзя просто выплюнуть в интерфейс пакет, ему нужен mac роутера. Потому там нужен шлюз. Для PPP/OVPN TUN/Wireguard можно просто пихать в интерфейс, а удаленный пир сам дальше разберется - с такими соединениями указание "только интерфейса" по идее работает.


    1. DaemonGloom
      16.10.2022 12:19
      +1

      Если вы имеете ввиду добавление в список dns-имён, а не ip — то это умеет, например, Микротик.
      OpenWrt, впрочем, тоже это умеет через VPN Policy routing (https://openwrt.org/docs/guide-user/network/routing/pbr ).


      1. artyomsoft Автор
        16.10.2022 13:45

        Спасибо за полезную идею


  1. madwtj
    16.10.2022 11:27

    А какими VPS пользуетесь вы? Что бы не дорого, не было проблем с оплатой, не обязательно рубли хотя бы USDT ????, нормальная скорость и нет проблем с доступом к сайтам?


    1. artyomsoft Автор
      16.10.2022 20:44

      Я использовал VPS, где оплата в евро или долларах.


    1. Timofeuz
      17.10.2022 06:43

      Oracle free tier vps, бесплатно :). Но не знаю как из РФ и с рублями.


      1. hollycon
        17.10.2022 06:52

        Нет Оракла в Росиии уже как с полгода. Было удобно, но с марта для нас он является тыквой.


  1. KyJIep-79
    16.10.2022 12:25
    +2

    К комментам о том, что на кинетиках это вообще не проблема, да, не проблема, но! Wireguard в кинетиках (с родными прошивками) не поддерживает ipv6.


    1. INSTE
      16.10.2022 17:14

      Работа по внедрению IPv6 сейчас ведется во всю мощь во всех направлениях, stay tuned.


      1. KyJIep-79
        16.10.2022 20:37
        +1

        Рассчитываю на это, но пока в отношении wireguard не вижу даже зачатков этой работы даже в 3.9b1 по сравнению с актуальной на данный момент стабильной 3.8, как впрочем и в сравнении с несколькими предыдущими стабильными релизами keenetic os. Насколько я знаю с openvpn в кинетиках та же ситуация.