VPN ile LAN ile fale

VPN ile LAN ile fale

TL; AMA: я устанавливаю Wireguard на VPS, подключаюсь к нему с домашнего роутера на OpenWRT, и получаю доступ к домашней подсети с телефона.

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

Вместо этого я настроил VPN с доступом в домашнюю локалку. Плюсы такого решения:

  • manino: чувствую себя как дома при любых обстоятельствах.
  • fīlēmū: настроил и забыл, не надо думать о пробросе каждого порта.
  • tau: у меня уже есть VPS, для таких задач современный VPN почти бесплатен по ресурсам.
  • Puipuiga: ничего не торчит наружу, можно оставить MongoDB без пароля и никто не утащит данные.

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

Matou te manaʻomia:

  1. VPS (в моём случае на Debian 10).
  2. Роутер на OpenWRT.
  3. Telefoni.
  4. Домашний  сервер с каким-нибудь веб-сервисом для проверки.
  5. Lima sa'o.

В качестве технологии VPN я буду использовать Wireguard. Это решение также имеет сильные и слабые стороны, я их не буду описывать. Для VPN я использую подсеть 192.168.99.0/24, а дома у меня 192.168.0.0/24.

Конфигурация VPS

Для дела хватит даже самого нищенского VPS за 30 рублей в месяц, если вам повезёт такой fao.

Все операции на сервере я выполняю от рута на чистой машине, при необходимости добавьте `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

I le vaega [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 открывается форма настроек с четырьмя вкладками.

VPN ile LAN ile fale

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

VPN ile LAN ile fale

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

VPN ile LAN ile fale

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

VPN ile LAN ile fale

VPN ile LAN ile fale

После этого можно сохранить настройки, а затем на странице со списком интерфейсов нажать Save and apply. При необходимости явно запустите интерфейс кнопкой Restart.

Настраиваем смартфон

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

Жирный скриншот с телефона
VPN ile LAN ile fale

Жмёте на дискетку в углу, включаете и…

Ua faia

Теперь вы можете получить доступ к домашнему мониторингу, менять настройки роутера, или делать что угодно на уровне IP.

Скриншоты из локалки
VPN ile LAN ile fale

VPN ile LAN ile fale

VPN ile LAN ile fale

puna: www.habr.com

Faaopoopo i ai se faamatalaga