У меня есть доменное имя, скажем, foo.com. У меня есть сервер с общедоступным IP-адресом (Server-A). У меня также есть много серверов (Server-B, Server-C, Server-D и т. Д.), Которые все подключены к частной сети вместе с Server-A. Серверы B, C, D не имеют общедоступного IP-адреса, но у них есть свои внутренние частные IP-адреса. Очевидно, я не могу получить доступ к Server-B, C, D из Интернета.
Мне нужна установка, в которой foo.com должен указывать на Server-A, но я должен иметь доступ к внутренним серверам с помощью поддомена. Таким образом, b.intern.foo.com должен указывать на Server-B, c.intern.foo.com должен указывать на Server-C, d.intern.foo.com должен указывать на Server-C и так далее.
Под словом «указать на» я подразумеваю, что b.intern.foo.com должен позволять мне получать доступ ко всем портам Server-B, а не только к HTTP-порту (в противном случае я бы просто использовал Nginx). Это означает, что если я использую ssh на b.intern.foo.com, я должен попасть на SSH-сервер, работающий на Server-B. Если я открою b.intern.foo.com в своем браузере, он должен поразить Nginx, работающий на сервере B, и так далее. Как правило, все порты сервера B должны быть доступны для b.intern.foo.com из Интернета.
Как я могу этого добиться.
Вы запрашиваете полностью независимый от протокола прокси, который имеет что-то вроде заголовков хоста HTTP, которых (AFAIK) не существует.
Единственное, что похоже на это, - это решение NAT / PAT, которое потребует столько общедоступных IP-адресов, сколько просто использование общедоступных IP-адресов в первую очередь.
Вы не можете делать то, что хотите, с одним публичным IP-адресом. Находясь за пределами вашей сети, даже если вы заставляете DNS возвращать частный IP-адрес внутреннего узла, общедоступный Интернет не будет маршрутизировать его за вас. Если вы сделаете внешний IP-адрес внутренних узлов таким же, как и сервер-A, то сервер A будет думать, что пакеты предназначены для него.