VPN в домашнюю локалку

TL;DR: я устанавливаю Wireguard на VPS, подключаюсь к нему с домашнего роутера на OpenWRT, и получаю доступ к домашней подсети с телефона.
Если вы держите на домашнем сервере личную инфраструктуру или у вас дома множество девайсов управляемых по IP, то вы наверняка хотите иметь к ним доступ с работы, из автобуса, поезда и метрo. Чаще всего для аналогичных задач приобретается IP у провайдера, после чего порты каждого сервиса пробрасываются наружу.
Вместо этого я настроил VPN с доступом в домашнюю локалку. Плюсы такого решения:
- Прозрачность: чувствую себя как дома при любых обстоятельствах.
- Простота: настроил и забыл, не надо думать о пробросе каждого порта.
- Цена: у меня уже есть VPS, для таких задач современный VPN почти бесплатен по ресурсам.
- Безопасность: ничего не торчит наружу, можно оставить MongoDB без пароля и никто не утащит данные.
- VPS (в моём случае на Debian 10).
- Роутер на OpenWRT.
- Телефон.
- Домашний сервер с каким-нибудь веб-сервисом для проверки.
- Прямые руки.
Конфигурация VPS
Для дела хватит даже самого нищенского VPS за 30 рублей в месяц, если вам повезёт такой урвать.
Все операции на сервере я выполняю от рута на чистой машине, при необходимости добавьте `sudo` и адаптируйте инструкции.
Wireguard не успели завезти в стейбл, поэтому я выполняю `apt edit-sources` и добавляю бэкпорты двумя строчками в конец файла:
deb http://deb.debian.org/debian/ buster-backports main
# deb-src http://deb.debian.org/debian/ buster-backports main
Пакет устанавливается привычным образом: apt update && apt install wireguard .
Далее генерируем пару ключей: wg genkey | tee /etc/wireguard/vps.private | wg pubkey | tee /etc/wireguard/vps.public . Эту операцию повторите ещё дважды для каждого девайса-участника схемы. Поменяйте пути к файлам с ключами для другого устройства и не забудьте о безопасности приватных ключей.
Теперь готовим конфиг. В файл /etc/wireguard/wg0.conf помещается конфиг:
[Interface]
Address = 192.168.99.1/24
ListenPort = 57953
PrivateKey = 0JxJPUHz879NenyujROVK0YTzfpmzNtbXmFwItRKdHs=
[Peer] # OpenWRT
PublicKey = 36MMksSoKVsPYv9eyWUKPGMkEs3HS+8yIUqMV8F+JGw=
AllowedIPs = 192.168.99.2/32,192.168.0.0/24
[Peer] # Smartphone
PublicKey = /vMiDxeUHqs40BbMfusB6fZhd+i5CIPHnfirr5m3TTI=
AllowedIPs = 192.168.99.3/32
В секции [Interface] указываются настройки самой машины, а в [Peer] — настройки для тех, кто будет к ней подключаться. В AllowedIPs через запятую прописываются подсети, которые будут маршрутизироваться в соответствующего пира. Из-за этого пиры устройств-«клиентов» в подсети VPN должны иметь маску /32 , всё остальное будет маршрутизироваться сервером. Так как домашняя сеть будет маршрутизироваться через OpenWRT, в AllowedIPs соответствующего пира дописываем домашнюю подсеть. В PrivateKey и PublicKey разложите приватный ключ сгенерированный для VPS и публичные ключи пиров соответственно.
На VPS осталось только запустить команду, которая поднимет интерфейс и добавит его в автозапуск: systemctl enable —now wg-quick@wg0 . Текущий статус соединений можно проверить командой wg .
Конфигурация OpenWRT
Всё, что нужно для этого этапа есть в модуле luci (веб-интерфейс OpenWRT). Залогиньтесь в нём и в меню System откройте вкладку Software. OpenWRT не хранит кэш на машине, поэтому надо обновить список доступных пакетов, нажав на зелёную кнопку Update lists. После завершения в фильтр вбиваете luci-app-wireguard и, глянув на окошко с красивым деревом зависимостей, устанавливаете этот пакет.
В меню Networks выбираете Interfaces и жмёте зелёную кнопку Add New Interface под списком уже имеющихся. После ввода имени (так же wg0 в моём случае) и выбора протокола WireGuard VPN открывается форма настроек с четырьмя вкладками.

На вкладке General Settings надо вбить приватный ключ и IP адрес заготовленный для OpenWRT вместе с подсетью.

На вкладке Firewall Settings заводите интерфейс в локальную сеть. Так соединения из VPN будут свободно попадать в локалку.

