Переадресация портов с domain1.com:25565 на 40000 и с domain2.com:25565 на 30000

У меня есть Сервер, работающий через порт 30.000 и порт 40.000, и если кто-то получает доступ к domain1.com:25565, он должен подключиться к локальному порту 40.000, а если он подключается через domain2.com:25565, он должен подключиться к локальному порту 30.000

domain1.com:25565 -> 37.120.174.183:25565 -> localhost: 40000

domain2.com:25565 -> 37.120.174.183:25565 -> localhost: 30000

3 ответа

Решение

Как правило, входящие пакеты, пытающиеся инициировать соединение, не будут содержать имя домена назначения, только IP-адрес назначения. Поэтому для создания каких-либо правил iptables для перенаправления пакетов недостаточно информации. Вы не можете делать то, что вы пытаетесь сделать.

Теперь вы, возможно, знаете, что часто веб-серверы могут работать со многими разными доменами, все из которых разрешаются на один IP-адрес. Это делается через конфигурацию веб-сервера, а не на уровне сетевых пакетов. В конце концов, после того как сетевое соединение было установлено, включается имя домена назначения, и веб-сервер может решить, к каким фактическим страницам пользователь пытается получить доступ, и ответить соответствующим образом.

Не является iptables решение но работает:)

Решение заключается в использовании apache модули mod_proxy.so а также mod_proxy_http.so

Установите mod_proxy и настройте обратный прокси-сервер в Apache Webserver

Установите модуль

sudo apt-get install libapache2-mod-proxy-html

Установка зависимости libxml2-dev

apt-get install libxml2-dev

Загрузите модуль

a2enmod proxy proxy_http

Создайте виртуальный хост в файле конфигурации Apache.

sudo nano /etc/apache2/sites-enabled/000-default

Listen 40000
Listen 30000
<VirtualHost *:25565>
        ServerName domain1.com
        ServerAlias www.domain1.com
        DocumentRoot /var/www/vhosts/domain1.com

        <Directory /var/www/vhosts/domain1.com>
                Options -Indexes FollowSymLinks -MultiViews
                AllowOverride All
                Order deny,allow
                Allow from all
        </Directory>
        CustomLog /var/log/httpd/domain1.com-access.log combined
        ErrorLog /var/log/httpd/domain1.com-error.log
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        ProxyPass / http://domain1.com:40000/
        ProxyPassReverse / http://domain1.com:40000/
</VirtualHost>


<VirtualHost *:40000>
        ServerName domain1.com
        ServerAlias www.domain1.com
        #### This is where you put your files for that domain: /var/www/vhosts/domain1.com
        DocumentRoot /var/www/vhosts/domain1.com
</VirtualHost>



<VirtualHost *:25565>
            ServerName domain2.com
            ServerAlias www.domain2.com
            DocumentRoot /var/www/vhosts/domain1.com

            <Directory /var/www/vhosts/domain2.com>
                    Options -Indexes FollowSymLinks -MultiViews
                    AllowOverride All
                    Order deny,allow
                    Allow from all
            </Directory>
            CustomLog /var/log/httpd/domain2.com-access.log combined
            ErrorLog /var/log/httpd/domain2.com-error.log
            # Possible values include: debug, info, notice, warn, error, crit,
            # alert, emerg.
            LogLevel warn

            ProxyPass / http://domain2.com:30000/
            ProxyPassReverse / http://domain2.com:30000/
    </VirtualHost>


    <VirtualHost *:30000>
            ServerName domain2.com
            ServerAlias www.domain2.com
            #### This is where you put your files for that domain: /var/www/vhosts/domain2.com
            DocumentRoot /var/www/vhosts/domain2.com
    </VirtualHost>

Теперь перезагрузите апач

 /etc/init.d/apache2 restart

Только остается запретить доступ с iptables для внешней сети на портах 30000 а также 40000 так как apache использование localhost,

Хотя mod-proxy от Apache может работать, лучшее решение для вашей проблемы - использование обратного прокси, такого как haproxy,

устанавливать haproxy с помощью этой команды:

sudo apt-get install haproxy

затем отредактируйте файл конфигурации следующим образом:

sudo nano /etc/haproxy.cfg

поместите эти строки в файл конфигурации

//Put this in the file
global
    daemon
    maxconn 4096

defaults
    mode http
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms

frontend http-in
    bind *:25565
    acl is_site1 hdr_end(host) -i domain1.com
    acl is_site2 hdr_end(host) -i domain2.com

    use_backend site1 if is_site1
    use_backend site2 if is_site2

backend site1
    balance roundrobin
    option httpclose
    option forwardfor
    server s2 127.0.0.1:40000 maxconn 32

backend site2
    balance roundrobin
    option httpclose
    option forwardfor
    server s1 127.0.0.1:30000 maxconn 32

listen admin
    bind 127.0.0.1:8080
    stats enable

Запустите / перезагрузите сервер, используя:

sudo /usr/sbin/haproxy -f /etc/haproxy.cfg -D -p /var/run/haproxy.pid

источник

Другие вопросы по тегам