Подтвердить что ты не робот

Как перенаправить DNS на разные порты

Я владею доменом "Arboristal.com". Я также являюсь владельцем всех поддоменов в частном порядке на arboristal.com. Например, lg.arboristal или ft.arboristal.com.

В моих настройках DNS Arboristal.com настроен на то, чтобы перейти к нашему веб-хосту, который в настоящее время размещает наш веб-сайт.

У меня в моем доме три сервера, которые работают под одним общедоступным IP-адресом. (71.82.237.27)

У меня также есть три поддомена Arboristal.com, указывающие на мой IP-адрес.

Каждый из трех серверов работает на своих портах (25565, 25566, 25567)

Я хочу, чтобы каждый субдомен указывал на каждый открытый порт на моем IP-адресе.

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

Моя ситуация:

Три сервера, каждый из которых работает на другом порту. (Все порты и серверы)

Minecraft server one (25565)

Сервер Minecraft два (25566)

Minecraft server three (25567)

У меня есть три субдомена, запущенных на моем DNS-провайдере (webs.com)

mc.arboristal.com

tekkit.arboristal.com

pvp.artboristal.com

Когда вы используете Minecraft для подключения к одному из них, он автоматически выполняет через порт 25565, что означает, что независимо от того, какой URL-адрес вы пытаетесь подключиться к нему, он всегда переходит на мой IP-адрес с портом 25565. Подключение к серверу Minecraft one. Вы можете вручную ввести порт в порт, но я бы предпочел сохранить его как можно более привлекательным и профессиональным.

Итак, теперь, когда вы знаете мою ситуацию, есть ли какой-либо возможный способ сделать mc.arboristal.com, tekkit.arboristal.com и pvp.arboristal.com, все идут на мой IP-адрес под разными портами, не имея указать каждый порт в указанном URL для подключения к конечным пользователям?

Я могу добавить MX, A (используя этот для подключения к серверу), CNAME и TXT записи в настройки DNS

Я также могу добавить серверы имен в настройки DNS, если мне нужно использовать третью сторону в качестве моего DNS-провайдера. (Желаю в случае необходимости)

У меня также есть полный доступ к моему маршрутизатору в 192.168.0.1, если там что-то нужно настроить.

Я только что узнал, как интернет действительно работает на прошлой неделе, поэтому я не уверен, что что-то здесь действительно возможно. У меня также может не быть правильной информации о том, как работает Интернет. Пожалуйста, простите меня за любую ложную информацию, которую я могу предположить об Интернете.

4b9b3361

Ответ 1

Вы можете использовать записи SRV:

_service._proto.name. TTL class SRV priority weight port target.

Сервис: символическое имя нужной службы.

Прото: транспортный протокол требуемой службы; обычно это либо TCP, либо UDP.

Имя: имя домена, для которого эта запись действительна, заканчивается точкой.

TTL: стандартное время DNS для живого поля.

Класс: стандартное поле класса DNS (это всегда IN).

Приоритет: приоритет целевого хоста, более низкое значение означает более предпочтительное.

Вес: Относительный вес для записей с одинаковым приоритетом.

Порт: порт TCP или UDP, на котором должна быть найдена служба.

Цель: каноническое имя хоста машины, предоставляющей услугу, заканчивающееся точкой.

Пример:

_sip._tcp.example.com. 86400 IN SRV 0 5 5060 sipserver.example.com.

Итак, я думаю, что вы ищете, чтобы добавить что-то подобное в ваш файл хостов DNS:

_sip._tcp.arboristal.com. 86400 IN SRV 10 40 25565 mc.arboristal.com.
_sip._tcp.arboristal.com. 86400 IN SRV 10 30 25566 tekkit.arboristal.com.
_sip._tcp.arboristal.com. 86400 IN SRV 10 30 25567 pvp.arboristal.com.

С другой стороны, я настоятельно рекомендую вам пойти с хостинговой компанией, а не размещать серверы самостоятельно. Он просто запрашивает проблемы с домашним подключением (DDoS и Bandwidth/Connection Speed), но это зависит от вас.

Ответ 2

(Прошло некоторое время с тех пор, как я сделал это. Пожалуйста, не слепо предположите, что все приведенные ниже детали верны. Но я надеюсь, что не слишком смущаю.))


Как было сказано в предыдущем ответе, клиент Minecraft (от версии 1.3.1) поддерживает запись SRV, используя имя службы _minecraft и имя протокола _tcp, что означает, что если ваш файл зоны выглядит так...

arboristal.com.                 86400 IN A   <your IP address>
_minecraft._tcp.arboristal.com. 86400 IN SRV 10 20 25565 arboristal.com.
_minecraft._tcp.arboristal.com. 86400 IN SRV 10 40 25566 arboristal.com.
_minecraft._tcp.arboristal.com. 86400 IN SRV 10 40 25567 arboristal.com.

... тогда клиенты Minecraft, которые выполняют поиск записей SRV, как намечено в списке изменений, будут использовать порты 25566 и 25567 с предпочтением (40% времени каждый) через порт 25565 (20% времени). Мы можем предположить, что клиенты Minecraft, которые не находят и не уважают эти записи SRV, будут использовать порт 25565, как обычно.


