San FranciscoSan Francisco // 2013-10-14

Доступ до власної мережі за допомогою Tailscale

Потреба в доступі ззовні до власної мережі у мене зʼявилася біля 10 років тому одночасно з пристроями («серверами»), які були постійно включені вдома – Raspberry Pi, Synology NAS і т.п.

Port Forwarding

Першим кроком був port forwarding. Це було не важко налаштувати на модемі/роутері від провайдера а також час від часу оновлювати мій домен зовнішньою ІР адресою (яку провайдер рідко змінював).

server.example.com:9876 -> 192.168.0.10:22

Були певні незручності: вдома потрібно було підключатися до локальної ІР адреси та локального порту а віддалено — до певного домену та значно вищого порту (щоб не «світити» стандартний порт всьому світу).

Потім я змінив локальні порти для SSH та HTTP(S) (панель керування NASʼом) на чотиризначні (ідентичні до зовнішніх) та почав використовувати динамічний DNS сервіс, що автоматично прописував мою зовнішню ІР адресу на свій домен. Потім мій домен я направив на той за допомогою CNAME.

server.example.com:9876 -> server.synology.me:9876 -> 192.168.0.10:9876

Наступним кроком було додавання статичного DNS запису на роутері для мого домену, щоб в моїй мережі він вказував на локальну ІР адресу. Нарешті доступ до локальних ресурсів був однаковим вдома та ззовні.

server.example.com:9876

Далі я задумався про безпеку — порт подібний до 9876 було складно вгадати але можливо знайти автоматично, скануючи усі порти та ІР адреси підряд. Тому я вирішив реалізувати білий список та port knocking, коли потрібно «стукати» в N різних портів протягом короткого часу (10 секунд) щоб поточна ІР адреса потрапила до білого списку на 24 години.

В такому вигляді це все працювало досить довго. Робоча ІР адреса була додана в білий список і, для прикладу, телефон на роботі міг автоматично зберігати фотографії на NAS або я з комʼютера міг зайти додому по SSH.

Але я так і не знайшов зручного способу доступатися з телефону через мобільну мережу. Port knocking інколи працював але я підозрюю зовнішня ІР адреса мого телефону часто змінювалася і треба було «стукати» знову.

Потім настав 2020 рік і я почав постійно працювати з дому. Тому єдина потреба доступу ззовні залишилася з телефону і потрібно було знайти щось краще.

Tailscale

Я багато чув про цей сервіс і нарешті почав користуватися біля двох років тому.

По суті це VPN, що створюється автоматично між усіма пристроями, на яких запущена їх програма, та які підключені до одного акаунту. Кожен пристрій отримує унікальну ІР адресу виду 100.х.х.х, яку можна використовувати знаходячись в будь-якій мережі а їх сервіс розбереться з маршрутизацією. В крайньому випадку зʼєднання буде йти через їх сервери. Воно зашифроване тому вони не зможуть побачити трафік. Але про всяк випадок не варто забувати про HTTPS та SSH.

Також можна використовувати exit node, тобто виходити в Інтернет через якийсь інший пристрій в акаунті. Це подібно до платних VPN, які мають власні exit nodes в різних країнах.

Ще одна корисна фукнкція — subnets, тобто можливість надавати доступ до пристроїв в локальній мережі, на яких не працює програма Tailscale. Я це використовую для перегляду камер відео-спостереження, підключаючись до них через Raspberry Pi.

Яким чином я отримую доступ до внутрішніх ресурсів мережі, знаходячись ззовні? Достатньо прописати на власний домен адресу пристрою в Tailscale (100.х.х.х) і після запуску програми на телефоні воно просто працює. Нагадую, що всередині мережі той самий домен вказує на локальну ІР адресу тому там без змін.

Tailscale безкоштовний для акаунту з 100 пристроїв, що більш ніж досить для «домашнього» використання.
Чи будуть вони безкоштовні завжди? Важко сказати але принаймні є альтернатива: Cloudflare Tunnel.