Как сделать протокол foo зависимым от имени хоста?

Это канонический вопрос о распознавании имени хоста и проксировании.

I знать, что некоторые протоколы знают имена хостов; то есть, когда я подключаюсь к HTTP-серверу по адресу www.example.com , он знает, что мне нужна HTTP-служба www.example.com , а не www.example. net , даже если они находятся на одном IP-адресе. Как я могу сделать это для протокола foo ?

(Временное примечание: этот вопрос появляется в соответствии с в этом метаобсуждении . )

10
задан 12 October 2017 в 10:34
1 ответ

Чтобы понять, что происходит, вам нужно немного узнать о DNS.

Когда клиент хочет подключиться к службе на данном хосте, он ищет имя хоста через свой локальный Инфраструктура DNS и получает IP-адрес в ответ. Затем он подключается к этому IP-адресу и запрашивает услугу способом предписывается протоколом, для реализации которого он построен.

В некоторых случаях часть этого протокола включает в себя секунду отправку имени хоста, которое изначально было up, который в этом случае отправляется на сервер, а не в инфраструктуру 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 в настоящее время находится на фазе частичной поддержки, и поэтому на нее пока нельзя полагаться).

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

14
ответ дан 2 December 2019 в 22:06

Теги

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