TL, д-р: я устанавливаю Wireguard на VPS, подключаюсь к нему с домашнего роутера на OpenWRT, и получаю доступ к домашней подсети с телефона.
Якщо ви тримаєте на домашньому сервері особисту інфраструктуру або у вас вдома безліч девайсів керованих по IP, то ви напевно хочете мати доступ до них з роботи, з автобуса, поїзда і метрo. Найчастіше для аналогічних завдань купується IP у провайдера, після чого порти кожного сервісу прокидаються назовні.
Натомість я налаштував VPN з доступом до домашньої локалки. Плюси такого рішення:
- Прозорість: почуваюся як удома за будь-яких обставин
- Простота: налаштував і забув, не треба думати про прокидання кожного порту
- Ціна: у мене вже є VPS, для таких завдань сучасний VPN майже безкоштовний за ресурсами
- Безпека: нічого не стирчить назовні, можна залишити MongoDB без пароля і ніхто не потягне дані.
Як завжди, є й мінуси. По-перше, вам доведеться налаштовувати кожен клієнт окремо, у тому числі на стороні сервера. Можливо незручно за наявності великої кількості пристроїв, з яких хочеться мати доступ до сервісів. По-друге, у вас на роботі може виявитися збігається по діапазону локалка - доведеться вирішувати цю проблему.
Нам знадобиться:
- VPS (в моём случае на Debian 10).
- Роутер на OpenWRT.
- Телефон.
- Домашній сервер із яким-небудь веб-сервісом для перевірки.
- Прямі руки.
В качестве технологии VPN я буду использовать Wireguard. Это решение также имеет сильные и слабые стороны, я их не буду описывать. Для VPN я использую подсеть 192.168.99.0/24, а вдома у мене 192.168.0.0/24.
Конфігурація 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=
Дозволені IP-адреси = 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, он доступен в , та App Store. Відкривши програму тисне плюсик і в секції Interface вводьте ім'я з'єднання, приватний ключ (публічний згенерується автоматично) та адресу телефону з маскою /32. У секції Peer вказуєте публічний ключ VPS, пару адрес: порт VPN-сервера як Endpoint і маршрути до VPN-і домашньої підмережі.
Жирний скріншот із телефону

Тиснете на дискетку в кутку, включаєте і…
Готово
Тепер ви можете отримати доступ до домашнього моніторингу, змінювати налаштування роутера, або робити будь-що на рівні IP.
Скріншоти із локалки


Джерело: habr.com
