※この記事は「AzureのIaaSはなぜ設定なしでインターネットにつながるのか①」の投稿をまとめていたときに
Azureとは関係ないUbuntuの設定でDNSの応答サーバが127.0.0.53#53だったことを発端に調査開始したUbunttu番外編のネタです。
ただ、この記事の最後に予想外の展開でAzureの世界へのループバックしますのでお楽しみに・・💛
関連記事
- AzureのVMはなぜ設定なしでネットにつながるのか①- Azureのデフォルトリゾルバ(168.63.129.16)について-
- AzureのVMはなぜ設定なしでネットにつながるのか(番外)-UbuntuでDNSのデフォ設定が127.0.0.53#53だった件-
Azure上のUbuntuVMで名前解決してみた結果
今回の環境はUbuntu18.04.1をMarketplaceから選択して作成し、
Azure上ではDHCPで勝手にDNSが設定された状態でdigコマンドを実行します。
一応バージョンは下記
user@testserver:~$ cat /etc/issue
Ubuntu 18.04.1 LTS \n \l
digをすると・・
user@testserver:~$ dig www.yahoo.co.jp
:中略
;; ANSWER SECTION:
www.yahoo.co.jp. 780 IN CNAME edge12.g.yimg.jp.
edge12.g.yimg.jp. 38 IN A 182.22.25.252
:中略
;; Query time: 343 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Wed Dec 05 05:12:03 UTC 2018
:中略
yahooのアドレスが解決できました
IaaSを立てて何も設定しなくてもすぐに名前解決ができることにモヤモヤしつつ
名前解決できた理由を調査していると・・
問い合わせを返しているサーバのアドレスが
127.0.0.53の53番ポート
って・・・
ん!?ナンダコレハ。
127.0.0.XXということはローカルに問い合わせしてるー
こうなったら設定みるべです。
##DNSリゾルブ設定も確認
古い人間なのでLinuxのリゾルバ設定っていえば/etc/resolv.confでしょということで
早速みてみると...
user@testserver:~$ cat /etc/resolv.conf
# This file is managed by man:systemd-resolved(8). Do not edit.
# This is a dynamic resolv.conf file for connecting local clients to the
# internal DNS stub resolver of systemd-resolved. This file lists all
# configured search domains.
# Run "systemd-resolve --status" to see details about the uplink DNS servers
# currently in use.
: 中略
nameserver 127.0.0.53
search xxxxxxxx.xx.internal.cloudapp.net
ん!?なんかdynamicとかDo not editとか書いてあるぞ・・
nameserverの記載はあったけどnameserver 127.0.0.53
って
digの結果と同じだけどーだけどー・・
コメントの内容を読むとNetworkManagerなど同様でUbuntuさんが勝手に設定しちゃうよんという内容
古き良き手動設定ではなく今どきな感じでsystemd-resolvedによって動的に生成されてしまってるようだ・・
#systemd-resolvedって何ですのん!?
現状のUbuntuのデフォルト設定とのことでなのでたくさん情報あり。
備忘録的に確認したWebをはりはりしてきます。
##systemd-resolvedとは
/etc/resolv.confのコメントに記載の通りsystemd-resolvedはスタブリソルバ
本業AzureなのでそこまでDeepDiveしないけれど機能違いでdnsmasqなどもある。
##127.0.0.53#53とは
systemd-resolvedで利用しているIPとポート。
##systemd-resolvedを利用しているかの確認方法
リゾルバはデフォルトではsystemd-resolvedだけでなくdnsmasqもあるので53番ポートのリッスン状況で
systemd-resolvedを利用しているかを確認
Ubuntu18.04のDNSリゾルバをsystemd-resolvedからdnsmasqに変更する
user@testserver:~$ sudo lsof -i:53
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd-r 718 systemd-resolve 12u IPv4 14576 0t0 UDP localhost:domain
systemd-r 718 systemd-resolve 13u IPv4 14577 0t0 TCP localhost:domain (LISTEN)
systemd-r
がリッスンしてるのでsystemd-resolvedがサービス提供していると確認できた。
実際のリゾルバの設定は/etc/resolv.confじゃなくてどこに記載されている?
下記をみながら確認してみる。
↑で/etc/resolv.confは動的に生成されているといいましたが、ファイル自体systemd配下へのリンクになっています。
user@testserver:~$ ls -l /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Nov 1 21:29 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
そこで実際に確認をするのがsystemd-resolve --status
コマンド。
実行してみると・・・
user@testserver:~$ systemd-resolve --status
Global
DNSSEC NTA: 10.in-addr.arpa
:中略
Link 2 (eth0)
Current Scopes: DNS
:中略
DNS Servers: 168.63.129.16
DNS Domain: xxxxxxxx.xx.internal.cloudapp.net(伏字)
DNSの設定内容発見!!
でも、/etc/resolv.confには記載がない・・
DNS設定の元ネタ(systemd-resolvedの設定)はどこに・・
動的に設定されるようになってからどこに設定されているのか謎なことがおおいですが、
下記サイトに手がかりになる情報が。
systemd-resolveが問い合わせるネームサーバーのIPアドレスは、「/run/systemd/resolve/resolv.conf」に記述されています。ここに記載されるIPアドレスは、DHCPサーバーから取得したものや、デスクトップ版ならGUIで設定したもの、サーバー版なら「/etc/netplan/」以下のYAMLファイルに記述したもの、そして「/etc/systemd/resolved.conf」で設定したものです。
/etc/systemd/resolved.conf
からみてみる
user@testserver:~$ cat /etc/systemd/resolved.conf
:#コメント中略
[Resolve]
#DNS=
#FallbackDNS=
#Domains=
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#Cache=yes
なにも設定入っていない・・
##お次はDHCP設定の確認
user@testserver:~$ cat /etc/network/interfaces
# ifupdown has been replaced by netplan(5) on this system. See
# /etc/netplan for current configuration.
# To re-enable ifupdown on this system, you can run:
# sudo apt install ifupdown
DHCPの設定はなし
##お次は/etc/netplan/
2つのファイルが!!
しかも今回Azureで構成しましたが、
cloudやAzureの文字が!これは何かありそう!
user@testserver:~$ ls -l /etc/netplan/
total 8
-rw-r--r-- 1 root root 473 Dec 4 11:43 50-cloud-init.yaml
-rw-r--r-- 1 root root 554 Nov 2 01:00 90-hotplug-azure.yaml
user@testserver:~$ cat /etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by
# the datasource. Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
version: 2
ethernets:
eth0:
dhcp4: true
match:
macaddress: 00:0d:3a:f2:49:48
set-name: eth0
user@testserver:~$ cat /etc/netplan/90-hotplug-azure.yaml
# This netplan yaml is delivered in Azure cloud images to support
# attaching and detaching nics after the instance first boot.
# Cloud-init otherwise handles initial boot network configuration in
# /etc/netplan/50-cloud-init.yaml
network:
version: 2
ethernets:
ephemeral:
dhcp4: true
match:
driver: hv_netvsc
name: '!eth0'
optional: true
hotpluggedeth0:
dhcp4: true
match:
driver: hv_netvsc
name: 'eth0'
dhcp4: true
!?
dhcpをなにがしか設定している様子!!!ハスハス💛
#次回は・・
Ubuntuの世界からAzureの世界へもどってAzureのVMはなぜ設定なしでインターネットにつながるのか②で
dhcp4: trueの記載があった/etc/netplan/*を深堀していきマス💛
###その他参考にさせていただいた記事
127.0.0.53:53 って 誰が 使ってるの?
関連記事