[identity profile] trinadzatij.livejournal.com posting in [community profile] useful_faq
Всем привет!

Обстоятельства таковы:
У меня есть свой домен, скажем, mydomain.ru. Этот домен располагается на моём домашнем компьютере с белым IP, скажем, 222.222.222.222. На этом же IP, но на порту 27001, крутится и отлично работает игровой сервер.
Сайт работает под управлением свежего Denwer, субдомены, если их не забывать прописывать у DNS-хостера, тоже отлично работают. Игровой сервер нормально откликается как на 222.222.222.222:27001, так и на mydomain.ru:27001.

А вопросы такие:
Как сделать так, чтобы по адресу, скажем, server.mydomain.ru откликалось не 222.222.222.222:80, а 222.222.222.222:27001? Попытка реализовать с помощью директивы redirect в .htaccess с треском провалилась, игровые клиенты такой редирект не признают. Попытка задать домен server.mydomain.ru с помощью записи DNS SRV(мне показалось, судя по RFC2782, что это то, что мне нужно) к успеху тоже не привели, запись у меня вышла такая:
*._TCP.mydomain.ru. 3600 IN SRV 0 0 server.mydomain.ru.
Может, я просто неправильно понял, что и куда писать в SRV? Или это вообще не то, куда надо смотреть? Но куда же тогда?

Date: 2014-01-16 09:34 pm (UTC)
From: [identity profile] tupitochka.livejournal.com
на роутере прописать

Date: 2014-01-16 10:20 pm (UTC)
From: [identity profile] stringerrus.livejournal.com
Пусть слушает порт 27001 и при запросе перекидывает на нужный ип.

Date: 2014-01-16 10:46 pm (UTC)
From: [identity profile] stringerrus.livejournal.com
В днс прописать пробовали?

Date: 2014-01-16 11:04 pm (UTC)
From: [identity profile] stringerrus.livejournal.com
В роутере нужно прописать маршрутизацию в таблице маршрутизации. Обращение к буквенному имени роутится на цифровой адрес по нужному порту. Ну не обьяснить так по другому не видя всей системы. А сервер назначения пускай слушает нужный порт.

Date: 2014-01-16 11:39 pm (UTC)
From: [identity profile] stringerrus.livejournal.com
Да. Схема простая. роутер - сервер назначения. В роутере обращение на server.mydomain.com отправляется на 222.222.222.222 через порт 27001. А сервер 222.222.222.222 слушает порт 27001.
Соответственно в итоге пакеты идут на нужный сервис который запущен на целевом сервере.
Не знаю, что вы к нему привязали, но это не суть важно.
Да и чего там гуглить. Зайдите в настройки роутера и создайте правило роутинга. Добавочное правило.
Не потрите имеющиеся настройки.

Date: 2014-01-16 11:57 pm (UTC)
From: [identity profile] stringerrus.livejournal.com
А в форвардинге что?

Date: 2014-01-17 12:20 am (UTC)
From: [identity profile] stringerrus.livejournal.com
А что на сервере назначения привязано к порту 27001 ?
Пробовали все пакеты для server.mydomain.com перекидывать на нужный сервер?

Date: 2014-01-16 11:43 pm (UTC)
From: [identity profile] stringerrus.livejournal.com
Это все есть в любом современном роутере. Форвардинг портов это тоже роутинг.
Там все просто, главное мысленно видеть всю схему.

Date: 2014-01-17 12:22 am (UTC)
From: [identity profile] tornader.livejournal.com
не понятна задача ..
порты и ДНС - разные вещи ..
игровой клиент же знает по какому порту обращаться?

как понимать фразу
> чтобы по адресу, скажем, server.mydomain.ru откликалось не 222.222.222.222, а 222.222.222.222:27001 ?
имеется ввиду "чтобы по адресу, скажем, server.mydomain.ru откликалось не 222.222.222.222:80, а 222.222.222.222:27001" ???

Date: 2014-01-17 09:11 am (UTC)
From: [identity profile] tornader.livejournal.com
т.е. клиент обращается www.domain.ru:XXX попадает на 222.222.222.222:YYY
клиент обращается sub.domain.ru:XXX попадает на 222.222.222.222:ZZZ ?
Edited Date: 2014-01-17 09:11 am (UTC)

Date: 2014-01-17 03:44 pm (UTC)
From: [identity profile] tornader.livejournal.com
в общем случае - это не решаемо.
ибо, скажем UDP запрос - не содержит данных о домене.
только если известен протокол более высокого уровня.
скажем на уровне веб-сервера это можно сделать.

