从我的主机(主机名)localhost
,我想exthost
通过互联网到达主机名(主机名)的外部主机。的公共IP地址exthost
由互联网提供商动态分配。
我想指的是exthost
始终使用其名称,并根据提供商分配的值(可能会发生变化)将该名称映射到其实际 IP 地址。
为此,我想使用/etc/hosts
正确更新与 相关的线路的 IP 地址值exthost
。
例如,/etc/hosts
Linux 中的行可能如下所示:
<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 更新文件。