Однако я бы сказал, что на самом деле было бы более "чистым и профессиональным" сделать это с помощью балансировщика нагрузки, такого как Nginx. (Я выбираю Nginx только потому, что раньше использовал его. Я не утверждаю, что он однозначно подходит для этой задачи. По какой-то причине это может быть даже плохой выбор.) Тогда вам не нужно связываться с вашим DNS и вы можете использовать тот же подход для балансировки нагрузки любой службы, а не только таких, как Minecraft, которые, как оказалось, сделали жесткую работу на стороне клиента, чтобы искать и уважать записи SRV. Чтобы сделать это способом Nginx, вы запустили Nginx на машине arboristal.com с чем-то вроде следующего в /etc/nginx/sites-enabled/arboristal.com:

upstream minecraft_servers {
    ip_hash;
    server 127.0.0.1:25566 weight=1;
    server 127.0.0.1:25567 weight=1;
    server 127.0.0.1:25568 weight=1;
}
server {
    listen 25565;
    proxy_pass minecraft_servers;
}

Здесь мы контролируем балансировку нагрузки на стороне сервера (через Nginx), поэтому нам больше не нужно беспокоиться о том, что плохо управляемые клиенты могут предпочесть порт 25565 для двух других портов. Фактически, теперь все клиенты будут разговаривать с arboristal.com:25565! Но слушатель в этом порту уже не является сервером Minecraft; это Nginx, тайно проксируя весь трафик на три других порта на одной машине.

Мы балансируем баланс на основе хэша IP-адреса клиента (ip_hash), поэтому, если клиент отключается и затем снова подключается, есть хороший шанс, что он будет подключен к тому же серверу Minecraft, на котором он был до. (Я не знаю, насколько это важно для Minecraft, или как клиенты с поддержкой SRV запрограммированы для решения этого аспекта.)

Обратите внимание, что мы использовали для запуска сервера Minecraft на порт 25565; Я переместил его на порт 25568, чтобы мы могли использовать порт 25565 для балансировки нагрузки.

Возможный недостаток метода Nginx заключается в том, что он делает Nginx узким местом в вашей системе. Если Nginx опустится, все три сервера станут недоступными. Если какая-то часть вашей системы не может идти в ногу с объемом трафика на этом единственном порту, 25565, все три сервера становятся flaky. И не говоря уже о том, что Nginx - это большая новая зависимость в вашей экосистеме. Возможно, вы не хотите вводить еще одну огромную часть программного обеспечения со сложным конфигурационным языком и огромной поверхностью атаки. Я могу это уважать.

Возможное преимущество метода Nginx заключается в том, что Nginx является узким местом в вашей системе! Вы можете применять глобальные политики через Nginx, например, отклонять пакеты выше определенного размера или отвечать статической веб-страницей на HTTP-соединения на порту 80. Вы также можете использовать брандмауэр с портами 25566, 25567 и 25568 из Интернета, так как теперь они следует говорить только Nginx по интерфейсу loopback. Это немного уменьшает вашу поверхность атаки.

Nginx также упрощает добавление новых серверов Minecraft в ваш сервер; теперь вы можете просто добавить строку server в свою конфигурацию и service nginx reload. Используя старый подход на основе портов, вам нужно будет добавить новую запись SRV с вашим провайдером DNS (и для клиентов может потребоваться до 86400 секунд, чтобы клиенты заметили это изменение), а затем также не забудьте отредактировать ваш брандмауэр (например, /etc/iptables.rules), чтобы разрешить внешний трафик через этот новый порт.

Nginx также освобождает вас от необходимости думать о DNS TTL при внесении изменений в ops. Предположим, вы решили разделить свои три сервера Minecraft на три разные физические машины с разными IP-адресами. Используя Nginx, вы можете сделать это полностью с помощью изменений конфигурации в строках server, и вы можете сохранить эти новые компьютеры в своем брандмауэре (подключен только к Nginx через частный интерфейс), и изменения вступят в силу немедленно, по определению. Принимая во внимание, что, используя записи SRV, вам придется переписать свой файл зоны на что-то вроде этого...

arboristal.com.                 86400 IN CNAME mc1.arboristal.com.
mc1.arboristal.com.             86400 IN A   <a new machine IP address>
mc2.arboristal.com.             86400 IN A   <a new machine IP address>
mc3.arboristal.com.             86400 IN A   <a new machine IP address>
_minecraft._tcp.arboristal.com. 86400 IN SRV 10 20 25565 mc1.arboristal.com.
_minecraft._tcp.arboristal.com. 86400 IN SRV 10 40 25565 mc2.arboristal.com.
_minecraft._tcp.arboristal.com. 86400 IN SRV 10 40 25565 mc3.arboristal.com.

... и вам придется оставить все три новые машины, выстукивающие за пределами вашего брандмауэра, чтобы они могли получать подключения из Интернета. И вам придется подождать до 86400 секунд, чтобы ваши клиенты могли заметить изменения, которые могут повлиять на сложность плана развертывания. И если вы выполняли какие-либо другие службы (например, HTTP-сервер) на arboristal.com, теперь вы должны перенести их на машину mc1.arboristal.com из-за того, как я сделал это CNAME. Я сделал это только в интересах тех гипотетических клиентов Minecraft, которые не уважают записи SRV и все равно будут пытаться подключиться к arboristal.com:25565.


Итак, я думаю, что оба пути (SRV-записи и балансировка нагрузки Nginx) разумны, и ваш выбор будет зависеть от ваших личных предпочтений. Я карикатурирую варианты как:

  • SRV-записи: "Мне просто нужно работать, я не хочу сложности. И я знаю и доверяю своему провайдеру DNS".
  • Nginx: "Я предвижу arboristal.com захват мира или, по крайней мере, переход к более крупной машине когда-нибудь. Я не боюсь изучать новый инструмент. Какой файл зоны?"