Closed2
AzureVMのDNSリゾルバは168.63.129.16?127.0.0.53?
AzureVMのDNSリゾルバとは
きっとここにたどり着いたかたは、
AzureのDNSリゾルバって「168.63.129.16」だよね?
おかしいな・・・と思った方を想定しています。
一言で申し上げると、AzureでのDNSリゾルバ(ドメイン名をIPアドレスに変換)は
168.63.129.16
です。
Azure の再帰的リゾルバーへのアクセスは、仮想 IP 168.63.129.16 を通じて提供されます。
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解決を行います。
↑Azureのケース ↑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であることがわかります。
そもそも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
だったりします。
- wsl2の場合は
- AzureのVMの場合は以下のような流れです。
- ubuntu以外のLinuxディストリビューションやOSによっては異なる場合があります。
フロー
# サーバーの標準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
にマッピングされていますが、設定によって変更することは可能であるため注意。
- 多くのOSで
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ヶ月前にクローズされました