Возможный дубликат:
Как использовать DNS для перенаправления домена на определенный порт на моем сервере
В основном я хочу иметь что-то вроде этого:
name1.mydomain.com:1234 -> my.internal.ip.address: 10001
name2.mydomain.com:1234 -> my.internal.ip.address: 10002
name3.mydomain.com:1234 -> my.internal.ip.address: 10003
name4.mydomain.com:1234 -> my.internal.ip.address: 10004
name5.mydomain.com:1234 -> другой.internal.ip.address: 10001
name6.mydomain.com:1234 -> другой.internal.ip.address: 10002
Может быть на уровне маршрутизатора, на уровне внутреннего DNS-сервера или даже на каком-либо другом компьютере в локальной сети, на котором запущено какое-то приложение, которое просто передает трафик на соответствующий компьютер через соответствующий порт.
Дополнительные пояснения: это не HTTP-трафик, а наш собственный протокол (наше собственное клиент-серверное приложение, использующее удаленное взаимодействие в .NET).
Хорошо, давайте проясним здесь некоторую путаницу ...
Во-первых, в вашем вопросе нет явного требования, чтобы все эти имена разрешались в один и тот же IP-адрес, поэтому вы можете назначить блок адресов своему маршрутизатору, настроить записи DNS для обеспечения взаимно-однозначного соответствия сопоставление имени с IP-адресом, а затем использование DNAT (преобразование сетевых адресов назначения) для перенаправления трафика на внутренние устройства.
Я продолжу при условии, что у вас нет возможности бросить кучу IP-адресов на проблему.
В общем, для произвольного протокола, работающего внутри TCP или UDP (поскольку другие протоколы, работающие поверх IP, не обязательно имеют какое-либо понятие портов), вы не можете делать то, что хотите, потому что нет гарантии, что там любая информация внутри «потока» трафика, позволяющая выполнять такую маршрутизацию. Некоторые протоколы, пытаясь обойти эту проблему, делать встраивать информацию об имени в свой протокол (например, HTTP, с Host
заголовок), и для этих протоколов есть являются обычно прокси-серверы, которые получают запрос, определяют представленное имя и затем направляют запрос в соответствующее место. Некоторые из этих прокси были упомянуты в других ответах, и если их недостаточно, вы, несомненно, получите соответствующие ответы, если сообщите нам, какой протокол уровня 7 вы пытаетесь использовать для прокси.
Однако обширный большинство протоколов не идентифицируют их предполагаемое место назначения на основе имен, и для тех, у кого нет другого выбора, кроме как использовать IP-адреса для управления потоком трафика к различным внутренним конечным точкам.
РЕДАКТИРОВАТЬ: Если вы определяете свой собственный протокол, должна быть возможность встроить имя хоста, к которому вы подключаетесь, где-нибудь внутри него, и тогда вам просто нужно будет написать свой собственный прокси (возможно, как плагин для некоторых существующих часть программного обеспечения), чтобы принять эти запросы, сопоставить их с правильным сервером и передать их.
нет - вы не можете сделать это для общего протокола, хотя это можно сделать для определенных протоколов - например, http путем размещения обратного прокси-сервера, который принимает решение не только на основе IP-адреса / порта, но также - запрошенного имени домена.