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

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

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

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

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

После чтения онлайн это может быть возможно с iptables, bind и / или squid proxy.

2 ответа

Решение

Прежде всего, невозможно перенаправить порты на 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, поэтому знаю, что это выполнимо. Но я думаю, что для вашей установки стандартный прокси, вероятно, является лучшим выбором. Я думаю, что кальмар может сделать это. С другой стороны, я не думаю, что iptables и bind сильно вам помогут.

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

Другие вопросы по тегам