是否可以在 Linux hosts 文件中为同一个主机名使用多个 IP 地址?

是否可以在 Linux hosts 文件中为同一个主机名使用多个 IP 地址?

场景是我有一台既可以在本地访问(当我与该机器位于同一网络中时),又可以在公共网络上访问(当我在任何外部网络上时)。我希望我的 hosts 文件看起来像这样:

10.11.82.40 master.parallel.edu master
123.90.132.98 master.parallel.edu master

这样系统就会先尝试第一个 IP 地址,如果不行,再尝试下一个。这可行吗?可取吗?

答案1

通常 IP 地址解析是通过专用名称服务(如 dnsmasq、bind 等)完成的。

本地主机文件 /etc/hosts 通常仅在您有一个小型内部网络时使用 - 列出所有内部主机及其各自的 IP 地址;否则它应该只包含您的服务器的本地名称(和本地主机)。

您的问题的一个解决方案可能是在不同的子域中使用您的服务器名称,例如master.exernal.example.commaster.internal.example.com;现在要从外部网络寻址 master,您必须将 external.example.com 作为您的主要搜索域/etc/resolv.conf

# /etc/resolv.conf at external host
search external.example.com example.com
nameserver ns.example.com

# /etc/resolv.conf at internal host
search internal.example.com example.com
nameserver ns.example.com

(假设您的名称服务器为 ns.example.com)

在 .external. 和 .internal.example.com 的每个区域文件中,主机名指向相应的 IP 地址

# zonefile external network
$ORIGIN external.example.com.
master IN A 123.90.132.98

# zonefile internal network
$ORIGIN internal.example.com.
master IN A 10.11.82.40

这样,您可以curl http://master/在每个网络中使用,而不必担心 FullQualifiedDomainNames。

答案2

是的,一个主机名可以有多个 IP 地址,这一点一直都是可行的。请注意,虽然获取主机名仅返回一个映射(通常是 /etc/hosts 中找到的第一个映射),在现代 Unix 中,您可以使用获取地址信息浏览条目。应用程序应该- 但通常不会 - 在建立连接时遍历条目。但是...懒惰的程序员通常不会为这种情况编写代码。

这是一个古老的Unix 网络中的一个功能,但经常没有被程序员正确使用。

在我的工作中,我使用一个简单的包装器 C++ 类来在建立连接时遍历条目,因此使用很简单,并且我可以获得完整的行为。

相关内容