Получение WAN IP: разница между HTTP и DNS
У меня всегда был псевдоним / функция для быстрого доступа к моему WAN IP из CLI:
$ type -a whatismyip
whatismyip is a function
whatismyip ()
{
curl ipv4.icanhazip.com
}
Этот псевдоним был создан много лет назад, возможно, с использованием другого домена, но всегда с использованием HTTP.
В последнее время я обнаружил, что все чаще и чаще упоминается однострочник, который находит ту же информацию через DNS.
Но так ли это на самом деле?
При написании этого я использую 4G-модем, и результаты отличаются между протоколами.
Еще более удивительно, они различаются также между DNS-серверами.
И как ни странно, ns1.google.com
, имеет разные результаты от 8.8.8.8
,
$ whatismyip
92.251.255.11
$ dig +short myip.opendns.com @resolver1.opendns.com
178.167.254.133
$ dig TXT +short o-o.myaddr.l.google.com @8.8.8.8
"74.125.73.77"
"edns0-client-subnet 178.167.255.120/32"
$ dig TXT +short o-o.myaddr.l.google.com @ns1.google.com
"178.167.255.120"
$ ifconfig | grep 'inet addr:'
inet addr:127.0.0.1 Mask:255.0.0.0
inet addr:192.168.42.125 Bcast:192.168.42.255 Mask:255.255.255.0
inet addr:10.47.206.109 Bcast:10.63.255.255 Mask:255.192.0.0
У кого-то есть дух объяснения этого в некоторых деталях?:)
~~РЕДАКТИРОВАТЬ: Просто чтобы уточнить, я в некоторой степени попробовал все вышеперечисленные команды, и они дают согласованные результаты. ~~
~~EDIT2: я изначально забыл опубликовать whatismyip
результаты, но ни один из DNS-запросов не соответствовал HTTP-запросу. Я пытаюсь воспроизвести это, но безуспешно. Я должен вернуться в это кафе:) ~~
EDIT3: я вернулся туда и получил новые данные. Последовательный, как в прошлый раз!
1 ответ
Два из DNS-запросов, которые вы сделали:
$ dig +short myip.opendns.com @resolver1.opendns.com
$ dig TXT +short o-o.myaddr.l.google.com @ns1.google.com
должны были вернуть тот же адрес: ваш внешний IP. Возможно, ваш внешний IP-адрес изменился между вашими запросами, и поэтому вы получили разные результаты. Это никоим образом не часть протокола DNS, а скорее хитрость, которая стала возможной благодаря тому, что DNS-серверы возвращают IP-адрес, с которого был создан запрос. Эти и некоторые другие хитрости DNS перечислены в этом посте.
С другой стороны:
$ dig TXT +short o-o.myaddr.l.google.com @8.8.8.8
не может дать вам IP-адрес клиента, потому что 8.8.8.8
не является официальным DNS-сервером o-o.myaddr.l.google.com
(ns1.google.com
есть), поэтому он не получает ваш IP напрямую, и ответ, который вы видите, является наилучшим приближением, которое допускается протоколом DNS (описание строка за строкой):
- IP-адрес преобразователя DNS, который связался с официальным сервером для
TXT
запись. - Если доступно, подсеть (edns-client-subnet) клиента (в данном случае вы), от имени которого запросчик DNS сделал запрос.
Для более подробной информации о edns-client-subnet
Вы можете прочитать эту статью.