| |||
![]()
|
![]() ![]() |
![]()
Туннели CloudFlare.com: делаем вебсервер дома без публичного IP Жизнь постоянно меняется. Вот я, например, остался без работы. А еще переехал на другую квартиру. Нет уже того милого домика у провинциального озера с комнаткой под лестницей, грущу. Зато теперь мне 7 минут до метро. Но рассказ не об этом. Заодно сменился интернет-провайдер, и нынешний наотрез отказывается давать публичный IP, даже за деньги. Это для меня неожиданность, я привык жить с внешним IP. Но, оказалось, сегодня и это настраиваемо. И сейчас расскажу, как я настраивал. Кому техническая тема не интересна, может дальше не читать. ![]() Когда вы открываете мой домашний сайт в поддомене https://qs.lleo.me (там ничего интересного для посетителей нет), вы попадаете на вот эту фитюльку, которая висит на домашнем WiFi и не имеет публичного IP — ни сама, ни WiFi-роутер. Так же самая фигня, когда вы слушаете «Радио Рыбий Жир» https://lleo.me/radio — аудиовещание тоже идёт именно оттуда, хотя и кэшируется на CloudFlare. И ещё много открытых и закрытых проектов, которые висят дома на домашнем wifi и теперь работают в условиях отсутствия публичного ip. Как это возможно? Сервис cloudflare.com по праву имеет самый блатной IP-адрес: 1.1.1.1 Много лет он является центром здравомыслия, нестяжательства и главным хабом интернета. Все мои сайты проксируются через cloudflare.com Что это дает? Как работает cloudflare с сайтами? Вы прописываете для своего домена записи от cloudflare (там есть инструкция), и отныне браузеры посетителей идут туда. Дальше cloudflare разбирается, какой сайт вызвал, и сам бежит к вам на сайт с клиентским запросом (в простом случае — по порту 80), а ответ вашего сайта передает клиенту. То есть, работает шлюзом. Ходит он к вам со своих IP, но IP клиента приносит в специальном заголовке CF-Connecting-IP Хорошо даже, если ваш сайт не будет вообще отвечать никому, кроме cloudflare. Но, как минимум, если вас интересуют по какой-то причине реальные IP посетителей, вы можете настроить nginx возвращать реальный IP клиента из заголовка. В nginx в секции server это делается так: [ ТЕКСТ ПОД КАТОМ: Доступен только в оригинальной заметке на сайте ] Но дело-то не в этом. Со временем умным людям пришла в головы светлая мысль: тропинка между cloudflare и вашим сервером может быть не только по порту 80 или 433, а вообще любым способом! И cloudflare предложил свой тоннель. Который отличается от беганья по порту тем, что тоннелю не нужен публичный IP вашего сайта, достаточно, чтобы ваш сервер как-то поддерживал его, например, со своей стороны, а это можно делать даже с серым IP. Итак, у вас есть Самый Обычный Домашний Интернет, без статического публичного IP, без динамического публичного IP, а просто с каким-то непубличным сереньким IP 192.168.xxx.xxx или 10.xxx.xxx.xxx, который вам присвоил провайдер. Но вы все равно хотите иметь сайт и прочие интернет-сервисы у себя в квартире. Я часто слышу хныканье, мол, у какого провайдера купить место и серверные мощности для нашей домашней странички... Чуваки, поверьте, ваша сраная домашняя страничка и даже ваш сраный корпоративный сайт, куда ходят в сутки полторы калеки, дают такой мизерный трафик, что любое домашнее соединение вполне обслужит ваших клиентов, даже Raspberry PI, брошенная под стол. Итак, настраиваем домашний вебсайт. 1. Для начала на домашнем компе или микрокомпе, который станет вебсервером, качаем свежий бинарник тоннеля cloudflare:
2. Создаем папку в вашей домашней области /home/lleo/.cloudflared — отныне работаем в ней. Логинимся браузером на сайте cloudflare.com, чтоб заранее были залогинены. И регистрируем свой тоннель с этого компьютера, чтобы создался файл cert.pem Внимание, root не нужен, здесь и далее всё делаем от пользователя:
Если на компе есть браузер, он запустится сам, если нет (например, Raspberry), просто скопируйте из консоли ссылку и откройте в браузере на своем компе, где были залогинены на cloudflare. Сайт предложит зарегистрировать этот тоннель для одного из ваших сайтов, например для lleo.me Итого: в папке создался cert.pem 3. Создаем тоннель этого компьютера с неким именем (я выбрал qs):
Смотрим, появился ли файл json:
Ура, появился, запоминаем его имя, оно сейчас пригодится: cdc47fa4-8097-b41a-2bba-56ecb2c9902a.jso Заодно можно посмотреть, какие вообще на вашем cloudflare зарегистрированы тоннели — может, у вас много компьютеров со своим тоннелем, и на каждом висят свои поддомены, как у меня.
Кстати, если надо удалить тоннель: 4. Создаем файл config-qs.yml (имя произвольное). В нем вы задаете имя тоннеля (qs), хэш (cdc47fa4-8097-b41a-2bba-56ecb2c9902a из имени json), а также прописываете в ingress пары hostname/service для всех сервисов, какие у вас на этом компе есть. В простом случае это должна быть одна пара с портом 80, а в конце "- service: http_status:404", но у меня много разных сервисов, и все их я вешаю на один тоннель:
5. Теперь создадим в cloudflare dns записи для этих доменов. Сейчас подумал: если вам нужно не для поддомена, а для корневого сайта, наверно и ее надо как-то создать, но я делал только поддомены. Учтите, что если поддомены с этим именем уже были, их надо руками удалить из админки cloudflare через сайт! Иначе из консоли оно не умеет. Создаем поддомены:
6. Всё готово. Запускаем систему для проверки:
Если всё сделано правильно, ваш сайт уже откроется как https — то есть, заведомо из любой точки мира. 7. Если все работает, создаем демона. Делаем файлик cloudflared-qs.service
Проводим манипуляции по инсталляции сервиса:
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 отключено, как видите, и проблем нет. |
|||||||||||||||
![]() |
![]() |