Ram*_*esh 5 domain-name-system
我正在阅读有关 DNS 一般如何工作的信息,并且偶然发现了这个问题和答案。
根据接受的答案,第二步是当 DNS 与 ISP 服务器通信以获取主机名的 IP 地址时。
DNS:“好吧……等一下,我去问问ISP服务器。好吧,看起来像157.166.226.25。”
我碰巧读到这个答案,上面写着,
运行浏览器的客户端使用 UDP 协议向 DNS 服务器询问 A 记录
www.pippo.it在客户端,操作系统负责解析部分并与浏览器对话,浏览器从不直接与 DNS 对话,而是通过操作系统调用
gethostbyname()
,在 Linux 上,解析优先级由/etc/nsswitch.conf
那么,如果我使用防火墙规则阻止所有到我机器中端口 53 的出站流量,这是否意味着我根本无法解析任何主机名?
我相信情况不应该是这样,这就是为什么我们有/etc/nsswitch.conf文件的原因(在 Linux 机器上,尽管其他操作系统也可能存在类似的概念)。该文件了解hosts其中主机名和数字被gethostbyname()相关功能使用的数据库。
有人可以澄清我的理解是正确的还是误解了?
bri*_*ist 17
关于 HTTP 需要记住的一点是,浏览器和 Web 服务器之间的所有通信都是通过 TCP 进行的,TCP 使用 IP 地址。您所说的名称解析首先发生,因为没有 IP 地址,就无法进行通信。
因此 Internet 工作正常,您甚至可以在没有 DNS 的情况下访问网站,即使您的hosts文件中没有名称,只要您知道 IP 地址。
现在,与我刚才所说的有点矛盾,因为您的问题是专门针对 HTTP 的,事实是,如果您尝试通过 IP 地址直接访问某些网站,则它们将无法工作。
这可能有多种原因,但最常见的原因之一是 Web 服务器实际上在单个 IP 上托管许多不同的网站,然后根据请求的主机名区分对这些网站的请求。
这是通过添加Host:标头作为 HTTP 请求的一部分完成的。浏览器在请求过程中使用你在地址栏中给出的名字来填写这个header,但严格来说这与DNS无关。
通过 IP 浏览可能有问题的另一种方式是在 HTTPS 站点上,因为证书是颁发给某些主机名的。这不会阻止它们工作,但浏览器无法验证证书,因为名称不匹配,您会收到警告。
严格来说,主机名解析过程超出了 HTTP 规范的范围。但实际上,它几乎总是通过 UDP 端口 53 使用 DNS 来完成。
在特殊情况下,可以使用备用名称解析机制:
Hosts文件,然后是 DNS,然后进行 NetBIOS 名称解析。.local地址。/etc/nsswitch.conf来确定主机名解析顺序。替代机制包括LDAP和 NIS。系统管理员通常选择在防火墙处阻止 DNS,以强制组织内的所有客户端使用本地 DNS 服务器。这有助于控制 DNS 缓存中毒攻击的风险。
nsswitch 的默认设置将首先查找 /etc/hosts(文件),然后尝试 dns。因此,如果主机在 /etc/hosts 中列出并且您阻止了端口 53 udp/tcp 那么它仍然会获得正确的 IP 并正常工作。如果主机不在 /etc/hosts 中,您将无法获得 IP
| 归档时间: |
|
| 查看次数: |
3136 次 |
| 最近记录: |