试图了解Linux / etc / hosts文件如何与本地和外部IP地址一起工作

假设我有一个外部IP为123.456.789.012,本地IP为192.168.0.1的Linux服务器。 如果它是/ etc / hosts文件,例如,

123.456.789.012 host2.mydomain.com 192.168.0.1 host2.mydomain.com 

当服务器上的应用程序生成使用host2.mydomain.com发送的stream量时,服务器如何知道是使用本地还是外部IP地址(因为同一主机名显示两个IP地址)?

或者,它是否需要比我在这里介绍的更多的东西来决定呢?

或者,它只是作为host2.mydomain.com发送出去,并让接收端处理它(如果是的话,如何确保用于本地networking的stream量确实stream向本地networking)?

来自主人(5):

For each host a single line should be present

所以为不同的IP复制相同的主机名是一个不行的; 行为不保证,如果你这样做。

但是,当我把

 1.2.3.4 testhost 5.6.7.8 testhost 

在/ etc / hosts中, getent hosts testhost返回两行。

请注意,这当然是非常具体的使用的操作系统和libc版本。

您的计算机computer1具有更新的主机文件:

 123.456.789.012 host2.mydomain.com 192.168.0.1 host2.mydomain.com 

从计算机1发送到host2.domain.com的任何stream量都需要parsing为IP地址,并且优先于所有其他来源(例如DNS)的位置是您的/ etc / hosts文件。 首先使用/ etc / hosts中的主机名匹配。 因此,在您的示例中,host2.mydomain.com将始终parsing为123.456.789.012。

它不。

您应该使用单独的内部/外部域名,或使用DNS根据networking位置提供不同的响应。

Linux手册页清楚地说“每个IP地址一行”,所以你在做什么是未定义的。 你可以得到文件中的第一个,最后一个或随机的。

在这种情况下使用ip更好,也许基于一些标准。

你将有一个本地DNS服务器和一个远程DNS服务器。 因此,在主机上的机器上,您只需要使用IP即可。