Как работает AWS настроить адрес 169.254.169.254 на экземпляре?

AWS использует 169.254.169.254 в качестве локального адреса ссылки, который можно использовать для получения метаданных об экземпляре, например:

curl 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. Похоже, этот адрес относится к внешнему хосту. Указывает ли он на гипервизор?

5
задан 8 June 2016 в 03:44
1 ответ

Большинство дистрибутивов Linux уже создают маршрут Zeroconf, поэтому, вероятно, Amazon решила, что они «займут» этот конкретный IP-адрес. Например, если вы устанавливаете CentOS 7, то «из коробки» ваш основной Ethernet получит добавленный маршрут:

/ 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 не слишком заботится об этом. Некоторые серверы генерируют локальный адрес Zeroconf, просто используя случайные числа в соответствии с RFC3927, и в этом случае они будут использовать сгенерированный адрес. В любом случае особой разницы не будет, при условии, что сайт по адресу 169.254.169.254 с радостью ответит.

3
ответ дан 3 December 2019 в 01:49

Теги

Похожие вопросы