AWS 如何在实例上配置 169.254.169.254 地址?

AWS 如何在实例上配置 169.254.169.254 地址?

AWS 使用 169.254.169.254 作为链接本地地址,您可以使用它来提取有关实例的元数据,即:

卷曲http://169.254.169.254/latest/元数据/

这个 IP 在实例上是如何/在哪里配置的?如果我执行“ip route”,我可以看到它的路由。如果我执行“netcat -Cvz 169.254.169.254 80”,我可以获得连接。但是,如果我执行“netstat -ntlp”,我实际上看不到实例在任何地方监听。如果我尝试连接到另一个端口“netcat -Cvz 169.254.169.254 22”,它会失败。事实上,我有一个似乎在 0.0.0.0:80 上运行的冲突的 Apache 服务。所以看起来这个地址是指外部主机。它会指向虚拟机管理程序吗?

答案1

大多数 Linux 发行版已经创建了 Zeroconf 路由,这可能是亚马逊认为他们会“借用”该特定 IP 地址的原因。例如,如果您安装 CentOS 7,那么您的主以太网将“开箱即用”地添加一条路由:

/etc/sysconfig/network-scripts/ifup-eth

# Add Zeroconf route.
if [ -z "${NOZEROCONF}" -a "${ISALIAS}" = "no" -a "${REALDEVICE}" != "lo" ]; then
    ip route add 169.254.0.0/16 dev ${REALDEVICE} metric $((1000 + $(cat /sys/class/net/${REALDEVICE}/ifindex))) scope link
fi

毫无疑问,类似的东西也存在于 debian、ubuntu 等中……

您可能想知道,当您的本地接口地址都不在正确的子网中时,它是如何工作的,但实际上 Linux 并不太关心这一点。一些服务器仅使用 RFC3927 中的随机数生成本地 Zeroconf 地址,在这种情况下,它们将使用生成的地址。无论哪种方式都不会有太大区别,只要 169.254.169.254 处的东西愿意回答。

相关内容