Як налаштувати публічний доступ до своїх приватних сервісів - тунелі Cloudflare Zero Trust

Як налаштувати публічний доступ до своїх приватних сервісів - тунелі Cloudflare Zero Trust

Вступ

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

Глобально для доступу до вашого сервера людям необхідно знати адресу - це якщо дуже спрощенно. Складні IP адреси заміняються доменними іменами для зручності використання та запамʼятовування. Кожне доменне імʼя напряму повʼязане з певною IP адресою.

В цій статті я розкажу як привʼязати адресу вашого домашнього сервера до доменного імені доступного в інтернеті, а також розповім як надати доступ з зовні до вашої внутрішньої мережі.

Все це ми робитимемо на платформі Cloudflare за допомогою безкоштовних сервісів.

Cloudflare є однією з провідних компаній, яка надає послуги для підвищення швидкості, безпеки та продуктивності веб-сайтів.

Які проблеми вирішує?

Стаття відповість на наступні запитання:

  • Як мені користуватись своїм NAS коли я не вдома?
  • Як поділитись моїм сервером Minecraft з другом?
  • Як розмістити свій блог на власному сервері?
  • Хочу дивитись свій Plex коли я в дорозі

Тобто кожен раз коли виникає необхідність доступитись до ресурсів розміщених в приватній мережі ми зможемо використати цей підхід.

Які переваги?

Я розглядав декілька різних підходів і саме цей мені імпонує найбільше, бо Reverse Proxy з точки зору налаштування здалось мені складнішим, а з боку безпеки - більше шансів наробити біди. Тут же платформа Cloudflare безкоштовно надає безліч якісних і, що найголовніше, безпечних послуг. Cloudflare виступає в якості проксі і ваш реальний IP ніколи не буде видно.

Що Reverse Proxy, що тунель від Cloudflare - це про доступ з зовні до ресурсів мережі, але трохи різні реалізації.

Звісно коли доступ потрібен лише для вас самих, то підійде і VPN, або більш сучасне рішення по типу Twingate. Але у світі self-hosted стільки цікавого, що обовʼязко захочеться поділитсь з сімʼєю або друзями - тоді було б гарно мати просте посилання.

Коментар

Перед початком хочу зазначити, що складність цієї статті полягає у кількості кроків і систем, які будуть залучені. Не хочу лякати, але якщо коротко, то вам потрібно буде купити найдешевший домен, мати домашній сервер з Proxmox, інсталювати на ньому Docker і Portainer, зареєструватись в Cloudflare і перенести під його управління свій домен, запустити тунель як контейнер в Docker і вже тоді налаштувати публічний доступ до своїх приватних сервісів. Це нічогенька задачка як по часу, так і по концентрації. Для зручності я описав деякі з етапів окремими статтями.

Для мотивації хочу додати, що більшість речей описаних далі, ще зовсім нещодавно були недоступні для домашнього використання і як технології були привілеєм бізнесу, а деякі з послуг платні і сьогодні, і коштують не дешево. Але у нас з витрат буде лише $1 на покупку домена (хоча можна було б обрати і безкоштовний).

Принцип роботи

Зовнішні користувачі звертаючись за доменним імʼям наприклад lavr.site будуть перенаправлені на сервіс Cloudflare, який в свою чергу перенаправить запит через тунель Cloudflare, який буде запущений як контейнер в Docker. Docker в свою чергу буде запущено як LXC контейнер в Proxmox VE, який знаходиться всередині нашої домашньої мережі. Тунель знатиме розташування необхідного сервісу/блогу/веб-сайту у домашній мережі і відповідно маючи доступ до неї перенаправить запит куди потрібно.

В цьому випадку тунель виступатиме мостом між зовнішнім світом та внутрішнєю мережею. При всьому цьому він надаватиме доступ лише до визначеного переліку сервісів - що гарантує безпеку домашньої мережі.

Для наглядності малюю діаграму.

