Рейтинг:0

Почему IP-адрес нельзя использовать напрямую, когда IP-адрес, сопоставленный с именем хоста в качестве записи хоста, работает?

флаг ru

Мне дали API для сервиса, через который я пытался отправить почтовое сообщение с сервера А, но соединение не строится. Затем я пингую доменное имя в API. Это не работает, поэтому я подумал, что доменное имя не было публично сопоставлено с веб-сайтом.

Чтобы найти IP-адрес веб-сайта, я пропинговал его в интрасети от моего клиента B, а затем использовал IP-адрес, указанный в сообщении, для замены доменного имени и повторил попытку публикации на сервере A. Это не сработало. Затем я сопоставил IP с доменным именем в /и т.д./хосты в качестве записи хоста на сервере A и использовал доменное имя в качестве почтового uri, и это сработало.

Интересно, почему это не сработало, когда я заменил доменное имя на IP-адрес в API? Это работает только при добавлении записи хоста?

Я новичок в serverfault, поэтому, если этот вопрос повторяется (я думаю, что это вполне возможно), дайте мне знать. Спасибо.

Patrick Mevzek avatar
флаг cn
`ping` почти никогда не является подходящим инструментом для устранения неполадок. Если вам просто нужно разрешить имя, вы можете использовать любой DNS-клиент, такой как `dig`, `host` или `nslookup`.
dave_thompson_085 avatar
флаг jp
ЕСЛИ вы используете `curl`, вы можете вместо записи `/etc/hosts` (или других действий с DNS, таких как dnsmasq) использовать параметр командной строки `--resolve`; см. справочную страницу. И все, что построено на libcurl, может иметь подобную опцию.
Рейтинг:0
флаг in

Многие веб-серверы используют имя хоста, отправленное в запросе, чтобы определить, какой веб-сайт следует использовать. Это позволяет использовать несколько сайтов на одном IP-адресе.

Так что да, часто требуется правильное имя хоста.

Patrick Mevzek avatar
флаг cn
Даже «хуже»: если HTTPS, имя хоста должно быть известно даже до HTTP-трафика, то есть с расширением SNI внутри рукопожатия TLS. Сервер должен получить эту информацию от клиента, чтобы иметь возможность предоставить соответствующий сертификат, без которого HTTPS не будет таким полезным.
флаг in
@PatrickMevzek верно, браузер всегда отправляет имя хоста (если браузер поддерживает SNI и запрашивается сервером), но отправленное имя хоста будет тогда IP-адресом.
Patrick Mevzek avatar
флаг cn
«но отправленное имя хоста будет тогда IP-адресом». Нет, это не будет, `N` в `SNI` означает имя ... См. § 3 RFC6066, там ясно указано, что расширение должно быть используется для имен хостов, ничего больше. В нем говорится: «Буквальные адреса IPv4 и IPv6 не разрешены в «HostName».»
Patrick Mevzek avatar
флаг cn
И это по простой причине: сервер уже должен знать, по какому IP-адресу к нему обращался клиент, ему не нужно, чтобы клиент отправлял эту информацию в другом слое. С другой стороны, сервер не может знать, какое разрешение имени было выполнено для достижения этого конкретного IP-адреса, поэтому клиент должен отправить **имя**, которое было в начале процесса, в расширении TLS в начале рукопожатия для сервер, чтобы сделать соответствующий выбор на основе этого, например, какой сертификат представить.
флаг in
Спасибо, сегодня я узнал кое-что новое о SNI. Стандартный заголовок HTTP/1.1 по-прежнему применяется к хосту, на который отправляется хостовая часть URL-адреса. Таким образом, вы все еще можете иметь vhosts на IP (не имеет особого смысла, но возможно)
Patrick Mevzek avatar
флаг cn
Я никогда не говорил, что вы не можете иметь виртуальный хостинг на IP-адресах, конечно, вы можете, см. https://1.1.1.1/ для известного примера с совершенно действительным сертификатом. Однако это крайние случаи (как и сертификаты для IP-адресов, по крайней мере, в мире HTTP, они гораздо более «мейнстримны» в других местах, например RPKI), и в целом URL-адреса HTTPS с IP-адресами вместо имен хостов являются плохой идеей / признаком проблема где-то (например, позже нет сертификата или неверный сертификат, который должен помешать клиенту подключиться).

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.