Один внешний порт для нескольких внутренних портов

Вопрос или проблема

Мой провайдер интернета не предоставляет статический 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;
    }
    }

Дополнительные рекомендации:

  1. Firewall и безопасность:
    Убедитесь, что ваши внутренние servers настроены для работы с необходимыми портами, и не забудьте настроить firewall, чтобы разрешить только нужный трафик.

  2. Доменная система (DNS):
    Настройте записи DNS на вашем сервере, чтобы правильно связывать доменные имена с вашим публичным IP. Каждое доменное имя будет перенаправляться на соответствующий сервер в зависимости от настроек HAProxy или NGINX.

  3. Мониторинг и логирование:
    Рекомендуется использовать инструменты мониторинга и логирования, такие как Prometheus и Grafana, чтобы отслеживать работу ваших серверов и поведение трафика.

Заключение

Использование единого внешнего порта для нескольких внутренних серверов требует тщательной конфигурации сетевого оборудования и программного обеспечения. HAProxy и NGINX (с модулем stream) являются отличными решениями для этой задачи и позволяют вам эффективно управлять как TCP, так и UDP трафиком. Следуя данному руководству, вы сможете настроить ваш сервер Ubuntu так, чтобы он эффективно обрабатывал входящий трафик, даже при наличии жестких ограничений со стороны вашего интернет-провайдера.

Оцените материал
Добавить комментарий

Капча загружается...