@ArtemKoltsov

Как настроить соответствие между поддоменами и хостами в локальной сети?

Имеется локальная сеть, 1 белый статический IPv4, белый IPv6 на каждое устройство провайдер не предоставляет.
Подключать более 1 IPv4 тоже не дает. К внешнему IPv4 привязан 1 домен (example.online)
В локалке стоит сервер с гипервизором (ESXi 6.7). У сервера есть 2 сетевых карты. Расположены на нем различные
сервера/виртуалки: (NAS, локальный DNS, несколько Apache и так далее).
Роутер MikroTik HAP Series
Задача: любыми способами настроить связь в глобальной сети между поддоменами и виртуальными машинами в локальной сети по TCP/UDP. Знаю, что для HTTP реализуется банально, тем же NGINX или APACHE, но тут проблема немного другая. Есть несколько серверов на гипервизоре, от которых необходимо выбросить один и тот же порт, к примеру (1234), в глобалку. Переадресовывать порт на другой через роутер не вариант, так как при подключении используется системный (1234) и использовать другой нельзя. Если кратко, нужно настроить что-то вроде обратного прокси, чтобы при подключении по sub1.example.online:1234 мы попадали к примеру на 192.168.88.2:1234, а при sub2.example.online:1234 на 192.168.88.3:1234 соответственно. Еще раз упомяну, что протокол там не HTTР, и NGINX в роли обратного прокси здесь не поможет.
  • Вопрос задан
  • 172 просмотра
Решения вопроса 1
saboteur_kiev
@saboteur_kiev Куратор тега Компьютерные сети
software engineer
Если в заголовках не идет никакой информации, ты никак не сможешь разрулить, потому отправляя просто tcp пакет на удаленный host.com, этот самый host.com резолвится в айпи-адрес на уровне твоего клиента, и пакет идет на айпи-адрес. Сам айпи адрес, получив пакет, не знает на какой домен этот пакет должен был прийти. Он просто пришел на связку айпи-порт.

http разруливается потому, что в каждом http реквесте приходят заголовки, типа user agent и другие, в том числе и заголовок с урлом (в http1 это Host, в http2 вроде :authority), и по этому хедеру веб сервер может разрулить и перенаправить тебя на нужный сайт/айпи/порт.

Поэтому либо разноси по разным портам, либо юзай http, либо, если это какой-то свой кастомный протокол, добавлять в него информацию про поддомен, и придумать какой-то прокси, который будет эту инфу вытаскивать и роутить уже на конкретные сервера в локалке, но это прям мегавелосипед.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
ky0
@ky0
Миллиардер, филантроп, патологический лгун
Вариант ровно один - разнести всё-таки по разным портам. Маловероятно, что подходящий вам костыль - разруливать не по порту назначения, а по адресам источников.

В HTTP специально разработали виртуальные хосты и SNI, чтобы можно было делать то, что вы хотите - по-разному обрабатывать запросы на один и тот же порт в зависимости от заголовка. Если у вашего протокола нет аналогичной функциональности - то, что вы хотите, никак не сделать.
Ответ написан
Комментировать
@aleks-th
1. Нарисуйте схему сети которую хотите получить.
2. Карие сервисы будете использовать.

http - спокойно можно разрулить nginx -ом,
https://qna.habr.com/q/713281?ysclid=lk2y2p333k950...
вот точно такой же вопрос, с ответами.

Другие сервисы тоже можно разрулить, практически на все можно или прокси найти или промежуточный сервер сделать, все зависит от того что будете использовать.

В общем случае чтобы тупо по доменам делать маршрутизацию всего наверное не выйдет так как доменное имя выше таблицы маршрутизации, а адрес один, а маршрутизация идет по адресу, а не по именам.
Более подробно без нарисованой схемы сети, и какие серверы хотите развертывать навреное не получится подсказать.
Ответ написан
Комментировать
@fbi_suck
Эникей
Deep Packet Inspection ?!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы