Closed2

AzureVMのDNSリゾルバは168.63.129.16?127.0.0.53?

kuze_add9kuze_add9

AzureVMのDNSリゾルバとは

きっとここにたどり着いたかたは、
AzureのDNSリゾルバって「168.63.129.16」だよね?
おかしいな・・・と思った方を想定しています。

一言で申し上げると、AzureでのDNSリゾルバ(ドメイン名をIPアドレスに変換)は
168.63.129.16 です。

Azure の再帰的リゾルバーへのアクセスは、仮想 IP 168.63.129.16 を通じて提供されます。

https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances?tabs=redhat

https://qiita.com/l0x3el/items/b7477472ebefc2f54518

AzureVM ubuntu(無料枠)では127.0.0.53になる?

よく利用される、/etc/resolv.conf を見てみると、なぜか
127.0.0.53です。

$ cat /etc/resolv.conf |grep nameserver
nameserver 127.0.0.53

この通り、標準の168...ではなく127...のIPになっています。

なぜ127.0.0.53になのか

結論から言うと、「127.0.0.53」はubuntuのデフォルトのローカルDNSリゾルバです。
ローカルリゾルバから、systemd-resolved経由し、指定のDNSサーバーにアクセスするため、AzureVMの標準の場合は「168.63.129.16」でDNS解決を行います。

https://qiita.com/l0x3el/items/860c696891c9757935a9
↑Azureのケース
https://qiita.com/nasuvitz/items/b67100028f7245ebe9b9
↑AWSのケース

ubuntuでの実際のDNSリゾルバの確認方法

systemd-resolveを使う方法

Azure無料枠の24.04 LTS (Noble Numbat)では、コマンドなし。
systemd-resolveが利用できるかたは、こちらを使いましょう。

azureuser@test:~$ systemd-resolve --status
systemd-resolve: command not found

私の場合は、上記のようにコマンドがないと応答がありましたので、
もう一度resolv.confを確認してみます。

azureuser@test:~$ cat /etc/resolv.conf
抜粋
# Run "resolvectl status" to see details about the uplink DNS servers
# currently in use.

と書いてあるので、記載の通り resolvectl status を利用しましょう。

resolvectl statusを使う方法

azureuser@test:~$ resolvectl status
Global
         Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
  resolv.conf mode: stub

Link 2 (eth0)
    Current Scopes: DNS
         Protocols: +DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 168.63.129.16
       DNS Servers: 168.63.129.16
        DNS Domain: astcmee0pzxuxj3ngzuztpdyee.lx.internal.cloudapp.net

はい。こちらを見ると、DNS Serverは期待通りの168.63.129.16であることがわかります。

kuze_add9kuze_add9

そもそも168.63.129.16と127.0.0.53とは

  • 以下のように覚えるとよい。
    • 127.0.0.53 はubuntuの標準のDNS解決用のローカルIP
      • system-resolv やresolvectl statusに定義されている
No IP DNS 役割
1 168.63.129.16 - Azureリソースへの通信チャネルの使用を容易にするために使用されるパブリック IP アドレス
2 127.0.0.53 - ubuntuにおける標準のDNS解決の設定値(local)
3 127.0.0.1 localhost 一般的になlocalhostのマッピング
  • 1
    • このIPはAzureリソースからでないと利用不可です。
  • 2
    • ubuntu以外のLinuxディストリビューションやOSによっては異なる場合があります。
      • wsl2の場合は172.23.0.1だったりします。
    • AzureのVMの場合は以下のような流れです。
フロー
# サーバーの標準DNS名前解決先
/etc/resolv.conf
# Run "resolvectl status" to see details about the uplink DNS servers
# currently in use.
nameserver 127.0.0.53
↓ reolvectl statusへ転送
# 名前解決定義先
resolvectl status
...
Current DNS Server: 168.63.129.16
...

127.0.0.53で受信したものは最終的に168.63.129.16で解決される
  • 3
    • 多くのOSでlocalhost = 127.0.0.1にマッピングされていますが、設定によって変更することは可能であるため注意。
bash
# wsl2上でdigコマンドで127.0.0.1のドメイン名を確認
$ dig localhost 
; <<>> DiG 9.18.28-0ubuntu0.22.04.1-Ubuntu <<>> localhost
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30404
;; flags: qr rd ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;localhost.                     IN      A

;; ANSWER SECTION:
localhost.              0       IN      A       127.0.0.1
このスクラップは3ヶ月前にクローズされました