На вкладке Peers жмёте единственную кнопку, после чего в обновленной форме заполняете данные VPS-сервера: публичный ключ, Allowed IPs (надо всю VPN-подсеть замаршрутизировать в сервер). В Endpoint Host и Endpoint Port вводите соответственно IP адрес VPS с портом в ранее указанным в директиве ListenPort. Отметьте Route Allowed IPs, чтобы были созданы маршруты. И обязательно заполните Persistent Keep Alive, иначе туннель туннель от VPS к роутеру будет обрываться, если последний за NAT.


После этого можно сохранить настройки, а затем на странице со списком интерфейсов нажать Save and apply. При необходимости явно запустите интерфейс кнопкой Restart.
Настраиваем смартфон
Вам потребуется клиент Wireguard, он доступен в F-Droid, Google Play и App Store. Открыв приложение жмёте плюсик и в секции Interface вводите имя соединения, приватный ключ (публичный сгенерируется автоматически) и адрес телефона с маской /32. В секции Peer указываете публичный ключ VPS, пару адрес: порт VPN-сервера в качестве Endpoint и маршруты до VPN- и домашней подсети.

Жмёте на дискетку в углу, включаете и…
Готово
Теперь вы можете получить доступ к домашнему мониторингу, менять настройки роутера, или делать что угодно на уровне IP.
Name already in use
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Установка своего VPN-сервера WireGuard на VPS-хостинге

WireGuard – самый актуальный и быстрый VPN-протокол на сегодняшний день. Обеспечивает максимальную скорость работы и надежную криптографическую защиту.
1. VPS-хостинг и клиенты
VPS-хостинг желательно выбирать в Европе, но сейчас оплатить его уже будет проблематично. Можно подобрать хостинг на сайтах VPS.today и Hostings.info в России с серверами в Европе (например в Нидерландах), главное выбрать сервер с KVM-виртуализацией и наличием канала минимум 100 Мбит/с с безлимитным трафиком или с его приличным объемом.
На этапе выбора ОС для сервера выбираем Ubuntu 18.04. На поднятие сервера нужно время, после чего приходит письмо из которого нам нужно три пункта: IP-адрес сервера, имя пользователя (root), пароль.
Заранее установите необходимые вам клиенты WireGuard: Windows, macOS, Android, iOS.
2. Подключение к серверу
Для удобства будем использовать кроссплатформенный SSH-клиент Hyper.
- Подключаемся к серверу с вашим IP-адресом и именем пользователя следующей командой:
- Пишем yes, затем вводим пароль от вашего сервера (не отображается при вводе, но можно вставить из буфера обмена):
- После подключения к серверу проверяем ОС на наличие обновлений:
3. Установка сервера WireGuard
Существует автоматический способ установки сервера при помощи клиента AmneziaVPN о котором я писал в своем телеграм-канале, но в этом гайде мы будем использовать скрипт WireGuard installer от angristan.
- Сначала установим инструмент curl:
- Затем запустим скачивание скрипта установки:
- Появится строка ./wireguard-install.sh, жмем Enter.

- Отвечаем на все вопросы утвердительно, попросит нажать любую клавишу для начала установки, затем попросит ввести имя клиента (Client name) пишем wireguard, соглашаемся с предложенными IP-адресами.

После чего будет отображен QR-код.

Далее определимся с клиентом WireGuard:
- Для смартфонов открываем мобильный клиент WireGuard, выбираем «Создать из QR-кода» и пробуем подключиться к VPN.
- Для компьютеров открываем конфигурационный файл командой:
Затем копируем весь текст в любой текстовой редактор и сохраняем файл с именем wg0-client-wireguard.conf и импортируем в клиенте WireGuard.
4. Добавление других клиентов
Для каждого отдельного клиента нужно генерировать отдельный конфигурационный файл.
- Для этого мы повторно запускаем скрипт установки:

