External IP
Когда работаем с серверами, поднятыми в облачной инфраструктуре, машины часто имеют статический IP-адрес, но полученный случайным образом из пула адресов. То есть заранее мы можем и не знать какой адрес получит наш сервера. Есть случаи, когда нам требуется знать реальный IP адрес, с которым машина выходит в сеть, например при автоматизации развёртывания firewall-а, чтобы не закрывать самому себе доступ к удалённому ресурсу, да и много когда ещё.
Каждый раз узнавать и приписывать для каждой машины в скриптах такой адрес - не вариант.
Самый простой, способ - curl ifconfig.co
. В ответ придёт наш внешний IP-адрес.
Однако последнее время ifconfig.co
стал работать ненадёжно - вылетать, возвращая HTML с ошибками в ответ. Более надёжный вариант - воспользоваться внешним resolver-ом, который и подскажет нам реальный адрес.
Для этих целей в Linux существует команда Dig (Domain Information Groper) - инструмент для работы с DNS серверами.
Запрос внешнего IP-адреса выглядит так:
dig +short myip.opendns.com @resolver1.opendns.com
В ответ вернётся наш IP-адрес. В качестве resolver-a можно использовать и Google DNS.
Эту команду можно включать в скрипты. Например, создать переменные среды для включения куда-нибудь (Docker run, etc.):
echo TRUSTED_IPS=11.22.33.44,$(dig +short myip.opendns.com @resolver1.opendns.com) > /tmp/tusted_ips
Ещё немного полезной информации: https://superuser.com/questions/812664/nslookup-command-line-with-a-record-ip-as-sole-output