Date: 2014-01-17 01:51 am (UTC)
From: [identity profile] http://users.livejournal.com/_steap_/
Немного не понятна суть проблемы. Так или иначе любой клиентский софт обращается к какому-то порту: указанному явно или по-умолчанию (тогда он обычно не отображается). Если 27001 стандартный игровой порт, то ничего не надо менять - лишь пробросить порт на роутере. Но это, судя по первой части, вы уже сделали.

Date: 2014-01-17 06:05 am (UTC)
From: [identity profile] http://users.livejournal.com/_steap_/
А без указания порта чисто теоретически клиент сможет подключиться? У игры есть дефолтный порт? Не к данному адресу, а к условному только установленному серверу с дефолтными настройками?
Edited Date: 2014-01-17 06:07 am (UTC)

Date: 2014-01-17 06:17 am (UTC)
From: [identity profile] http://users.livejournal.com/_steap_/
в общем я так понимаю, что главная суть проблемы в том, что есть n серваков на одной физической машине с разными портами. Вы хотите сделать, чтобы вместо подключения снаружи через myserver.ru:1234, myserver.ru:1235, myserver.ru:1236 подключались к server1.myserver.ru, server2.myserver.ru, server2.myserver.ru (или server1.myserver.ru:1234, server2.myserver.ru:1234, server2.myserver.ru:1234)?

Date: 2014-01-17 09:41 am (UTC)
From: [identity profile] tupitochka.livejournal.com
тогда следующий вопрос, у вас всего один внешний ip ?

Date: 2014-01-17 02:48 am (UTC)
From: [identity profile] jagghead.livejournal.com
Просто в днс пропишите что server.mydomain.ru имеет такой же адрес как и mydomain.ru, клиент будет обращаться по server.mydomain.ru и попадать на адрес 222.222.222.222, а номер порта клиент сам знает. Никакого дополнительного роутинга не нужно.

Date: 2014-01-17 06:30 am (UTC)
From: [identity profile] jagghead.livejournal.com
С помощью доменных имен это сделать малореально, мне думается они для этого не предназначены. Вы можете поставить в соответствие доменному имени айпи адрес и это всё. По этому адресу может быть множество сервисов по различным портам, номер порта нужно либо указать вручную, либо клиент сам его знает (как например веб браузеры, почтовые клиенты и тому подобное).

Date: 2014-01-17 07:18 am (UTC)
From: [identity profile] jagghead.livejournal.com
Почитал про SRV. Да, вы правы, запись SRV предназначена для таких целей. Только в качестве хоста в SRV записи нужно указать A-запись, CNAME не подойдет. Так что вам нужно в настройках днс указать A-запись server.mydomain.ru на адрес 222.222.222.222 и ваша SRV запись будет работать.

Date: 2014-01-17 08:55 am (UTC)
From: [identity profile] dna2.livejournal.com
Там выше какую-то чушь пишут (извините, люди, но не могу молчать).

Клиент всегда обращается к комбинации "адрес:порт". Хост, к которому идёт обращение, полностью определяется IP-адресом. Порт - не часть адреса никоим образом, это информация для хоста. В конце концов, в TCP/IP стеке целый пучок протоколов, и только два из них вообще оперируют понятием порта.

DNS и всё, что вокруг него, про порты ничего не знает (SRV - это другое).

Коротко: никак. Если вы хотите, чтобы на разных именах хоста на одном порту откликались разные сервисы, у вас каждому имени хоста должен соответствовать отдельный IP-адрес. Точка. То есть или вы заводите икс (по числу желаемых сервисов) отдельных железок с отдельными сетевыми интерфейсами, открытыми в интернет, или одну умную железку, которая умеет на одном физическом интерфейсе иметь несколько IP-адресов и раскидывать обращения к ним на разные хосты во внутренней сети. Икс различных IP-адресов понадобятся в любом случае.

И да, в случае http можно сделать что-то похожее на то, что вы хотите. Это свойство именно http: при коннекте на 222.222.222.222:80 первое, что делает http-клиент - сообщает средствами протокола серверу "я хотел попасть на mydomain.ru, я угадал?", и сервер (софтина, которая сидит на интерфейсе 222.222.222.222 и слушает TCP-порт 80) имеет физическую возможность это как-то обработать, например, сказать клиенту "ах, вас обманули, mydomain.ru находится на 111.111.111.111:81/vzhopu, идите скорее туда" или просто молча отдать нужное содержимое, не то, которое он отдаёт для доменного имени private-pictures.mydomain.ru.

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

Date: 2014-01-17 09:39 am (UTC)
From: [identity profile] stringerrus.livejournal.com
http://sysadmins.ru/