LINUX.ORG.RU
решено ФорумAdmin

Использование reverse proxy с ssl для локального сервера

 , , , ,


0

1

Т.к. матчасть до конца еще не понимаю, прошу подсказать. Домашний серв, для которого не проброшены порты. Он доступен только в локалке и по впн (wireguard) через впс. Для некоторых сервисов хочу/нужно шифрование. Я знаю, что есть duckdns.org и тому подобные r2g сервисы, но я хочу собственный сертификат и свой домен. Так вот, у меня есть домен, допустим, x.ru, который указывает на внутренний (в локалке) адрес сервера, допустим 192.168.0.101. Я создал несколько А записей с поддоменами вроде n1.x.ru, n2.x.ru, которые указывают на этот же адрес. Дальше я через caddy/nginx-proxy-manager (не одновременно, конечно, пробовал, а по очереди) настраиваю прокси с forced ssl через letsencrypt/zerossl. Сертификаты получаю вроде как (это все автоматом происходит)

    ├── archive
    │   └── npm-5
    │       ├── cert1.pem
    │       ├── chain1.pem
    │       ├── fullchain1.pem
    │       └── privkey1.pem

Если делать через nginx, прокси появляются в списке, статус у них зеленый (активный, валидный), указано, что есть ssl, но соединиться по адресу поддомена с сервисом невозможно ни из локалки, ни через внп. Просто нет никакого ответа. Если в браузере открыть, то это белая страница, хоть https. При этом соединение в принципе работает, если по ip адресу заходить. Фаерволл нужное пропускает, с этим проблем нет.

Вопрос: как правильно организовать через reverse proxy, установленный на серваке в локальной сети доступ к сервисам на этом же серваке через https на собственном домене, привязанном к внутреннему адресу сервака, при этом не открывая сервак миру, даже через cloudflare.

Перемещено hobbit из general



Последнее исправление: Entmatix (всего исправлений: 2)

Для того, чтобы работал ssl нужно чтобы обращение к серверу шло по доменному имени на которое выдан ssl сертификат.

В твоём случае этот сервер - reverse proxy.

Тебе даже днс для проверки не нужен.

Достаточно в файле hosts прописать соответствие доменного имени ip адресу reverse proxy сервера.

И далее в браузере набрать https://domain.ru

Если подключение происходит и ты видишь ssl сертификат все хорошо.

А то, что у тебя отдается белая страница это уже относится к настройке на reverse proxy перенаправления запросов на backend сервера и к настройке этих backend серверов, чтобы они отвечали.

И не важно где находится reverse proxy сервер внутри сети, есть доступ к интернет или нет у него.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от kostik87

Если бы это еще работало…

Вот, что я вижу, когда проксю без ssl

Congratulations!
You've successfully started the Nginx Proxy Manager.

If you're seeing this site then you're trying to access a host that isn't set up yet.

Log in to the Admin panel to get started.

А вот попытка получить ssl

x.ru: There is no server available at this domain. Please make sure your domain exists and points to the IP where your NPM instance is running and if necessary port 80 is forwarded in your router.

x.ru указывает на внутренний адрес сервака в локалке. Резолвится уже несколько дней (проверял гугл, кф, квад и прочие).

Entmatix
() автор топика

I created this project to fill a personal need to provide users with a easy way to accomplish reverse proxying hosts with SSL termination and it had to be so easy that a monkey could do it.

Вот и результат.

AVL2 ★★★★★
()
Ответ на: комментарий от Entmatix

Уж извини, но какой-то лютый треш у тебя в голове.

Метода.

  1. Зарегистрировать доменное имя и прописать его в днс на «внешний, публичный» адрес. То есть на тот ip-адрес, на котором живет прокси, nginx.

  2. Поднять nginx и убедиться, что он отвечает правильно. Говорит, что я молодец, нжинкс сервер к вашим услугам, в том числе по протоколам https:// Внутренний сервер для этого не нужен, направить прокси можно куда угодно, хоть на https://ya.ru

  3. Обеспечить доступность внутреннего сервера с публичного сервера, на котором крутится нжинкс. Обычно это делают с помощью тунеля. С сервера nginx должен быть доступ и возможность открыть внутренний сайт. Проверить это можно, например, nmap непосредственно с сервера.

4, Прописать в нжинкс proxy_pass на внутренний сервер.

Все.

AVL2 ★★★★★
()
Ответ на: комментарий от Entmatix

Что ты хочешь, что бы мы прочитали за тебя как настраивается твой реверс прокси?

Если ты используешь какую-то панель - читай её документацию.

Ну либо открой документацию по nginx / haproxy и настрой руками, там всё просто.

Проблема не в ssl, а в том, что ты не знаешь как настроить revers proxy.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от AVL2

То, что я не знаю матчасти в достаточно степени, - да, об этом я написал. Я ее читаю, но еще далеко не все понимаю.

и прописать его в днс на «внешний, публичный» адрес

