Вопрос или проблема
Мой провайдер интернета не предоставляет статический ipv4, однако мне удалось получить один порт на публичном ipv4, что означает, что я могу хостить один сервер на этом порту. Но я хочу хостить несколько серверов с разными внутренними портами, такими как 25565 для Minecraft Java, 19132 для Bedrock, 443 для веб-сервера, 22 для SSH и т.д.
Все эти или хотя бы некоторые из них на одном публичном порту, предоставленном моим провайдером.
Я наткнулся на обратные прокси, такие как nginx, но он не поддерживает UDP.
У меня есть несколько доменов, указывающих на мой публичный ipv4, которые я могу настроить так, чтобы каждый домен, когда к нему обращаются из Интернета, подключался к нужному внутреннему серверу. Я использую сервер Ubuntu.
Пробовал nginx, но он не поддерживает протокол UDP.
Мне как минимум нужен 25565 для сервера Minecraft Java и UDP-порт для одного из моих серверов. Если больше двух серверов не вариант, то я согласен на два сервера, но с разными протоколами.
Ответ или решение
Использование одного внешнего порта для нескольких внутренних серверов: решение проблемы
Ваша ситуация, когда вы имеете один внешний IP-адрес и хотите перенаправить трафик на несколько внутренних серверов, — это распространенная проблема для пользователей с динамическими IP-адресами. Хотя ваш провайдер интернета предоставляет только один анонимный порт, существуют несколько методов, которые позволяют эффективно использовать этот ограниченный ресурс.
Проблема: Осторожное управление трафиком
Суть проблемы заключается в том, что различным серверам требуется использовать разные порты и протоколы (TCP/UDP). Например, Minecraft Java сервер требует порта 25565 (TCP), в то время как ваш Bedrock сервер может занимать порт 19132 (UDP). Nginx, как вы уже выяснили, не поддерживает UDP, что усложняет ситуацию.
Решение: Использование прокси-серверов для управления трафиком
1. Использование HAProxy:
HAProxy является мощным инструментом, который позволяет вам управлять как TCP, так и UDP трафиком. Это позволит вам настроить перенаправление на основе различных доменных имен и протоколов.
-
Установка HAProxy:
sudo apt update sudo apt install haproxy
-
Конфигурация HAProxy:
Вы можете установить HAProxy так, чтобы он слушал на одном порту и перенаправлял на нужные внутренние сервисы. Пример конфигурацииhaproxy.cfg
может выглядеть следующим образом:
frontend main_frontend
bind *:80
acl is_minecraft hdr(host) your_minecraft_domain.com
acl is_webserver hdr(host) your_webserver_domain.com
use_backend minecraft_backend if is_minecraft
use_backend webserver_backend if is_webserver
backend minecraft_backend
server minecraft_server 127.0.0.1:25565
backend webserver_backend
server webserver 127.0.0.1:443
2. Использование NGINX для TCP/UDP:
Хотя NGINX сам по себе не поддерживает UDP, вы можете использовать NGINX в комбинации с stream-модулем, который позволяет обрабатывать TCP- и UDP-трафик.
- Установка и настройка:
Убедитесь, что у вас установлен NGINX с поддержкой stream-модуля:
sudo apt install nginx
-
Конфигурация NGINX для TCP и UDP:
stream { upstream minecraft { server 127.0.0.1:25565; } server { listen 1936; # ваш внешний порт для Minecraft proxy_pass minecraft; } upstream webserver { server 127.0.0.1:443; } server { listen 443; proxy_pass webserver; } }
Дополнительные рекомендации:
-
Firewall и безопасность:
Убедитесь, что ваши внутренние servers настроены для работы с необходимыми портами, и не забудьте настроить firewall, чтобы разрешить только нужный трафик. -
Доменная система (DNS):
Настройте записи DNS на вашем сервере, чтобы правильно связывать доменные имена с вашим публичным IP. Каждое доменное имя будет перенаправляться на соответствующий сервер в зависимости от настроек HAProxy или NGINX. -
Мониторинг и логирование:
Рекомендуется использовать инструменты мониторинга и логирования, такие как Prometheus и Grafana, чтобы отслеживать работу ваших серверов и поведение трафика.
Заключение
Использование единого внешнего порта для нескольких внутренних серверов требует тщательной конфигурации сетевого оборудования и программного обеспечения. HAProxy и NGINX (с модулем stream) являются отличными решениями для этой задачи и позволяют вам эффективно управлять как TCP, так и UDP трафиком. Следуя данному руководству, вы сможете настроить ваш сервер Ubuntu так, чтобы он эффективно обрабатывал входящий трафик, даже при наличии жестких ограничений со стороны вашего интернет-провайдера.