З описаного вище можемо зразу зазначити, що нам знадобиться:

  • Аккаунт в Cloudflare
  • Власний домен
  • Docker постійно запущений у домашній мережі
  • Будь-який сервіс, який ми хочемо зробити публічно доступним

Cloudflare Websites - Підключення домена

Якщо ви ще не маєте аккаунта в Cloudflare, то почніть з його створення перейшовши на https://www.cloudflare.com. Зареєструйтесь та веріфікуйте свою поштову скриньку

Першим кроком нам необхідно перенести власний домен під управління Cloudflare. А для цього вже треба мати власний домен.

Як придбати власний домен

Про те як придбати власний і дешевий домен можна почитати тут:

Як придбати власний домен?
Вступ Рано чи пізно у житті IT-ішніка постає питання розміщення свого сервісу в публічному просторі. А це можливо лише через придбання власного доменного імені і привʼязки його до сервера. В цій короткій статті спробую провести вас покроково по процесу придбання доменного імені на своєму приклади. Основні причини, чому доменне ім’я

Я купляв свій домен на платформі https://www.namecheap.com/. Про це в деталях я описував у зазначеній статті. Домен обійшовся в $1

Додайте свій домен

Маючи домен його треба додати в аккаунт Cloudflare. Натисніть Add site

Пройдіть підключення домена, яке сладається з 5 кроків

Крок 1. Введіть ваш домен

Вкажіть домен, який ви придбали і почніть процес його підключення.

Крок 2. Оберіть план

У нашому випадку достатньо безкоштовного плану

Крок 3. Налаштування DNS

Спочатку буде спроба автоматично визначити DNS records вашого домена після натискання Start quick scan

Незалежно від результату вам запропонує оновити nameservers

💡
Nameserver (сервер імен) — це сервер, який відповідає за перетворення доменних імен на IP-адреси. Цей процес відомий як доменна система імен (DNS - Domain Name System). Nameservers виконують важливу функцію в Інтернеті, дозволяючи користувачам вводити легко запам'ятовувані доменні імена в браузерах, які потім перетворюються на IP-адреси, зрозумілі для комп'ютерів.

Крок 4. Активація (з оновленням nameservers)

Щоб Cloudflare почав управляти вашим доменом, треба передати йому контроль за допомогою зміни nameservers. На картинці нижче доволі детально буде пояснено, що ви маєете зробити. Червоним виділені потрібні вам nameservers.

Перенесення домена

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

Не відстає і обраний мною https://www.namecheap.com/. За посиланням нижче детально розписано, як змінити nameservers на ті, що пропонує Cloudflare.

How to Change DNS For a Domain - Domains - Namecheap.com
Learn more about How to Change DNS For a Domain. Find your answers at Namecheap Knowledge Base.

Крок 5. Огляд та очікування активації

Після заміни nameservers вам прийдеться почекати до 24 годин, але як зазначає сам Cloudflare це часто відбувається швидше. В моєму випадку через 1 годину мій домен був успішно активований.

Після активації, відкривши сторінку свого домену в Cloudflare, ви побачите, що почне зʼявлятись статистика використання. Скоріше за все вона у вас буде пуста. Також побігавши по сторінках ви знайдете дуже багато цікавих налаштувань, які для даної задачі я б не радив чіпати.


Cloudflare Zero Trust - Запуск тунеля

І ось ми вже на половині шляху. Давайте перевіримось. На цей момент у вас має бути домен куплений на якійсь платформі і перенесений з неї під управління в Cloudflare Websites, де домен має бути вже активним. Якщо так, то рухаймося далі!

В другій частині нам знадобиться Docker, щоб запустити тунель від Cloudflare. І як тільки ми це зробимо, то швиденько перейдемо до налаштувань самого тунеля.

Створення тунеля

Щоб запустити тунель доведеться пройти тернистий шлях. Тунель має бути запущений у вашій локальній мережі і працювати 24/7, якщо ви хочете мати постійний доступ до своїх сервісів з зовні. Це можливо забезпечити лише при постійно запущеному компʼютері або сервері.