У меня совершенно другая задача, как видно из описания. Мне НЕ нужен публичный адрес. Мне нужно шифрование для моей локалки без самоподписанных сертификатов. То есть то, что автоматически делает duckdns.org/route53 и т.п., только со своим доменом и сертификатами, которые я получаю сам. Если это невозможно (хотя почему невозможно, если это делают и об этом пишут и такие функции заявляют в своим софте) сделать для локалки без предварительного создания сертификата на публичный адрес, тогда другое дело, но рза никто об этом еще не сказал, значит это возможно. А то, что ты написал, и так понятно и очевидно, но это не то, что мне нужно…

Entmatix
() автор топика
Ответ на: комментарий от kostik87

Проблема не в ssl, а в том, что ты не знаешь как настроить revers proxy.

Частично ответил в предыдущем посте. Дополню. У меня работает reverse proxy. Что caddy, что nginx-proxy-manager. Я их настроил и все правильно работает в локалке, но это БЕЗ ssl. Мне надо добавить к этому ssl. Каким боком тут неправильная настройка РП, не знаю. Вот пример конфига caddy. Скажи, что я тут неправильно настроил.

n1.x.ru:443 {
 tls myemail@email.ru
 reverse_proxy http://localhost:8080
}

Я для этого и спрашиваю, чтобы опытные люди, которые используют подобный софт пояснили, где я ошибся, прежде чем думать, что это баг в софте и нужно писать автору. Отправлять куда-то что-то читать, когда ты (отвечающий) сам не понял, какого рода проблема у автора, глупо и соответствующе тебя определяет. Если ты видишь, где я допустил ошибку в настройке/понимании системы, напиши.

Entmatix
() автор топика
Ответ на: комментарий от Entmatix

Прежде чем меня в чем-то упрекать прочти пожалуйста вот это: https://www.opennet.ru/docs/RUS/smart_question/

Ты задал технический вопрос, но не приложил ни конфигурационного файла ни логов.

И на твой вопрос можно дать только общий ответ.

Приложи логи и конфиг целиком. Доменные имена можешь заменить.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)

Так вот, у меня есть домен, допустим, x.ru, который указывает на внутренний (в локалке) адрес сервера, допустим 192.168.0.101.

А вот нифига, он должен указывать на внешний адрес твоей локалки, и пофигу роутер там или сервер. Без внешнего адреса доменное имя бесполезно.

einhander ★★★★★
()
Ответ на: комментарий от einhander

Значит я волшебник, раз у меня это работает 😁

И да, где эта директива, что так не должно быть? Кто так сказал? Так можно делать, так работают разные сервисы. Доменное имя полезно и так же нужно, если понимать, зачем оно тебе.

Entmatix
() автор топика
Последнее исправление: Entmatix (всего исправлений: 1)
Ответ на: комментарий от Entmatix

У меня совершенно другая задача, как видно из описания. Мне НЕ нужен публичный адрес.

в данном контексте публичный адрес, это адрес, на котором сидит прокси с сертификатом. Из какого диапазона этот адрес никому не интересно.

AVL2 ★★★★★
()
Ответ на: комментарий от Entmatix

с машины, на которой проводишь проверки выполни команды:

ping x.ru

должен пинговаться

nmap x.ru -p 443,80

порты (как минимум 443) должны быть открыты.

AVL2 ★★★★★
()
Ответ на: комментарий от einhander

Как оно может работать если указывает на локалку? Или ты поднял внутренний днс и обращаешся к нему?

а в чем проблема-то?

www.mysite.ru будет ресолвится отовсюду.

Если прописать туда 192.168.0.21 то из локалки или через vpn прекрасно будет работать.

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

Выглядит как извращение, но да будет работать из локалки. Но зачем платить за домен тогда. Из-за бесплатного сертификата что-ли? Но ручная установка это лютейший геморрой.

einhander ★★★★★
()
Ответ на: комментарий от einhander

Выглядит как извращение, но да будет работать из локалки. Но зачем платить за домен тогда. Из-за бесплатного сертификата что-ли?

Чтобы браузеры из коробки принимали сертификат. Без домена получить сертификат хоть платный, хоть бесплатный нельзя. Самоподписной можно, но браузеры на него ругаются. Давно уже так делаем.

Да и в принципе удобно, когда локальная зона днс работает в том числе у тех, у кого пробиты днс гугла в настройках.

AVL2 ★★★★★
()

В общем, история следующая.

Домен, о котором я писал, был взят у reg.ru. По какой-то причине получение сертификатов letsencrypt/zerossl с помощью dns challenge на домен от reg.ru напрямую не работает. Я для себя решил это по другому - привязал имеющийся домен к dns серверам cloudflare, создал в ЛК КФ апи токен для доступа к днс записям и выпустил сертификат не него. Сейчас все отлично работает. Всем спасибо за помощь.

Entmatix
() автор топика