Проверить IPv4 и IPv6 по отдельности

На dual-stack хосте внешних адресов два, и геолокация у них может отличаться — вплоть до разных стран

curl -4 -s https://ifconfig.co
curl -6 -s https://ifconfig.co
curl -s https://ipv4.icanhazip.com
curl -s https://ipv6.icanhazip.com

Флаги работают, только если у сервиса есть обе записи. Если AAAA нет, -6 вернёт пустую строку — и непонятно, дело в сервисе или в вашей сети. Так молча проваливаются api.ipify.org и ipinfo.io: у них только A. Отдельные хосты (ipv4. / ipv6., v4. / v6.ident.me, api-ipv4. / api-ipv6.ip.sb/ip) дают однозначный ответ — сервис физически доступен по одному семейству.

Зачем разделять: на dual-stack машине это два разных адреса, и геолокация у них не обязана совпадать. Реальный пример — VPS, у которого IPv4 определяется как Латвия, а IPv6 того же провайдера и той же автономной системы — как Болгария. Одинаковый ASN одинаковую страну не гарантирует, гео-базы ведут префиксы независимо.

Отсюда практическое следствие: если сервис ходит наружу по IPv6 (а на dual-stack многие клиенты предпочитают именно его), удалённая сторона видит не тот адрес и не ту страну, которые вы ожидаете, глядя на «IP сервера». Проверять надо то семейство, которым реально устанавливается соединение.

curl -4 -s https://ifconfig.co/json
curl -4 -s "http://ip-api.com/json?fields=countryCode,city,isp,as,query"

Через прокси флаги значат не то

curl -6 -s -x http://proxy:3128 https://ifconfig.co   # проверяет путь ДО прокси
curl    -s -x http://proxy:3128 https://ipv6.icanhazip.com   # проверяет выход прокси

С -x флаг семейства управляет соединением «клиент → прокси». Каким протоколом прокси пойдёт дальше, он не задаёт вовсе. Поэтому -6 через прокси может упасть просто потому, что до самого прокси нет IPv6-маршрута — и это ничего не говорит о его точке выхода.

Чтобы проверить именно выход, семейство задают именем цели: запрос на ipv6.icanhazip.com через прокси удастся ровно тогда, когда прокси умеет наружу по IPv6.