在 /etc/hosts 中使用对文件的引用而不是 IP

在 /etc/hosts 中使用对文件的引用而不是 IP

从我的主机(主机名)localhost,我想exthost通过互联网到达主机名(主机名)的外部主机。的公共IP地址exthost由互联网提供商动态分配。

我想指的是exthost始终使用其名称,并根据提供商分配的值(可能会发生变化)将该名称映射到其实际 IP 地址。

为此,我想使用/etc/hosts正确更新与 相关的线路的 IP 地址值exthost

例如,/etc/hostsLinux 中的行可能如下所示:

<ip_address>    exthost.domain     exthost

我使用的是 Ubuntu 18.04,但这肯定也适用于其他发行版/类 Unix 系统。

是否可以做到这一点,避免仅为此目的设置 DNS(以及动态 DNS,有时不是免费服务)?

例如,是否可以使用对<ip_address>仅包含所需 IP 作为字符串的另一个文件的引用,而不是显式的?这样用户就可以根据IP值来访问和修改该文件,IP值可能会有所不同。


笔记:这个问题好像情况不太一样,因为是关于本地机器的。我指的是外部主机。

答案1

Linux 上不存在用户定义的主机文件,您可以使用 HOSTALIASES 来处理规范名称。

如果我正确地回答了您的问题,您可以使用动态 DNS 服务(例如 DynDNS 或 No-IP)来始终拥有 ISP 分配的正确公共 IP 地址。

然后,您可以使用 HOSTSALIASES 映射exthost到动态 DNS 服务提供的 FQDN 名称。

导出 HOSTALIASES 值export HOSTALIASES=~/.hosts,然后将以下行添加到~/.hosts文件中,以将 exthost 映射到 no-ip 提供的 FDQN 名称。

exthost yourname.no-ip.org

HOSTALIASES 仅适用于规范名称,不适用于 IP,这就是为什么您应该使用某些动态 DNS 服务来获取 FQDN 名称,但您可以只使用该 FQDN,并完全跳过 HOSTALIASES。

/etc/hosts我认为如果不设置一些 DNS 服务,或者在远程站点上编写一些脚本来始终向您发送他们的公共 IP,然后在本地文件中更改该 IP,您就无法做到这一点。

另一种选择是授予用户更改权限或在 chroot 环境中设置该用户,并在 chroot 环境中/etc/hosts为他提供自己的文件。/etc/hosts

答案2

我的/etc/hosts:

127.0.0.1   localhost
127.0.1.1   *some-host*

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

所以说:

sudo nano /etc/hosts

添加一行:

IPOFEXTHOST   exthost

其中 IPOFEXTHOST 是 exthost 的已知 IP。

从那时起,您可以编写一个脚本来通过替换包含 exthost 的行来更新文件。不管怎样,其中一台计算机必须有 dyndns 或 no-ip 更新程序。这样您就可以直接知道 exthost 的网址,或者 exthost 可以知道您另一台计算机的地址来反向 ssh 并使用其卷曲的公共 IP 更新文件。

相关内容