Как обычный отказ от ответственности - я довольно долго искал решение, но пока не нашел работающего решения.
Цель: создать решение для динамического DNS для доступа к моей домашней сети без сторонних сервисов.
Настройка: Интернет-сервер, на котором работает nginx с доступными доменами, локальная сеть с маршрутизатором, автоматически назначает новый IP-адрес каждый день провайдером.
Достигнуто до сих пор: мне удалось использовать nginx в качестве обратного прокси-сервера для пересылки запросов на https://dyn.mydomain.tld
на https://my.current.ip.address
с помощью server
директивы, соответствующей
server {
443 ssl http2;
ssl on;
ssl_certificate /etc/letsencrypt/live/dyn.mydomain.tld/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/dyn.mydomain.tld/privkey.pem;
location / {
proxy_pass https://my.current.ip.address;
}
}
Это успешно и прозрачно перенаправило запрос на веб-интерфейс локального маршрутизатора.
Проблема: Однако, конечно, мне нужно это для работы с моим динамическим IP-адресом. Я могу сказать своему маршрутизатору вызывать произвольный URL, передавая новый IP-адрес всякий раз, когда он изменяется, поэтому мне кажется, что мне нужен URL-адрес на моем сервере, который обновит IP-адрес, на который nginx перенаправляет запросы. То, что я ищу, - это решение, которое будет делать это с минимальной производительностью и (что более важно) последствиями для безопасности.
Мысли: Сначала я подумал о том, чтобы иметь этот IP в файле, который читается nginx, но я читал, что это должно дать довольно плохую производительность (если вообще возможно заставить переменную читать из файла в конфигурации nginx).
Другая идея заключается в том, чтобы скрипт где-нибудь обновлял IP-адрес и перезагружал nginx для "статической" загрузки значения. Тем не менее, это означало бы, что я должен был бы предоставить общедоступные привилегии root / скрипта / URL, по крайней мере, перезапустить nginx и, возможно, переписать файл - что, похоже, я бы не хотел делать?
Вопрос (краткий): есть ли способ предоставить nginx динамическое значение для пересылки IP, которое можно обновить, выполнив сценарий по запросу HTTPS, инициированному маршрутизатором?
В сторону: реализация, указанная как "достигнутая на данный момент", представляет сертификат Lets Encrypt, установленный на сервере, браузеру, в то время как (самозаверяющий) сертификат браузера больше не используется (при доступе к странице конфигурации маршрутизатора непосредственно через его текущий IP или через сторонний сервис Dynamic DNS браузер жалуется на самоподписанный сертификат). Хотя это выглядит как удобство, разве это не проблема безопасности, так как идентификация маршрутизатора может не проверяться должным образом?