Aby zrozumieć, co się dzieje, musisz trochę dowiedzieć się o DNS.
Gdy klient chce połączyć się z usługą na danym hoście, wyszukuje nazwę hosta za pośrednictwem swojej lokalnej infrastruktury DNS i w odpowiedzi otrzymuje adres IP. Następnie łączy się z tym adresem IP i żąda usługi w sposób zalecany przez procotol, który został zbudowany do wdrożenia.
W niektórych przypadkach część tego procotolu obejmuje drugie wysłanie pierwotnie sprawdzonej nazwy hosta, która w tym przypadku jest wysyłana na serwer, a nie do infrastruktury DNS. W przypadku HTTP zostało to dodane jako część HTTP / 1.1 w RFC 2616 ; w przypadku HTTPS zostało to zaimplementowane jako SNI ( Server Name Indication ) w RFC 4366 ; w przypadku FTP zostało to dodane przez HOST
polecenie w RFC 7151 (ale patrz później zastrzeżenie). Jeśli takie drugie wysyłanie nie nastąpi, serwer nie może wiedzieć, jaką nazwę hosta podał klientowi na swój lokalny DNS, aby uzyskać adres IP serwera.
Należy pamiętać, że we wszystkich przypadkach wymagana była zmiana protokołu, aby wykonać to drugie wysyłanie, a tym samym uwidocznić nazwę hosta interakcji klient-serwer. Po zmianie protokołu konieczne było zaktualizowanie kodu serwera, aby go zaimplementować. I w końcu klienci musieli zostać zaktualizowani, aby przekazywać nowy protokół serwerom. Ten ostatni krok może być szczególnie powolny; w przypadku SNI program Internet Explorer w systemie Windows XP nigdy go nie wdrożył, więc nie można było polegać na tym protokole, podczas gdy nadal istniała znaczna liczba użytkowników IE-na-XP, i zajęło im to około dziesięciu lat zginąć i / lub uzyskać aktualizacje, które SNI można niezawodnie wdrożyć.
Tak właśnie jest potrzebne, aby protokół nieobsługujący nazwy hosta rozpoznawał nazwę hosta. To nie jest proste ustawienie flagi lub zmiana konfiguracji. Mamy kilka odpowiedzi specyficznych dla protokołu, które dotyczą stanu rzeczy i możliwych środków łagodzących, w szczególności dla tego protokołu: dla
SSH (a więc także SFTP) i dla
FTP (co wskazuje, że HOST
obsługa FTP jest obecnie niejednolita -faza wsparcia, więc nie można jeszcze na niej polegać).
Krótka odpowiedź brzmi: jeśli twój protokół nie implementuje obecnie rozpoznawania nazw hostów, z dobrym wsparciem zarówno dla klientów, jak i serwerów, zapomnij: nie jest to coś, co możesz zrobić.
baz
może zmienić tylko jego właściciel i jedyny implementator, to jedynym sposobem, aby uświadomić sobie nazwę hosta, jest odwołanie się do właściciela. Nie stanowi to interesującej odpowiedzi SF, a ponadto nie jest (moim zdaniem) tematem. „ Jak zaprojektować protokół rozpoznający nazwę hosta ” to zupełnie inne pytanie, a nie takie, które chciałbym zadać.