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=
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, він доступний у
Жирний скріншот із телефону
Тиснете на дискетку в кутку, включаєте і…
Готово
Тепер ви можете отримати доступ до домашнього моніторингу, змінювати налаштування роутера, або робити будь-що на рівні IP.
Скріншоти із локалки
Джерело: habr.com