Назад | Перейти на главную страницу

Как перенаправить полные доменные имена на виртуальные машины?

Возможно ли, чтобы 2 доменных имени указывали на две разные виртуальные машины, работающие под Ubuntu Server? Моя дилемма в том, что у меня есть только 1 общедоступный IP-адрес.

Вот график того, чего я пытаюсь достичь:

                /---FQDN1--->VM1
External IP ----
                \---FQDN2--->VM2

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

После прочтения в Интернете это станет возможным с помощью iptables, bind и / или прокси-сервера squid.

Прежде всего, невозможно перенаправить порты на IP или транспортном уровне на разные внутренние машины в зависимости от домена, к которому обращается клиент. По этой причине все, что вы хотите сделать, должно выполняться на более высоком уровне сетевого стека. Но вы, возможно, уже читали это, поскольку спрашиваете о прокси.

Перемещаясь на один уровень вверх по сетевому стеку, вы обнаруживаете широкий спектр различных протоколов. Некоторые из них легко прокси на основе имени хоста, некоторые невозможно. Я знаю только четыре протокола, которые можно проксировать таким образом. От самых простых до самых сложных:

  • HTTP
  • HTTPS
  • DNS
  • SMTP

Стандартный HTTP-прокси может обрабатывать HTTP-протокол за вас. Он работает с любым клиентом, отправляющим заголовок хоста. Этот заголовок является необязательным в HTTP / 1.0 и обязательным в HTTP / 1.1. К настоящему времени HTTP / 1.1 исполнилось более десяти лет, и вы можете ожидать, что почти все клиенты будут его поддерживать.

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

Я рекомендую назначить каждому серверу общедоступный IPv6-адрес. Таким образом клиенты с поддержкой IPv6 не получают недостатков проксирования, и вы можете использовать IPv6-соединение от прокси-сервера к фактическому серверу. Это также означает, что прокси-сервер может фактически использовать поиск DNS для поиска адреса сервера, что может упростить задачу.

у меня есть реализовано такой прокси с поддержкой http и https, так что я знаю, что это выполнимо. Но я думаю, что для вашей настройки готовый прокси-сервер, вероятно, будет лучшим выбором. Думаю, Squid справится. С другой стороны, я не думаю, что iptables и bind вам сильно помогут.

Самый простой способ - использовать обратный прокси-сервер, который передает ваши запросы виртуальным машинам. (Я просто предполагаю, что мы говорим здесь о HTTP)