👏

[SadServers] 解説 "Jakarta": it's always DNS.

2022/12/28に公開

"Salta": "Jakarta": it's always DNS.

SadServersの "Jakarta": it's always DNS. の解説です。

SadServers って何? って人は、 SadServers解説 を見てください。
一言でいうと、LeetCode (コーディング問題集) の Linuxサーバ設定版のようなものです。

問題

Scenario: "Jakarta": it's always DNS.

Level: Hard

Description: Can't ping google.com. It returns ping: google.com: Name or service not known. Expected is being able to resolve the hostname. (Note: currently the VMs can't ping outside so there's no automated check for the solution).

google.comにpingを打てない。ping: google.comを返します。名前またはサービスが不明です。期待されるのは、ホスト名を解決できることです。(注:現在VMは外部にpingを打てないので、解決のための自動チェックができない)。

Test: ping google.com should return something like PING google.com (172.217.2.46) 56(84) bytes of data.

Time to Solve: 20 minutes.

OS: Ubuntu 22.04 LTS

解説

早速、pingをします。

ubuntu@ip-172-31-42-233:/$ ping google.com
ping: google.com: Name or service not known

問題どおり、名前解決ができていません。 つまり、ドメイン名(google.com) をIPアドレス(172.217.2.46)に変換することができないとうことです。

digコマンドを使って、DNSの名前解決ができるか確認します。

ubuntu@ip-172-31-42-233:/$ dig google.com

; <<>> DiG 9.18.1-1ubuntu1.1-Ubuntu <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15079
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;google.com.                    IN      A

;; ANSWER SECTION:
google.com.             59      IN      A       172.217.0.174

;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Wed Dec 28 09:27:03 UTC 2022
;; MSG SIZE  rcvd: 55

google.com. 59 IN A 172.217.0.174

と、表示されているので、DNSによる名前解決はできていそうです。

名前解決を行う優先順位を指定するファイル (/etc/nsswitch.conf) を確認します。

ubuntu@ip-172-31-42-233:/$ cat /etc/nsswitch.conf 
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         files systemd
group:          files systemd
shadow:         files
gshadow:        files

hosts:          files
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

hosts 行に files しかありません。 これだと、DNSは使わずに /etc/hostsによる名前解決しかしません。
DNSによる名前解決をするために、 hosts 行に dns を追加します。

ubuntu@ip-172-31-42-233:/$ cat /etc/nsswitch.conf 
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         files systemd
group:          files systemd
shadow:         files
gshadow:        files

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

改めて pingを実行します。

ubuntu@ip-172-31-42-233:/$ ping google.com
PING google.com (172.217.0.174) 56(84) bytes of data.
^C
--- google.com ping statistics ---
8 packets transmitted, 0 received, 100% packet loss, time 7164ms

無事に、google.com172.217.0.174 に変換して、 56(84) バイト出力しています。

問題にある通り、このVMは、外部ネットワークにpingできないために、レスポンスは返ってきません。Ctrl-C で止めます。
Check My Solutionでのチェックもできません。

Discussion