
Наверное, ни для кого уже не секрет, что использование технологии Virtual Private Network (VPN) становится повседневной необходимостью. На рынке присутствует много решений – платных и бесплатных.
Так как бесплатным бывает только сыр в мышеловке, бесплатные решения вызывают подозрения, да и надоедливая реклама, которая сейчас окружает все бесплатное в интернете, очень раздражает. Стоимость же платных решений достаточно высока.
Обычно решение представляет из себя приложение, которое устанавливается на компьютер, смартфон или браузер, и серверную часть, с которой это обеспечение работает. Часто VPN позволяет выбирать страну, где будет находиться VPN сервер.
Установка приложения на компьютер, смартфон или браузер имеет ряд недостатков.
На некоторые устройства, например телевизор со Smart TV, или какое-то нестандартное устройство, требующее доступа к интернету, установка приложения может быть невозможна.
На разные виды устройств ставятся разные приложения. Для Android оно будут одни, для Windows - другие.
Приложение может содержать вирус или какую-нибудь уязвимость. Чем больше различных устройств с этим приложением вы используете, тем больше вероятность, что оно их содержит.
Мне хотелось более простого доступа к интернету через 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/.
Загружаем свежую прошивку для ASUS RT-N56U от OpenWRT.
Загружаем приложение для прошивки роутера ASUS(Firmware Restoration).
Отключаем в Windows все сетевые карты на компьютере, кроме той, к которой при помощи кабеля будем подключать роутер.
Заходим в настройки TCP/IP для сетевой карты и вводим адрес 192.168.1.10 и маску 255.255.255.0.
Запускаем приложение для прошивки.
Выбираем файл с нужной прошивкой.
Подключаем роутер по сетевому кабелю к компьютеру. Зажимаем кнопку Reset и включаем роутер. Ждем пока он перейдет в режим обновления (мигающий светодиод питания, я подождал на всякий случай секунд 15).
Нажимаем кнопку Upload в приложении.
Ждем пока роутер прошьется и перезагрузится.
Заходим в настройки TCP/IP для сетевой карты и устанавливаем переключатель на «Получать IP адрес автоматически».
Настройка WiFi на роутере
Так как в прошивке OpenWRТ по умолчанию отключен WiFi, его нужно включить в настройках.
Заходим в браузере по адресу https://192.168.1.1 и выполняем базовую настройку роутера (устанавливаем пароли и доступ к роутеру через SSH, включаем и настраиваем WiFi.)
Подключаем роутер к интернету.
Перезагружаем роутер.
Подключаемся к роутеру через WiFi.
Я использовал еще один роутер, у которого было настроено подключение к интернету, поэтому мне достаточно было WAN порт роутера с кастомной прошивкой соединить при помощи кабеля с LAN портом роутера с интернетом. Вам же, если, вы хотите обойтись одним роутером, в зависимости от вида доступа в интернет вашего провайдера придётся больше покопаться в настройках роутера (например, если доступ предоставляется по технологии PPPoE).
Установка WireGuard клиента на роутер
Если вы через роутер с прошивкой от OpenWRT можете заходить в Internet, то можно приступать к установке WireGuard клиента. Во многих видео и статьях это делается из командной строки. На мой взгляд, это проще это сделать из графического интерфейса роутера.
Обновляем список пакетов: System -> Software -> Update Lists…
Заходим в раздел System -> Software и устанавливаем пакет luci-i18n-wireguard-en.
Перегружаем роутер.
Роутер у нас предварительно настроен, теперь можно приступить к настройке 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…

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


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


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

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

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)
INSTE
15.10.2022 22:38+17Берем любой кинетик
Настраиваем в веб подключение к практически любому мыслимому VPN
Создаем политику только с этим подключением
Кидаем в нее мышкой сегменты и/или устройства
...
PROFIT
artyomsoft Автор
15.10.2022 23:47-1К сожалению, роутера, который бы cодержал vpn клиента из коробки типа Keenetic не было, хотелось обойтись тем, что есть.
DaemonGloom
16.10.2022 09:02+3Ваш Asus и так умеет быть vpn-клиентом, просто в нём нет именно wireguard клиента.
artyomsoft Автор
16.10.2022 09:41Именно vpn клиент? Или подключение по pptp, l2tp протоколам к провайдеру?
DaemonGloom
16.10.2022 12:12https://www.asus.com/ru/support/FAQ/1011232/
Это именно VPN-клиент. В соседней вкладке можно и VPN-сервер настроить, если это захочется.artyomsoft Автор
16.10.2022 19:25Ccылка, которую вы привели, касается роутера ASUS RT-AX88U c прошивкой ASUSWRT, которая является модифицированной прошивкой Tomato , но у меня ASUS RT-N56U v1, и на него, на сколько я знаю, такой прошивки ASUSWRT нет.
Fullspb
16.10.2022 02:52+9Чуть укоротить можно. Покупаем keenetic. Там весь зоопарк из коробки, включая wireguard. Кнопками указываем кому ломиться через впн а кому нет. Либо же вообще конкретные адреса.
SerpentFly
16.10.2022 10:57+3Плюсую за Keenetic. Я, к примеру, так Яндекс-станции за границей через домашний VPN в РФ подключаю, чтобы обойти региональные ограничения Кинопоиска.
Vitvitsky
16.10.2022 16:37Kinopoisk при таком подключении не ругается на vpn? VPN на каком хостинге настраивали?
SerpentFly
16.10.2022 17:19Нет, не ругается, но VPN поднят не на хостинге, это моя домашняя сеть в РФ. VPN/VPS провайдера действительно несложно вычислить по IP.
Не так давно, кстати, делал под заказ один проект для сервиса, где клиенты-провайдеры подключаются к серверу-посреднику, а последний предоставляет клиентам-пользователям ходить в сеть используя адреса клиентов-провайдеров. Причем пакеты от сервера-посредника идут напрямую со спуфингом адреса-источника (меняется на адрес клиента-провайдера) для уменьшения RTT, соответственно целевой сервер отвечает на этот адрес, ответ идет клиенту-провайдеру и от него внутри UDP тоннеля доставляется серверу-посреднику, который уже отвечает клиенту-пользователю. Удивительно, но работало и целевой сайт видел адрес клиента-провайдера. Правда с сайтами на CDN хостингах возникали сложности, похоже такая схема что-то ломала в маршрутизации.
Reev3R
16.10.2022 19:29Я тоже до недавнего времени пользовался такой схемой, но примерно месяца два назад КиноПоиск начал ругается на то что у меня включен vpn и скрывает весь контент. Не встречались с таким?
SerpentFly
16.10.2022 19:41Пока нет. И Яндекс-станция и Кинопоиск на iPad работают из Испании через домашний VPN в полном обьеме.
Hellion
16.10.2022 11:27Ни у кинетика ни на openWrt(вроде как) нет удобной фишки как у pfSense: добавить роут до хостов через выбранный туннель, а не через ip. Тогда вообще получается очень удобно, а то некоторые запрещенные ресурсы имеют привычку менять/добавлять адреса, и по этой причине приходиться лазить на роутер и добавлять записи. Для масс-ресурсов типа facebook/instagram я выгрузил адреса по AS и этого было достаточно.
INSTE
16.10.2022 11:31Вообще есть, но это работает не на всех подключениях. Скажем на Ethernet нельзя просто выплюнуть в интерфейс пакет, ему нужен mac роутера. Потому там нужен шлюз. Для PPP/OVPN TUN/Wireguard можно просто пихать в интерфейс, а удаленный пир сам дальше разберется - с такими соединениями указание "только интерфейса" по идее работает.
DaemonGloom
16.10.2022 12:19+1Если вы имеете ввиду добавление в список dns-имён, а не ip — то это умеет, например, Микротик.
OpenWrt, впрочем, тоже это умеет через VPN Policy routing (https://openwrt.org/docs/guide-user/network/routing/pbr ).
madwtj
16.10.2022 11:27А какими VPS пользуетесь вы? Что бы не дорого, не было проблем с оплатой, не обязательно рубли хотя бы USDT ????, нормальная скорость и нет проблем с доступом к сайтам?
KyJIep-79
16.10.2022 12:25+2К комментам о том, что на кинетиках это вообще не проблема, да, не проблема, но! Wireguard в кинетиках (с родными прошивками) не поддерживает ipv6.
INSTE
16.10.2022 17:14Работа по внедрению IPv6 сейчас ведется во всю мощь во всех направлениях, stay tuned.
KyJIep-79
16.10.2022 20:37+1Рассчитываю на это, но пока в отношении wireguard не вижу даже зачатков этой работы даже в 3.9b1 по сравнению с актуальной на данный момент стабильной 3.8, как впрочем и в сравнении с несколькими предыдущими стабильными релизами keenetic os. Насколько я знаю с openvpn в кинетиках та же ситуация.
leveler
Я пробовал такую схему. У нее есть неприятная особенность - при постоянном VPN могут оказаться недоступными некоторые российские ресурсы. Чтобы этого избежать нужно разносить маршруты, а это нетривиальная задача, но решаемая.
leveler
Вдогонку самому себе. Решал так: VDS с Mikrotik CHR внутри РФ, он рулит маршрутизацией и, собственно, VPN-сервером. Второй VDS уже у иностранного провайдера, чтобы выпускать только нужный траффик, остальной ходит внутри РФ. Списки IP, отдельные зоны, AS обновляются скриптом на CHR. В итоге роутер можно точно так же перемещать с собой куда угодно, но нет проблемы с отечественными ресурсами.
edo1h
откуда берёте списки? я использую ip2location, недавно наткнулся, что для ipv6 адреса ya.ru ошибочно определяется финляндия.
artyomsoft Автор
Да, к сожалению, интернет становится все более сегментированным, и после эйфории от полученного результата, я заметил, что несколько сайтов не открылись. Но я решил проблему простой сменой VPS провайдера. Идея с маршрутизацией хорошая и тоже мне приходила в голову, но хотелось простое решение.
SergeyMax
В OpenWrt нажмите кнопочку vpn policy routing, и впишите в список все сайты, к которым нужен прямой доступ.
prony
Не особо сложно, на самом деле. Делал маршрутизацию по белому листу, т.к. нет смысла весь трафик перегонять через vpn. https://github.com/prony5/antizapret
vikarti
При желании списки что куда роутить можно брать по BGP
https://habr.com/ru/post/594551/
https://habr.com/ru/post/549282/
у https://antifilter.network/bgp есть не только списки заблокированного и около но и например списки российских адресов.
Другое дело что это не решает проблему с условными двумя сайтами который используют cloudflare, и при этом один закрылся от России а второй от всего кроме России, и при этом их обслуживает ближайшая к пользователю нода cloudflare с одним и тем же IP. Тут уж только прикручивать дополнительно что-то вроде ControlD