Это канонический вопрос о распознавании имени хоста и проксировании.
Я знаю, что некоторые протоколы знают имена хостов; то есть, когда я подключаюсь к HTTP-серверу в www.example.com
он знает, что я хочу www.example.com
служба HTTP, а не www.example.net
s, даже если они находятся на одном IP-адресе. Как я могу это сделать для протокола фу?
(Временное примечание: этот вопрос появляется в соответствии с это мета-обсуждение.)
Чтобы понять, что происходит, вам нужно немного узнать о DNS.
Когда клиент хочет подключиться к службе на данном узле, он ищет имя узла через свою локальную инфраструктуру DNS и получает в ответ IP-адрес. Затем он подключается к этому IP-адресу и запрашивает службу способом, предписанным procotol, для реализации которого он создан.
В некоторых случаях часть этого прокотола включает: второй отправка искомого имени хоста, которое в данном случае отправляется на сервер, а не в инфраструктуру DNS. В случае HTTP это было добавлено как часть HTTP / 1.1 в RFC 2616; в случае HTTPS это было реализовано как Индикация имени сервера (SNI) в RFC 4366; а в случае FTP это было добавлено HOST
команда, в RFC 7151 (но см. предостережение позже). Если такая вторая отправка не происходит, сервер не имеет возможности узнать, какое имя хоста клиент передал его локальному DNS, чтобы получить IP-адрес сервера.
Обратите внимание, что во всех случаях требовалось изменение протокола для выполнения этой второй отправки и, таким образом, чтобы взаимодействие между клиентом и сервером учитывало имя хоста. После изменения протокола пришлось обновить серверный код для его реализации. И, наконец, клиенты должны были быть обновлены, чтобы передавать новый протокол серверам. Этот последний шаг может быть особенно медленным; в случае SNI Internet Explorer в Windows XP никогда не реализовывал его, поэтому на протокол нельзя было положиться, пока все еще существовало значительное количество пользователей IE-on-XP, и потребовалось около десяти лет, чтобы достаточное количество из них отмирать и / или получать обновления, позволяющие надежно развернуть SNI.
Вот что нужно для того, чтобы протокол, не знающий имени хоста, знал имя хоста. это не простая установка флага или изменение конфигурации. У нас есть несколько ответов на конкретные протоколы, которые касаются состояния дел и возможных мер по смягчению последствий, в частности для этого протокола: для SSH (и, следовательно, также SFTP) и для FTP (что указывает на то, что HOST
поддержка FTP в настоящее время находится на фазе частичной поддержки, поэтому на нее пока нельзя полагаться).
Короткий ответ заключается в том, что если ваш протокол в настоящее время не реализует распознавание имени хоста с хорошей поддержкой как среди клиентов, так и среди серверов, забудьте об этом: это не то, что вы можете сделать.