- Выбираем 1-й пункт «Add a new user», далее пишем имя например для клиента в Windows wireguard-win (не более 15 символов), соглашаемся с предложенными IP-адресами. Появится QR-код, а под ним путь к конфигурационному файлу. Открываем содержимое файла следующей командой:
Затем копируем весь текст в любой текстовой редактор и сохраняем файл с именем wg0-client-wireguard-win.conf и импортируем в клиенте WireGuard.
5. Подключение к WireGuard
По умолчанию прописывается DNS-сервер от AdGuard, с ним тоже все работает и открывается. При желании можно отредактировать соединение в клиенте и вручную прописать DNS-сервер 1.1.1.1 от Cloudflare, который не стал блокировать доступ из России.
Подключение с мобильного устройства самое простое. После сканирования QR-кода, создается соединение к вашему серверу и вам остается только к нему подключиться.
Для клиента WireGuard для Windows, нажимаем «Добавить туннель» и выбираем скопированный ранее конфигурационный файл wg0-client-wireguard-win.conf и пробуем подключиться.
Заходим сюда и видим IP-адрес и страну вашего сервера.
Проверяем доступ к заблокированным сайтам и замеряем скорость.
6. Настройка и подключение в роутерах Keenetic
В роутерах Keenetic можно установить компонент WireGuard и пустить весь трафик по VPN.
Переходим в админке роутера в «Управление» > «Общие настройки» > «Изменить набор компонентов», ищем «Сетевые функции», выбираем «Wireguard VPN» и жмем «Установить обновление».
Далее переходим в «Интернет» > «Другие подключения» > «Wireguard» > «Загрузить из файла» и выбираем сохраненный файл .conf.
Отредактируем соединение, отмечаем «Использовать для выхода в интернет» и оставляем DNS-серверы от AdGuard или прописываем в «DNS 1»: 1.1.1.1 и «DNS 2»: 1.0.0.1 от Cloudflare.
Переходим в «Интернет» > «Приоритеты подключений» и переносим соединение Wireguard над всеми другими подключениями и нажимаем «Сохранить», затем переходим в «Другие подключения» и пробуем подключиться к VPN.
How to setup Wireguard VPN on Ubuntu Server 22.04
WireGuard® is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography. It aims to be faster, simpler, leaner, and more useful than IPsec, while avoiding the massive headache. It intends to be considerably more performant than OpenVPN. — wireguard.com
After toying with it for a while I must say that it is fast, it is simple and it sure is more…
VPN на Wireguard для полных новичков
Это подробная инструкция по настройке личного VPN на протоколе Wireguard, чтобы обходить блокировки Роскомнадзора и защищаться от хакеров в чужих Wi-Fi с компьютеров и телефонов. По шагам, с картинками, для самых маленьких.
Если вы в России, у вас наверняка не работает LinkedIn или тормозит Twitter, а в месте с ним и половина интернета. VPN поможет нивелировать вредительство провайдеров и государственных органов. Кроме того, в общедоступных Wi-Fi точках, к которым вы подключаетесь в кафе, могут сидеть мамкины хакеры, которые перехватывают трафик и могут украсть у вас данные или подсунуть вирус. Достаточно включить VPN, и ваш трафик станет для таких вредителей недоступен.
Содержать VPN-сервер стоит денег, потому что где-то должен работать компьютер с серверной программой, и кто-то должен платить за электричетсво и работу инженеров. Если не платите вы, значит платит кто-то другой. В замен этот другой получает что-то ценное, например ваши персональные данные, которые затем можно использовать для мошенничества или шантажа. Не пользуйтесь бесплатными VPN-сервисами.
Обычно VPN-сервисы продают аккаунты с ограничением на одновременное количество пользователей. Тот же Astrill, популярный в Китае, не позволяет подключаться больше чем с трёх устройств одновременно, при этом в месяц их VPN стоит от $10. Со своим сервером вы можете легко создать 10-20 пользователей и раздать их всем своим друзьям и знакомым: даже самый дешёвый VPS за $5 в месяц справится с такой нагрузкой.
Конечно, у платных VPN есть свои плюсы, например быстрое переключение между локациями (чтобы сменить сервер с Германии на США, например), особо продвинутые средства обхода блокировок и тому подобное. К счастью, в России блокировки осуществляются довольно просто, и для их обхода такие сервисы избыточны.
Вам понадобится VPS — самый дешёвый хостинг в стране, где блокировок нет. Мои рекомендации:
от $3.5 в месяц, при регистрации по рефералке дадут $100 на месяц.
от $5 в месяц, по рефералке дадут $100 на два месяца.
от $5 в месяц, по рефералке ничего не дают, зато считают использование по часам — можно экспериментировать за гроши.
Или любой другой сервер на Ubuntu за пределами России, к которому у вас есть root-доступ.
За каждого нового клиента на VPS по ссылкам, которые я указал вначале, мне перепадает несколько долларов. Этого как раз хватает на оплату хостинга для этого блога. Если вы зарегаетесь через мои ссылки — мне будет приятно.
Шаг 1 — Запустите VPS
Нужен самый простой сервер на Ubuntu 20.04 или новее.
- Перейдите на страницу Droplets
- Create -> Droplets -> Ubuntu 20.04 -> Basic -> Regular Intel with SSD -> $5/mo -> Amsterdam (или любой другой, кроме Singapore) -> Password (придумайте длинный пароль) -> Create Droplet

- Снова перейдите на страницу Droplets и найдите там IP-адрес вашего сервера

-
- Зарегистрируйтесь
- Перейдите на страницу Linodes
- Images — Ubuntu 20.04 LTS -> Region — Frankfurt, DE -> Linode Plan — Shared CPUs Nanode 1GB -> Root Password (придумайте длинный пароль) -> Create

- Найдите IP-адрес вашего сервера

