2025/07/04 - Туннели CloudFlare.com: делаем вебсервер дома без публичного IP
Jul. 4th, 2025 12:00 am![[syndicated profile]](https://www.dreamwidth.org/img/silk/identity/feed.png)

=============== cut ===============
# Свежий arm64 (Raspberry 4) бинарник
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64
# Либо для amd64
# wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64
chmod +x cloudflared-linux-arm64
sudo mv cloudflared-linux-arm64 /usr/local/bin/cloudflared
=============== /cut ===============
2. Создаем папку в вашей домашней области /home/lleo/.cloudflared — отныне работаем в ней. Логинимся браузером на сайте cloudflare.com, чтоб заранее были залогинены. И регистрируем свой тоннель с этого компьютера, чтобы создался файл cert.pem Внимание, root не нужен, здесь и далее всё делаем от пользователя:
=============== cut ===============
cloudflared tunnel login
=============== /cut ===============
Если на компе есть браузер, он запустится сам, если нет (например, Raspberry), просто скопируйте из консоли ссылку и откройте в браузере ан своем компе, где были залогинены на cloudflare. Сайт предложит зарегистрировать этот тоннель для одного из ваших сайтов, например для lleo.me Итого: в папке создался cert.pem 3. Создаем тоннель этого компьютера с неким именем (я выбрал qs):
=============== cut ===============
cloudflared tunnel create qs
=============== /cut ===============
Смотрим, появился ли файл json:
=============== cut ===============
ls /home/lleo/.cloudflared/*.json
=============== /cut ===============
Ура, появился, запоминаем его имя, оно сейчас пригодится: cdc47fa4-8097-b41a-2bba-56ecb2c9902a.json Заодно можно посмотреть, какие вообще на вашем cloudflare зарегистрированы тоннели — может, у вас много компьютеров со своим тоннелем, и на каждом висят свои поддомены, как у меня.
=============== cut ===============
cloudflared tunnel list
=============== /cut ===============
Кстати, если надо удалить тоннель: [ ТЕКСТ ПОД КАТОМ: Доступен только в оригинальной заметке на сайте ] 4. Создаем файл config-qs.yml (имя произвольное). В нем вы задаете имя тоннеля (qs), хэш (cdc47fa4-8097-b41a-2bba-56ecb2c9902a из имени json), а также прописываете в ingress пары hostname/service для всех сервисов, какие у вас на этом компе есть. В простом случае это должна быть одна пара с портом 80, а в конце "- service: http_status:404", но у меня много разных сервисов, и все их я вешаю на один тоннель:
=============== cut ===============
tunnel: qs
credentials-file: /home/lleo/.cloudflared/cdc47fa4-8097-b41a-2bba-56ecb2c9902a.json
ingress:
— hostname: homecomp.lleo.me
service: http://localhost:80
— hostname: qs.lleo.me
service: http://localhost:80
— hostname: nas.lleo.me
service: http://localhost:8250
— hostname: webcam1.lleo.me
service: http://localhost:2025
— hostname: webcam2.lleo.me
service: http://localhost:2024
— service: http_status:404
=============== /cut ===============
5. Теперь создадим в cloudflare dns записи для этих доменов. Сейчас подумал: если вам нужно не для поддомена, а для корневого сайта, наверно и ее надо как-то создать, но я делал только поддомены. Учтите, что если поддомены с этим именем уже были, их надо руками удалить из админки cloudflare через сайт! Иначе из консоли оно не умеет. Создаем поддомены:
=============== cut ===============
cloudflared tunnel route dns qs homecomp.lleo.me
cloudflared tunnel route dns qs qs.lleo.me
cloudflared tunnel route dns qs nas.lleo.me
cloudflared tunnel route dns qs webcam1.lleo.me
cloudflared tunnel route dns qs webcam2.lleo.me
=============== /cut ===============
6. Всё готово. Запускаем систему для проверки:
=============== cut ===============
cloudflared tunnel --config /home/lleo/.cloudflared/config-qs.yml run qs
=============== /cut ===============
Если всё сделано правильно, ваш сайт уже откроется как https — то есть, заведомо из любой точки мира. 7. Если все работает, создаем демона. Делаем файлик cloudflared-qs.service
=============== cut ===============
[Unit]
Description=Cloudflare Tunnel qs
After=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/cloudflared tunnel --config /home/lleo/.cloudflared/config-qs.yml run qs
Restart=always
RestartSec=5
[Install]
WantedBy=default.target
=============== /cut ===============
Проводим манипуляции по инсталляции сервиса:
=============== cut ===============
sudo loginctl enable-linger lleo # так надо чтобы работало само от вашего юзера
mkdir -p ~/.config/systemd/user
rm -f ~/.config/systemd/user/cloudflared-qs.service # на всякий случай
sudo ln -s /home/lleo/.cloudflared/cloudflared-qs.service ~/.config/systemd/user/cloudflared-qs.service
systemctl --user daemon-reload
systemctl --user enable cloudflared-qs
systemctl --user restart cloudflared-qs
=============== /cut ===============
8. Поздравляю, теперь ваш домашний комп доступен как важный сайт из большого интернета, несмотря на отсутствие публичного IP. Скорость будет приемлемая, ваши посетители или клиенты никогда не догадаются, в какую коробочку под столом они на самом деле попадают. Заодно можно поднять VPN VLESS (он же через web), чтобы иметь доступ к своей внутренней сети через VPN, не забудьте только в клиенте Андроида v2rayNG убрать вот такую оцпию, запрещающую бегать через VPN в вашу внутреннюю сеть: Профиль → ⚙️ → «Routing» → «Bypass LAN» или «绕过局域网». А в настройках VLESS надо добавить routing для вашей внутренней сетки (у меня она 10.1.1.*): [ ТЕКСТ ПОД КАТОМ: Доступен только в оригинальной заметке на сайте ] На всякий случай напоминаю, что все вышеописанное не имеет вообще никакого отношения к инструкциям по настройке VPN и обходу блокировок. Как мы помним из недавнего письма, тема настройки VPN у нас в стране запрещена. Здесь же речь о том, как настроить свой вебсайт на домашнем компьютере через тоннель. Инструкций по настройке VPN VLESS здесь тоже нет и не будет, я лишь упомянул, какие доплнительные опции нужны чтобы через тоннель открыть себе доступ внутрь собственной домашней сети, не имея публичного IP — например, я не дома, а мне надо срочно посмотреть свои файлы на домашнем накопителе. UPD: Мне вот пишут, что CloudFlare иногда не открывается из России. Это история про TLS 1.3, подробнее об этом я писал год назад. Вкратце: пока достаточно в настройках CloudFlare отключить опцию TLS 1.3, и проблем не будет. У меня на lleo.me отключено, как видите, и проблем нет.