Я певною мірою являюсь адептом Proxmox VE і тому моя розповідь без нього не обійдеться. В мене дома є сервер з помірним споживанням електроенергії, на якому запущений Proxmox VE з купою різноманітних контейнерів, де одним з них є і Docker. Це зручно. Дуже рекомендую. Я частково описував залізо у статту про запуск блогу. Кому цікаво - ласкаво прошу.

Хостинг власного блогу: залізо та віртуальний контейнер (частина 1) - Ghost
Вступ Ця стаття являє собою покрокову інструкцію про те, як запустити блогу Ghost в домашніх умовах на сервері Proxmox VE, який встановлений на міні сервері у вас вдома. У першій частині ми роглянемо лише залізо та підготовку контейнера, а у другій частині пройдемось покроково по установці блогу та підключенні доменного

Також не можу не порадити все ж зазирнути в офіційну документацію та ознайомитись з принципами, термінологією та іншими деталями:

Cloudflare Tunnel · Cloudflare Zero Trust docs
Cloudflare Tunnel provides you with a secure way to connect your resources to Cloudflare without a publicly routable IP address. With Tunnel, you do …

Крок 1. Запустіть Docker

Не важливо яким чином ви цього досягнете, але найпростіший варіант для нас запустити тунель - це використати Docker.

Дуже добре якщо ви вже мали до цього досвід і працюючий Docker. Але якщо так не сталось, то я підготував для вас іншу іструкцію де покроково і з мінімальними витратами по часу і зусиллям ви інсталюєте Docker та Portainer на сервері Proxmox VE. Це займе приблизно 15 хвилин.

Найшвидша інсталяція Docker і Portainer у Proxmox VE
Вступ Вітаю. Давайте назвемо це основою основ, бо вбачаю, що не раз буду давати посилання саме на цю інструкцію. Віртуалізація і контейнеризація пляшуть бік о бік у #хоумлаббінгу. І я постійно бачу як у практичних задачах все це тісно пересікається між собою. Для зручності розуміння малюю вам діаграмку, у якій

Крок 2. Зайдіть в Zero Trust Networks

Поверніться на головну сторінку свого профіля в Cloudflare, та відкрийте Zero Trust

Перейдіть в Networks -> Tunnels та нажиміть на Create a tunnel

Крок 3. Оберіть тип

З поміж двох опцій нам необхідний Cloudflared, бо WARP трохи складнійший і як зазначено потребує лише Linux дистрибутиви.

Крок 4. Задайте імʼя

Дуже рекомендую обирати імʼя за місцем розташування. Це може бути місто, чи вулиця, але має одразу бути зрозуміло про яку мережу йдеться.

Крок 5. Скопіюйте команду

Переключіться на Docker та скопіюйте команду для запуску контейнера

Крок 6. Виконайте команду

Перейдіть в Console вашого Docker LXC в Proxmox VE (з крок 1), вставте скопійовану команду та виконайте її. Дочекайтесь завершення виконання.

Крок 7. Перевірте інсталяцію контейнера

Для початку можете зайти в установлений Portainer, щоб побачити, що контейнер був успішно запущений.

Зверніть увагу, що контейнер з тунелем від Cloudflare не має відкритих портів, бо ми як користувачі не будемо комунікувати з ним напряму. Він просто є і просто працює.

Тепер перевіримо зʼєднання в Cloudflare. Ви маєте побачити Healthy статус

Якщо все приблизно так, то маю вас похвалити, бо це вже великий успіх, а ми плавно підходимо до кульмінації.


Налаштування тунеля

Суть налаштування полягає у своєрідному мапінгу (привʼязці) серверів внутрішньої мережі до домена або сабдоменів. Кожен тунель як кротова нора дає безпечний та обмежений доступ до певних ресурсів вашої домашньої (приватної) мережі.

Крок 1. Перейдіть у налаштування тунеля

Перейдіть до переліку тунелів та натисніть на Configure, щоб розпочати налаштування