Шаг 2 — Подключитесь к VPS
-
и запустите Putty (для Windows)
- В поле Host Name введите root@xxx.xxx.xxx.xxx (вместо xxx — IP-адрес вашего сервера из предыдущего шага),
Port 22
Connection type: SSH
и нажмите Open
- Увидев предупреждение PuTTY Security Alert о новом ключе, нажмите Да

- Введите пароль от root вашего сервера (который вы создали на этапе создания VPS)
* при вводе пароля на клавиатуре вы не увидите символов на экране, просто вводите вслепую и нажмите Enter
* чтобы вставить пароль, вместо сочетания Ctrl-V используйте одно нажатие правой кнопкой мыши — ничего не произойдёт, но пароль вставится; после этого нажмите Enter - Вы подключились к серверу

Шаг 3 — Установите Wireguard
Мы воспользуемся готовым скриптом от доброго человека.
- Скопируйте первую команду и вставьте её правой кнопкой мыши
Она скачает полный скрипт на ваш сервер
curl -O https://raw.githubusercontent.com/angristan/wireguard-install/master/wireguard-install.sh
- Нажмите Enter, вы увидите, что скрипт скачался

- Скопируйте вторую строчку скрипта
Она даст скрипту нужные права
chmod +x wireguard-install.sh
- Нажмите Enter, скрипт получит нужные права.

- Вставьте последнюю команду, которая запустит скрипт, и нажмите Enter
./wireguard-install.sh - В консоли по очереди будут появляться вопросы, в которых уже прописаны ответы — просто нажимайте Enter, пока не увиите надпись Press any key to continue…
На этом этапе у вас есть установленный и работающий сервер WireGuard. Теперь нужно создать учётные записи для подключения с компьютера и телефона.
Шаг 4 — Создайте учётные записи
Сразу после установки WireGuard в консоли начнётся процесс создания учётной записи.
- Tell me a name for the client
Введите произвольное имя для учётной записи. Например, «Vasya», «iPhone» или (как на скриншоте) — «wtigga_vpn», и нажмите Enter - На все остальные вопросы в консоли нажимайте Enter, пока в консоли не появится QR-код

- Сделайте скриншот этого QR-кода и сохраните, он пригодится для быстрого подключения со смартфона
Кроме того, нужно сохранить текстовые данные к этой учётной записи для подключения с компьютера. Для этого откроем файл конфигурации:
- Найдите строку с адресом файла конфигурации сразу под QR-кодом, в моём случае она выглядит так:
It is also available in /root/wg0-client-wtigga_vpn.conf - Наберите команду nano, а затем после пробела напишите адрес к этому файлу, в моём случае это:
nano /root/wg0-client-wtigga_vpn.conf
- В консоли откроется файл с конфигурацией. Скопируйте весь текст из этого файла в любой текстовый файл на своём компьютере, и сохраните.

Шаг 4.1 — Ещё одна учётная запись
Лучше давать каждому пользователю по учётной записи, чтобы при необходимости можно было точечно её отключить.
Чтобы добавить ещё одного пользователя, снова введите команду
./wireguard-install.sh

Скрипт спросит, что именно сделать. Введите единицу (Add a new user), нажмите Enter и вы снова увидите процесс создания нового пользователя.
Шаг 5 — Подключение к VPN
Windows / Mac
- Скачайте официальный клиент, установите и запустите
- В левом нижнем углу Добавить туннель -> Добавить пустой туннель

- Введите название, а ниже вместо имеющегося текста вставьте тот, что сохранили в консоли из config-файла, и нажмите Сохранить

- Нажмите кнопку Подключить…

- …И вы в интернете без блокировок!
Android / iOS
- Установите официальное приложение для Android (APK) или iOS
- Запустите, выберите (+) и Сканировать QR-Код
- Отсканируйте код, который вы заскриншотили в консоли
- Назовите его любым именем и нажмите Создать туннель
- Теперь нажмите на переключатель напротив вновь сохранённого туннеля, и вы попадёте в интернет без блокировок.
Послесловие
От чего не защитит VPN
Не используйте такой VPN для скачивания торрентов, продажи наркотиков или распространения детской порнографии. Вы оплачиваете VPS со своей банковской карты, а это значит, что для хостинга (Vult, DigitalOcean и других) вы не являетесь анонимом. И если полиция условной Германии будет расследовать уголовное дело, в котором фигурирует ваш VPN, то ваше имя там всплывёт.
Именно по этой причине нужно делать отдельные учётные записи WireGuard для каждого пользователя, и никогда не выкладывать эти учётки в открытый доступ, иначе вам возможно придётся отвечать за действия какого-то анонима из интернета.
И, разумеется, VPN не сделает вас анонимным, если вы заходите в социальные сети под учёткой с вашим настоящим именем.