AWS использует 169.254.169.254 в качестве локального адреса ссылки, который можно использовать для получения метаданных об экземпляре, например:
завиток http://169.254.169.254/latest/meta-data/
Как / где этот IP настроен на экземпляре? Я могу увидеть для него маршрут, если сделаю «ip route». И если я "netcat -Cvz 169.254.169.254 80", я могу получить соединение. Однако на самом деле я нигде не вижу, чтобы экземпляр слушал, если я выполняю команду «netstat -ntlp». Если я попытаюсь подключиться к другому порту, «netcat -Cvz 169.254.169.254 22», это не удастся. Фактически, у меня есть что-то вроде конфликтующей службы Apache, работающей на 0.0.0.0:80. Похоже, этот адрес относится к внешнему хосту. Будет ли он указывать на гипервизор?
Большинство дистрибутивов Linux уже создают маршрут Zeroconf, вероятно, поэтому Amazon решила, что они «займут» этот конкретный IP-адрес. Например, если вы устанавливаете CentOS 7, то «из коробки» ваш основной Ethernet получит добавленный маршрут:
/ и т. д. / sysconfig / сетевые сценарии / 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 не слишком заботится об этом. Некоторые серверы генерируют локальный адрес Zeroconf, просто используя случайные числа в соответствии с RFC3927, и в этом случае они будут использовать сгенерированный адрес. В любом случае особой разницы не будет, при условии, что сайт по адресу 169.254.169.254 с радостью ответит.