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

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

TL, д-р: я встановлюю Wireguard на VPS, підключаюся до нього з домашнього роутера OpenWRT, і отримую доступ до домашньої підмережі з телефону.

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

Натомість я налаштував VPN з доступом до домашньої локалки. Плюси такого рішення:

  • Прозорість: почуваюся як удома за будь-яких обставин
  • Простота: налаштував і забув, не треба думати про прокидання кожного порту
  • Ціна: у мене вже є VPS, для таких завдань сучасний VPN майже безкоштовний за ресурсами
  • Безпека: нічого не стирчить назовні, можна залишити MongoDB без пароля і ніхто не потягне дані.

Як завжди, є й мінуси. По-перше, вам доведеться налаштовувати кожен клієнт окремо, у тому числі на стороні сервера. Можливо незручно за наявності великої кількості пристроїв, з яких хочеться мати доступ до сервісів. По-друге, у вас на роботі може виявитися збігається по діапазону локалка - доведеться вирішувати цю проблему.

Нам знадобиться:

  1. VPS (у разі Debian 10).
  2. Роутер на OpenWRT.
  3. Телефон.
  4. Домашній сервер із яким-небудь веб-сервісом для перевірки.
  5. Прямі руки.

Як технологію 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=
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 відкривається форма налаштувань із чотирма вкладками.

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

На вкладці General Settings треба вбити приватний ключ та IP адресу, заготовлену для OpenWRT разом з підмережею.

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

На вкладці Firewall Settings заводьте інтерфейс у локальну мережу. Так з'єднання з VPN вільно потраплятимуть у локалку.

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

На вкладці Peers тиснете єдину кнопку, після чого в оновленій формі заповнюєте дані VPS-сервера: публічний ключ, Allowed IPs (треба всю VPN-підсіть замаршрутизувати на сервер). У Endpoint Host та Endpoint Port вводіть відповідно IP адресу VPS з портом у раніше вказаній у директиві ListenPort. Позначте Route Allowed IPs, щоб було створено маршрути. І обов'язково заповніть Persistent Keep Alive, інакше тунель тунель від VPS до роутера обриватиметься, якщо останній за NAT.

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

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

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

Налаштовуємо смартфон

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

Жирний скріншот із телефону
VPN у домашню локалку

Тиснете на дискетку в кутку, включаєте і…

Готово

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

Скріншоти із локалки
VPN у домашню локалку

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

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

Джерело: habr.com

Додати коментар або відгук