Как перенаправить 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-адресе.

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

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

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

Minecraft server one (25565)

Майнкрафт сервер два (25566)

Майнкрафт сервер три (25567)

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

mc.arboristal.com

tekkit.arboristal.com

pvp.artboristal.com

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

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

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

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

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

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

2 ответов


можно использовать SRV records:

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

сервис: символическое имя желаемого сервиса.

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

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

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

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

приоритет: приоритет целевого хоста, меньшее значение означает более предпочтительный.

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

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

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

пример:

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

Так что я думаю, что вы ищете, чтобы добавить что-то вроде этого в свой DNS hosts file:

_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 и пропускной способностью/скоростью соединения), но это зависит от вас.


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


как говорилось в предыдущем ответе, клиент 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, все три сервера шелушение. И не говоря уже о том, что Nginx-это большая новая зависимость в вашей экосистеме. Возможно, вы не хотите вводить еще один массивный кусок программного обеспечения с сложный язык конфигурации и огромная поверхность атаки. Я могу это уважать.

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

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

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

arboristal.com.                 86400 IN CNAME mc1.arboristal.com.
mc1.arboristal.com.             86400 IN A   <a new machine's IP address>
mc2.arboristal.com.             86400 IN A   <a new machine's IP address>
mc3.arboristal.com.             86400 IN A   <a new machine's 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) разумны, и ваш выбор будет зависеть от ваших личных предпочтений. Я карикатурно нужным as:

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