Как перенаправить 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
захват мира или, по крайней мере, переезд на большую машину когда-нибудь. Я не боюсь изучать новый инструмент. Что такое файл зоны?"