Получение 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 (описание строка за строкой):

  1. IP-адрес преобразователя DNS, который связался с официальным сервером для TXT запись.
  2. Если доступно, подсеть (edns-client-subnet) клиента (в данном случае вы), от имени которого запросчик DNS сделал запрос.

Для более подробной информации о edns-client-subnet Вы можете прочитать эту статью.

Другие вопросы по тегам