Назад | Перейти на главную страницу

Связывание доменных имен с номерами портов

У меня есть [игровой] сервер (CentOS), на котором используется около 10 портов. В частности, для одной игры у меня есть 2 сервера: частный и публичный. IP у них одинаковый, поэтому для различения между ними пользователь должен использовать mydomain.com:[portnumber]. Есть ли способ настроить CentOS так, чтобы он автоматически брал что-то вроде subdomain.mydomain.com и преобразовывал его в mydomain.com:[portnumber] или простой localhost: [portnumber]? Для этого нужен DNS?

Спасибо

Если это полностью ваше приложение и вы контролируете свой DNS, вы можете определить SRV запись для вашей игры. Тогда ваши клиенты должны понять, что вы определили _gamename._tcp.example.com SRV запись, чтобы дать пользователю возможность использовать example.com для доступа к серверу через правильный порт.

Звучит сложно и почти невозможно, если вы просто используете существующий игровой сервер и размещаете его, но это единственный способ включить номер порта в DNS.

Если это невозможно, просто выберите "нормальный" порт для общедоступного сервера (чтобы пользователю не о чем беспокоиться) и "другой" порт для частного сервера (где вы должны указать порт, но база пользователей ограничена, поэтому "общая сумма забот" меньше.)

К сожалению, сделать это невозможно, если только это не предусмотрено как функция конкретных игр, которые вы запускаете.

Вы можете выбрать либо привязать отдельный общедоступный IP-адрес к каждому разному экземпляру одной и той же игры (что не вариант, если у вас есть только один общедоступный IP-адрес), либо указать номер порта, когда вы рассказываете людям о сервере.

Для этого есть обходной путь при работе с HTTP-трафиком, но он работает только потому, что подключающийся клиент разговаривает с сервером и предоставляет серверу информацию о том, к чему, по его мнению, он пытается подключиться (т.е. он сообщает серверу, что он подключается к какому DNS-имени он пытается добраться, когда подключается). Это позволяет серверу выбирать, какой контент предоставлять клиенту. Однако он ничего не переводит на другой порт.

Вы можете сделать это, отредактировав файл apache httpd.conf и добавив перенаправление виртуальных хостов. Конечно, если это ваш сервер, и вы также можете редактировать записи DNS. Например:

NameVirtualHost ip.add.of.server

<VirtualHost ip.add.of.server>
    ServerName yourserver.domain.com
    Redirect permanent / http://yourserver.domain.com:PORT
</VirtualHost>

<VirtualHost ip.add.of.server>
    ServerName yourserver2.domain.com
    Redirect permanent / http://yourserver.domain.com:PORT
</VirtualHost>

yourserver2.domain.com может быть тем же сервером, вы должны добавить новую запись A в DNS.

У вас есть эти решения, которые легко реализовать:

  • Правило DNAT в брандмауэре для изменения порта назначения для локального трафика на порт, выделенный для локального трафика
  • Слушайте external_IP: same_port для внешнего приложения и слушайте internal_IP: same_port для внутреннего приложения. Таким образом, у вас будут запущены оба приложения и использовать один и тот же порт, но разные IP-адреса.