Відкрийте вкладку Public Hostname та натисніть на Add a public hostname

Ви можете помітити, що в мене є успішно додані два сервіса - це Uptime Kuma та цей блог.

Крок 2. Додайте новий ресурс

Для прикладу додамо мій Portainer. В нас є власний домен lavr.site, але на ньому попередньо я вже розмістив свій блог. Тому будемо використовувати сабдомени.

Важливо: так як Portainer працює по протоколу https і має свій сертифікат SSL, то потрібно вказати в полі тип HTTPS, до IP адреси необхідно додати порт 9443, а також не забути в налаштування TLS увімкнути No TLS Verify. Cloudflare не буде намашатись перевіряти сертифікат вашого сервера і довірятиме йому.

Крок 3. Зберігаємо зміни і перевіряємо

Після збережнення новий запис додасться до списку. Ви завжди можете повернутись до редагування параметрів.

Плюсом використання тунелів Cloudflare є те, що незалежно від того, чи мав ваш оригінальний сервіс SSL сертифікат чи ні, але всі публічні адреси будуть мати https зʼєднання, тобто весь трафік буде зашифровани. Cloudflare безкоштовна надає SSL сертифікат для вашого домена та сабдоменів.

Якщо все було виконано успішно то при спробі відкрити https://portainer.lavr.site (або ваша адреса) ви побачите, що відкриється сторінка входу в ваш Portainer, який розмішено у вас вдома.

Додаючи подібним способом інші сервіси будь то Plex або ваш NAS ви відкриєте публічний доступ до них. Будь-хто зможе зайти за заданою адресою і користуватись вашими сервісами.

🔐
Впевніться, що не надаєте публічний доступ до незахищених приватних даних. Використовуйте складні паролі

Висновки

Сподіваюсь, що у вас все вийшло. Вітаю! Тепер ви можете публікувати самостійно запущені сервіси на загал як справжій хоумлаббер.

Я приклад робочого сервісу можу навести Uptime Kuma, що моніторить мою інфраструктуру: https://uptime.lavr.site/status/homelab. Хіба це не зручно? І це лише краплина від всього того що ви можете захостити у себе вдома.

Я б не став недооцінювати важливості і потужності Cloudflare для homelab комьюніті. Вони дійсно постарались і надають якісні і цікаві послуги, що полегшують життя таких інтузіастів як ми.

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

Першка частина з налаштуванням домена доволі декларативна, але там треба було почекати. А друга про тунель - біль технічна і вимигала зосередження.

На завершення нагадаю періодично перевіряти наявність оновлень для тунелів - їх потрібно буде обслуговувати час від часу - нічого складного. Та прошу завжди з розумом підходити до необхідності відкриття доступу до тих чи інших сервісів. Інтернет - дуже агресивне середовище, а тому від спроб взлому ніхто не застрахований. Гарні паролі з вашого боку і SSL шифрування трафіку від Cloudflare мають мінімізувати ризики.

Дякую що завітали. Сподіваюсь вам було корисно і цікаво. Розвивайтесь і рухайтесь далі, а я по можливості буду вам допомагати.

Інші матеріали використані у статті

Як придбати власний домен?
Вступ Рано чи пізно у житті IT-ішніка постає питання розміщення свого сервісу в публічному просторі. А це можливо лише через придбання власного доменного імені і привʼязки його до сервера. В цій короткій статті спробую провести вас покроково по процесу придбання доменного імені на своєму приклади. Основні причини, чому доменне ім’я
Найшвидша інсталяція Docker і Portainer у Proxmox VE
Вступ Вітаю. Давайте назвемо це основою основ, бо вбачаю, що не раз буду давати посилання саме на цю інструкцію. Віртуалізація і контейнеризація пляшуть бік о бік у #хоумлаббінгу. І я постійно бачу як у практичних задачах все це тісно пересікається між собою. Для зручності розуміння малюю вам діаграмку, у якій

Read more