Cloudflare Tunnels: Безпечний доступ до самостійно розміщених сервісів
Ця стаття пропонує покрокову інструкцію з підключення вашого домену до Cloudflare, придбання власного домену та налаштування Cloudflare Zero Trust для безпеки вашого сайту. Дізнайтесь, як активувати та налаштувати тунель для забезпечення надійного й безпечного з'єднання.
Вступ
Перед тим як розпочати було б добре пояснити на пальцях сенс того, що ми будемо робити. Уявіть, що у вас є домашній сервер і ви запустили на ньому свій веб-сайт або блог. Він знаходиться лише у вашій локальній мережі, а вам би так хотілось поділитись ним з друзями або ж заходити самому коли ви не вдома.
Глобально для доступу до вашого сервера людям необхідно знати адресу - це якщо дуже спрощенно. Складні IP адреси заміняються доменними іменами для зручності використання та запамʼятовування. Кожне доменне імʼя напряму повʼязане з певною IP адресою.
В цій статті я розкажу як привʼязати адресу вашого домашнього сервера до доменного імені доступного в інтернеті, а також розповім як надати доступ з зовні до вашої внутрішньої мережі.
Все це ми робитимемо на платформі 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.namecheap.com/. Про це в деталях я описував у зазначеній статті. Домен обійшовся в $1
Додайте свій домен
Маючи домен його треба додати в аккаунт Cloudflare. Натисніть Add site
Пройдіть підключення домена, яке сладається з 5 кроків
Крок 1. Введіть ваш домен
Вкажіть домен, який ви придбали і почніть процес його підключення.
Крок 2. Оберіть план
У нашому випадку достатньо безкоштовного плану
Крок 3. Налаштування DNS
Спочатку буде спроба автоматично визначити DNS records вашого домена після натискання Start quick scan
Незалежно від результату вам запропонує оновити nameservers
Крок 4. Активація (з оновленням nameservers)
Щоб Cloudflare почав управляти вашим доменом, треба передати йому контроль за допомогою зміни nameservers. На картинці нижче доволі детально буде пояснено, що ви маєете зробити. Червоним виділені потрібні вам nameservers.
Перенесення домена
Саме по собі перенесення домена - це тривіальна задача, але коли ви робите це вперше то можуть виникнути різні питання. Кожна платформа з реєстрації доменних імен намагається полегшити цей процес створюючі відповідну документацію з наглядними прикладами.
Не відстає і обраний мною https://www.namecheap.com/. За посиланням нижче детально розписано, як змінити nameservers на ті, що пропонує Cloudflare.
Крок 5. Огляд та очікування активації
Після заміни nameservers вам прийдеться почекати до 24 годин, але як зазначає сам Cloudflare це часто відбувається швидше. В моєму випадку через 1 годину мій домен був успішно активований.
Після активації, відкривши сторінку свого домену в Cloudflare, ви побачите, що почне зʼявлятись статистика використання. Скоріше за все вона у вас буде пуста. Також побігавши по сторінках ви знайдете дуже багато цікавих налаштувань, які для даної задачі я б не радив чіпати.
Cloudflare Zero Trust - Запуск тунеля
І ось ми вже на половині шляху. Давайте перевіримось. На цей момент у вас має бути домен куплений на якійсь платформі і перенесений з неї під управління в Cloudflare Websites, де домен має бути вже активним. Якщо так, то рухаймося далі!
В другій частині нам знадобиться Docker, щоб запустити тунель від Cloudflare. І як тільки ми це зробимо, то швиденько перейдемо до налаштувань самого тунеля.
Створення тунеля
Щоб запустити тунель доведеться пройти тернистий шлях. Тунель має бути запущений у вашій локальній мережі і працювати 24/7, якщо ви хочете мати постійний доступ до своїх сервісів з зовні. Це можливо забезпечити лише при постійно запущеному компʼютері або сервері.
Я певною мірою являюсь адептом Proxmox VE і тому моя розповідь без нього не обійдеться. В мене дома є сервер з помірним споживанням електроенергії, на якому запущений Proxmox VE з купою різноманітних контейнерів, де одним з них є і Docker. Це зручно. Дуже рекомендую. Я частково описував залізо у статту про запуск блогу. Кому цікаво - ласкаво прошу.
Також не можу не порадити все ж зазирнути в офіційну документацію та ознайомитись з принципами, термінологією та іншими деталями:
Крок 1. Запустіть Docker
Не важливо яким чином ви цього досягнете, але найпростіший варіант для нас запустити тунель - це використати Docker.
Дуже добре якщо ви вже мали до цього досвід і працюючий Docker. Але якщо так не сталось, то я підготував для вас іншу іструкцію де покроково і з мінімальними витратами по часу і зусиллям ви інсталюєте Docker та Portainer на сервері Proxmox VE. Це займе приблизно 15 хвилин.
Крок 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, але на ньому попередньо я вже розмістив свій блог. Тому будемо використовувати сабдомени.
Крок 3. Зберігаємо зміни і перевіряємо
Після збережнення новий запис додасться до списку. Ви завжди можете повернутись до редагування параметрів.
Якщо все було виконано успішно то при спробі відкрити portainer.lavr.site
(або ваша адреса) ви побачите, що відкриється сторінка входу в ваш Portainer, який розмішено у вас вдома.
Додаючи подібним способом інші сервіси будь то Plex або ваш NAS ви відкриєте публічний доступ до них. Будь-хто зможе зайти за заданою адресою і користуватись вашими сервісами.
Висновки
Сподіваюсь, що у вас все вийшло. Вітаю! Тепер ви можете публікувати самостійно запущені сервіси на загал як справжій хоумлаббер.
Я приклад робочого сервісу можу навести Uptime Kuma, що моніторить мою інфраструктуру: https://uptime.lavr.site/status/homelab. Хіба це не зручно? І це лише краплина від всього того що ви можете захостити у себе вдома.
Я б не став недооцінювати важливості і потужності Cloudflare для homelab комьюніті. Вони дійсно постарались і надають якісні і цікаві послуги, що полегшують життя таких інтузіастів як ми.
Описані вище кроки не з простих. Та й часу налаштування всього мало зайняти не мало. Якщо у вас це забрало не один вечір і не одну чашку кави - це нормально.
Першка частина з налаштуванням домена доволі декларативна, але там треба було почекати. А друга про тунель - біль технічна і вимигала зосередження.
На завершення нагадаю періодично перевіряти наявність оновлень для тунелів - їх потрібно буде обслуговувати час від часу - нічого складного. Та прошу завжди з розумом підходити до необхідності відкриття доступу до тих чи інших сервісів. Інтернет - дуже агресивне середовище, а тому від спроб взлому ніхто не застрахований. Гарні паролі з вашого боку і SSL шифрування трафіку від Cloudflare мають мінімізувати ризики.
Дякую що завітали. Сподіваюсь вам було корисно і цікаво. Розвивайтесь і рухайтесь далі, а я по можливості буду вам допомагати.