我的场景
我的相关条目/etc/hosts
(我按照您在此处看到的相同顺序编写它们)
172.22.5.107 www.wordpress-rend-adri.com
192.168.1.116 www.wordpress-rend-adri.com
我在家里和学校使用笔记本电脑,因此我总是处理 2 个地址空间:
- 192.168.1.0/24
- 172.22.0.0/16
所以我有这些条目,因为我有一个带有 Wordpress 的虚拟机来做练习。这样,无论我在哪里,我都可以访问我的 Wordpress(只要 DHCP 显然在两个网络中为我提供了相同的 IP)
我的问题
知道了这一切,现在我可以告诉你,我刚刚在我的配置中进行了该配置,/etc/hosts
因为一位老师对我说,我只能有 1 条记录用于指向单个 IP 的名称。他对我说,如果我有一个同名的双寄存器,它总是取第一个,然后停止。但他也对我说我应该试试,所以我做了。
现实情况是,例如在我家(我正在使用的地方192.168.1.0/24
),即使第一条记录是针对其他 IP 的,我仍然可以建立连接,并且当我 ping 名称时,正确的 IP 会回答我。是的,我确实试图完全确定这一点,我在一个隐身的 Firefox 窗口中做了,我还尝试评论我家的 IP 行以检查发生了什么。
然后,我尝试交换这两个记录。我的意思是,我只是这样做了:
192.168.1.116 www.wordpress-rend-adri.com
172.22.5.107 www.wordpress-rend-adri.com
所以在这种情况下,显然它仍然有效。
而当我上学时,使用其他地址空间时也发生了同样的情况。
所以...
_/etc/hosts
¿ 在进行最终连接之前,firefox、ping
二进制文件或您使用的任何东西是否会进行名称解析的内部过程以检查实际有效的条目是什么?
我问这个是因为例如使用ping
,您刚开始从有效的 IP 获得答案。您不会遇到连接失败的情况,例如尝试连接到其他以前的 IP
考虑当你有这些条目时
/etc/hosts
,过去,查找
www.wordpress-rend-adri.com
将(最多)只返回匹配的第一行中的条目,即172.22.5.107
在这种情况下。在(某些)现代 Linux 发行版上发生的情况是扫描整个
/etc/hosts
文件以查找匹配项,您不仅会172.22.5.107
得到192.168.1.116
.这让我很惊讶。
(事实上,我已经写了一个完整的答案来证实你老师的观点,只是当我实际测试它时发现它不再正确。)
www.wordpress-rend-adri.com
将返回172.22.5.107
并192.168.1.116
172.22.5.107
将返回www.wordpress-rend-adri.com
192.168.1.116
将返回www.wordpress-rend-adri.com
演示,假设这两条记录在本地
/etc/hosts
我推测您可以在任一上下文中使用任一地址的原因是您的 Web 浏览器等正确地尝试了集合中的每个可能的 IP 地址(即
172.22.5.107
和192.168.1.116
),直到它获得成功的连接。我在我的 debian/wsl 上做了一些测试
因此
ping
选择了放置在两个工作 WAN IP 之间的本地 IP。第二次测试:
第三次测试:
第四次测试:
所以我的结论是
ping
不要一个接一个地尝试IP。它有利于路由器,本地IP而不是WAN IP。更新 :
上面的 IP 选择通过以下 python 命令确认: