/etc/hosts 中的 IP 地址总是会失败?

/etc/hosts 中的 IP 地址总是会失败?

我知道您可以添加主机名,/etc/hosts这样解析它们实际上并不执行 DNS 查找。这将是一行,例如

123.45.67.89 myhostname

我的问题是,我可以将第一部分(IP 地址)设置为多少,以便任何尝试连接到此部分的操作myhostname都将始终失败?

编辑:我所说的失败是指如果可能的话,明确的 ICMP 拒绝。我不想等待超时。

原因

有时我有一个虚拟机实例在某处运行。云服务器在每次启动时都会设置不同的IP,并且我不支付任何公共域名的费用。我有一个启动实例并添加一行的脚本,/etc/hosts以便我可以使用 轻松 ssh 或打开到该主机的浏览器选项卡myhostname

这一切都很好,但我也想消除当实例被终止并尝试连接时此条目myhostname 不是进行任何 DNS 查找,或者(更糟糕)尝试连接到我目前所在的任何本地域上的某个同名主机。

答案1

因此,您需要一个 IP 地址,a) 保证不与任何远程内容匹配,b) 拒绝所有内容。

做一个:

iptables -I INPUT 1 -i lo -d 127.66.66.66 -p tcp -j REJECT --reject-with tcp-reset
iptables -I INPUT 2 -i lo -d 127.66.66.66 -j REJECT

(或者您选择的 iptables 防火墙管理工具的等效工具。)

现在,所有到 127.66.66.66 的 TCP 连接都会收到 TCP RST 数据包作为响应,而其他所有连接都会收到 ICMP 拒绝。 (根据我的经验,TCP RST 通常会比 ICMP 更快地拒绝 TCP 连接。)

IP地址127.66.66.66在环回段内,因此保证不会干扰任何非本地的东西。

答案2

我找不到强制hosts“未找到”响应的方法,我认为您需要拥有自己的 DNS 服务器。但你还可以做一些其他的事情...

  • 使用 IP 地址127.0.0.1(或 中的任何内容127/8)使名称指向您的本地主机。对于您未运行的服务,您的系统会回复 TCP 重置或错误或丢弃数据包,但如果您在本地运行 SSH,则它不会很好地工作。

  • 使用任何私人使用地址,例如10/8.根据您的配置,您的系统可能会尝试向它们发送数据包,但您的 ISP 应在数据包到达很远之前将其丢弃。或者您可以让防火墙在它们离开您的计算机之前拒绝它们。

  • 使用实际上是无效地址的地址。0.0.0.1(或0/8except中的任何内容0.0.0.0)似乎在 Linux 和 Windows 中的连接上产生错误。0.0.0.0例如,DHCP 客户端在知道自己的地址之前就使用它们,并且似乎直接指向 Linux 上的本地主机。 (整个块实际上被保留来表示“该网络上的该主机”。)

当然,所有这些基本上都是谎言,并不是最干净的解决方案。

相关内容