У меня есть домен (например, example.com
), статический IP-адрес (например, 212.5.5.5
) и локальные устройства по адресу 192.168.0.1:80
, 192.168.0.2:80
, 192.168.0.3:80
, 192.168.0.4:80
, 192.168.0.4:47
(это не веб-сайт).
Как получить доступ к этим устройствам с помощью поддоменов (например, device1.example.com
, device2.example.com
и т. д.)?
В настоящее время мне удалось получить только работающие example.com:80
и example.com:47
, которые указывают на 192.168.0.4:80
и 192.168.0.4:47
.
Я знаю, что нельзя установить порт на DNS-сервере.
Как мне преодолеть мою проблему?
решение1
У вас может быть один общедоступный сервер, на котором запущен обратный прокси-сервер nginx, который перенаправляет трафик на основе поддомена на нужный сервер.
Конфигурация nginx на вашем «главном» сервере:
server {
server_name device1.example.com;
location / {
proxy_pass http://192.168.0.1:80;
}
}
server {
server_name device2.example.com;
location / {
proxy_pass http://192.168.0.2:80;
}
}
server {
server_name device3.example.com;
location / {
proxy_pass http://192.168.0.3:80;
}
}
решение2
Вам нужно будет использовать альтернативные порты для всего, кроме одного из них. Например, 212.5.5.5:80 будет перенаправлять на 192.168.0.1:80, но затем 212.5.5.5:81 будет перенаправлять на 192.168.0.2:80, а 212.5.5.5:82 будет перенаправлять на 192.168.0.3:80 и т. д. Это должно быть настраиваемым на большинстве современных устройств NAT.
Другой способ, если вы готовы использовать IPv6, — просто включить сквозной IPv6 на вашем устройстве NAT или маршрутизаторе. По сути, это выставляет каждый адрес IPv6 в вашей локальной сети в публичный интернет, позволяя вам получать к ним прямой доступ извне. Как вы можете себе представить, с этим связан определенный риск. Вам решать, является ли этот риск допустимым.
решение3
Вы не должны выставлять эти сервисы напоказ в Интернете напрямую. Вы не можете проверить эти устройства, чтобы убедиться, что они безопасны, и простое их выведение напоказ приводит к утечке информации о состоянии вашей внутренней сети.
Правильным решением будет настроить VPN-сервер, который предоставит вам удаленный доступ к внутренней сети. В идеале внутренняя сеть должна быть отделена от вашей основной и использоваться только для этих открытых устройств. Это ограничит ущерб в случае их взлома.
Программное обеспечение VPN с открытым исходным кодом является зрелым, проверенным, а проблемы безопасности хорошо изучены. Вы ограничиваете себя гораздо меньшей поверхностью атаки.
решение4
Сначала вы можете убедиться, что всем нужен доступ к этим сервисам из Интернета (= что они действительно предназначены для публичного использования). В противном случае вы можете рассмотреть возможность настройки VPN-сервера и доступа к сервисам внутри вашей сети.
Я предполагаю, что службы, которые находятся на порту, 80
являются веб-серверами, предоставляющими типичные веб-службы. В таком случае применяются решения обратного прокси, предложенные в других ответах.
Возможно, это службы, которые подготовлены/предназначены для запуска с SRV
записью в вашем DNS. Идея в том, что вы разрешаете известную запись для службы, которая в свою очередь дает вам имя:порт для подключения. Возьмем пример Minecraft:
- вы настраиваете своего клиента для подключения к
minecraft.example.com
- Ваш клиент знает, что он может сделать запрос
_minecraft._tcp.minecraft.example.com.
, чтобы получить фактический IP-адрес и порт для подключения.
Это чрезвычайно полезная функция, но ее необходимо реализовать наклиентдля услуги, к которой вы обращаетесь