SEワンタンの独学備忘録

IT関連の独学した内容や資格試験に対する取り組みの備忘録

【LPIC102】LinuxにおけるDNSの管理 LPICで学ぶLinux14

LinuxにおけるDNS

DNSの概要

DNS(Domain Name System)はドメイン名とIPアドレスの対応付けや、 メールの宛先ホストを指示する仕組みを指します。
IPアドレスをDNSサーバに問い合わせる行為は、一般に名前解決と呼びます。

f:id:wantanBlog:20210111174223p:plain

名前解決を行うサーバのことをDNSサーバと呼び、これは大きくDNSキャッシュサーバとDNS権威サーバの2種に分類されます。

・DNSキャッシュサーバ
権威DNSサーバに問い合わせを行い、得た情報をキャッシュに保持する。
権威サーバの負荷を減らす。

・DNS権威サーバ
特定のドメインの情報を管理する正当な権限を持つDNSサーバです。
「xxx.com」や「xxx.jp」などドメインごとに管理している。

■名前解決

名前解決は正引きと逆引きが存在します。

f:id:wantanBlog:20210111181124p:plain

・正引き
ホスト名からIPアドレスを特定する

・逆引き
IPアドレスからホスト名を特定する

■レコード

名前解決を行うための情報はレコードと呼ばれ、情報に応じてレコードが決まっています。

レコード 内容
SOA ゾーン情報
A ホストのIP情報
AAAA IPv6の情報
PTR IPアドレスに対するホスト情報
MX メールサーバの情報
TXT テキスト情報
NS ネームサーバの情報

試験的には恐らく全てをしっかり覚える必要はありませんが、後述するコマンドとの対応を覚えておいた方がよいと思われます。

systemd-resolved

systemdを採用したディストリビューションでは、名前解決にsystemd-resolvedが使用されます。

・状態を確認する

[root@server1 systemd]# systemctl status systemd-resolved
● systemd-resolved.service - Network Name Resolution
   Loaded: loaded (/usr/lib/systemd/system/systemd-resolved.service; enabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:systemd-resolved.service(8)

■設定ファイル

systemd-resolvedの設定ファイルは「/etc/systemd/resolved.conf」になります。
ntpdの設定ファイルである「/etc/resolv.conf」とは明確に区別しておく必要があります。

・設定例

[Resolve]
DNS=8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844
Domains=test.com

設定ファイルの中身自体は試験的な重要度は高くなさそうです。

DNS:問い合わせ先のDNSサーバ
Domains:ローカルドメイン

DNS管理コマンド

hostコマンド

hostコマンドはホストやドメインに関する情報を表示するコマンドです。
名前解決などにも使用されます。

・ドメインの名前解決を行う

以下では、「google.com」の名前解決を行っています。

[root@server1 systemd]# host www.google.com
www.google.com has address 172.217.24.132
www.google.com has IPv6 address 2404:6800:4004:81c::2004

・IPアドレスから逆引きする
上記で得られたアドレスから逆引きしてみます。
今回はあまり例がよくなかったかもしれません。

[root@server1 systemd]# host 172.217.24.132
132.24.217.172.in-addr.arpa domain name pointer nrt20s01-in-f4.1e100.net.
132.24.217.172.in-addr.arpa domain name pointer syd09s06-in-f4.1e100.net.
132.24.217.172.in-addr.arpa domain name pointer nrt20s01-in-f132.1e100.net.

・詳細情報を表示する
なお「-v」オプション(verbose)を付与することで詳細情報を表示することもできます。

[root@server1 systemd]# host -v www.google.com
Trying "www.google.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39284
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.google.com.                        IN      A
****省略****
digコマンド

digコマンドはDNSサーバに登録されているレコード情報を取得し表示するコマンドになります。
基本的にはhostコマンドと同様のように見えますが、オプションやタイプの選択によりdigコマンドの方が詳細な情報を取得できるようです。

本質的には名前解決というよりはDNSサーバへの問い合わせコマンドとして理解した方がよさそうです。

・オプション

オプション 内容
-x IPアドレスを指定する(逆引き)
-6 IPv6の情報を取得する

・タイプ(レコード)一覧

タイプ 内容
a IPアドレス(Aレコード)
aaaa IPv6アドレス(AAAAレコード)
mx メールサーバ情報(MXレコード)
ns ネームサーバ情報
soa ゾーン情報(SOAレコード)
rxr テキスト情報(TXTレコード)
ptr 逆引き情報(PTRレコード)
any 全ての情報

・名前解決を行う
digコマンドをデフォルトで簡単に実施すると以下のような入力で実行できます。

[wantan@server1 ~]$ dig www.google.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.3 <<>> www.google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55491
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; MBZ: 0x0005, udp: 4096
;; QUESTION SECTION:
;www.google.com.                        IN      A

;; ANSWER SECTION:
www.google.com.         5       IN      A       172.217.31.132

;; Query time: 124 msec
;; SERVER: 192.168.142.2#53(192.168.142.2)
;; WHEN: 木  1月 14 22:29:51 JST 2021
;; MSG SIZE  rcvd: 59

同じことを長く以下のような書式で書くこともできます。
通常は省略できるオプションは省略して書くでしょう。

[wantan@server1 ~]$ dig -n www.google.com -t a

・IPアドレスから逆引きする
-x」オプションで実行することでIPアドレスから逆引きすることができます。
-x」オプションをつけるだけでPTRレコードから自動で取得してくれるようですが、「-t ptr」をつけても同じような結果が得られます。

[wantan@server1 ~]$ dig -x 172.217.31.132

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.3 <<>> -x 172.217.31.132 -t ptr
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15381
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; MBZ: 0x0005, udp: 4096
;; QUESTION SECTION:
;132.31.217.172.in-addr.arpa.   IN      PTR

;; ANSWER SECTION:
132.31.217.172.in-addr.arpa. 5  IN      PTR     nrt20s08-in-f4.1e100.net.

;; Query time: 17 msec
;; SERVER: 192.168.142.2#53(192.168.142.2)
;; WHEN: 木  1月 14 22:46:44 JST 2021
;; MSG SIZE  rcvd: 94

・MXレコードを取得する
単純な名前解決ではなく、MXレコードなどを取得する場合には明示的にタイプを指定する必要があります。

[wantan@server1 ~]$ dig google.com mx

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.3 <<>> google.com mx
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16881
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; MBZ: 0x0005, udp: 4096
;; QUESTION SECTION:
;google.com.                    IN      MX

;; ANSWER SECTION:
google.com.             5       IN      MX      10 aspmx.l.google.com.
google.com.             5       IN      MX      30 alt2.aspmx.l.google.com.
google.com.             5       IN      MX      50 alt4.aspmx.l.google.com.
google.com.             5       IN      MX      20 alt1.aspmx.l.google.com.
google.com.             5       IN      MX      40 alt3.aspmx.l.google.com.

;; Query time: 54 msec
;; SERVER: 192.168.142.2#53(192.168.142.2)
;; WHEN: 木  1月 14 22:50:49 JST 2021
;; MSG SIZE  rcvd: 147

・全てのレコード情報を取得する
any」タイプを指定することで全てのレコードタイプに関する情報を取得することができます。
その他のレコード情報に関しても同様にタイプを指定することで個別に取得できます。

[wantan@server1 ~]$ dig google.com any

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.3 <<>> google.com any
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23741
;; flags: qr rd ra; QUERY: 1, ANSWER: 7, AUTHORITY: 0, ADDITIONAL: 1

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

;; ANSWER SECTION:
google.com.             8       IN      SOA     ns1.google.com. dns-admin.google.com. 351548875 900 900 1800 60
google.com.             234     IN      AAAA    2404:6800:4004:809::200e
google.com.             238     IN      A       172.217.26.46
google.com.             109118  IN      NS      ns4.google.com.
google.com.             109118  IN      NS      ns2.google.com.
google.com.             109118  IN      NS      ns1.google.com.
google.com.             109118  IN      NS      ns3.google.com.

;; Query time: 21 msec
;; SERVER: 192.168.142.2#53(192.168.142.2)
;; WHEN: 木  1月 14 23:02:30 JST 2021
;; MSG SIZE  rcvd: 201
nslookupコマンド

nslookupも名前解決を行うコマンドです。
出力形式は異なるもの正引きも逆引きも他のコマンドと同じような感覚で実行できます。

・正引き

[root@server1 wantan]# nslookup google.com
Server:         192.168.142.2
Address:        192.168.142.2#53

Non-authoritative answer:
Name:   google.com
Address: 216.58.197.206
Name:   google.com
Address: 2404:6800:4004:809::200e

・逆引き

[root@server1 wantan]# nslookup 216.58.197.206
206.197.58.216.in-addr.arpa     name = nrt13s48-in-f14.1e100.net.
206.197.58.216.in-addr.arpa     name = nrt13s48-in-f206.1e100.net.

Authoritative answers can be found from:
getentコマンド

getentコマンドも名前解決を行うことができるコマンドの一種です。
微妙な書き方をしているのは実際のところは「/etc/nsswitch.conf」ファイルに従って問い合わせを行うコマンドだからです

試験的な重要度は、出題される可能性はありそうだけどそこまで高くはなさそうなので軽く試してみます。

■名前解決を行う

まず/etc/nsswitch.confの中身を確認します。名前解決に関する優先順位は「hosts」で定義しているので検索します。

[root@server1 wantan]# grep "hosts" /etc/nsswitch.conf
#hosts:     db files nisplus nis dns
hosts:      files dns myhostname

ここで、本ブログのドメインについて問い合わせを行ってみます。
これは外部DNSサーバに問い合わせていることが分かります。

[root@server1 wantan]# getent hosts www.wantanblog.com
13.230.115.161  hatenablog.com www.wantanblog.com
13.115.18.61    hatenablog.com www.wantanblog.com

次にローカルドメインについて問い合わせを行ってみます。
名前解決の優先順位はDNSサーバ(dns)より、hostsファイル(file)の方が高く定義されているので、hostsファイルで名前解決が行われた結果が出力されます。

[root@server1 wantan]# getent hosts test-server
192.168.142.134 test-server

■その他の問い合わせ

getentコマンドは名前解決コマンドではなく、/etc/nsswitch.confに基づいた問い合わせを行うコマンドなので当然他の情報に関する問い合わせも可能です。

例えば「passwd」。

[root@server1 wantan]# grep "passwd" /etc/nsswitch.conf
#passwd:    db files nisplus nis
passwd:     files sss
[root@server1 wantan]# getent passwd wantan
wantan:x:1000:1001:wantan:/home/wantan:/bin/bash

上記のようにユーザに関する問い合わせもできます。

whoisコマンド

最後に「whois」コマンドについて少し触れておきます。
先に紹介したほかのコマンドとは少し毛色が違い、こちらはドメインの登録者情報を問い合わせることができます。

問い合わせ先は「whoisサーバのデータベース」のようです。
試験的にはDNSサーバへの問い合わせコマンドと比較すると重要度は落ちると思います。

以下では本ブログのドメインの登録者情報を取得しています。

[root@server1 wantan]# whois wantanblog.com
   Domain Name: WANTANBLOG.COM
   Registry Domain ID: 2405633269_DOMAIN_COM-VRSN
   Registrar WHOIS Server: whois.discount-domain.com
   Registrar URL: http://gmo.jp
   Updated Date: 2020-06-09T13:53:27Z
   Creation Date: 2019-06-24T14:10:37Z
   Registry Expiry Date: 2021-06-24T14:10:37Z
   Registrar: GMO Internet, Inc. d/b/a Onamae.com
   Registrar IANA ID: 49
   Registrar Abuse Contact Email: abuse@gmo.jp
   Registrar Abuse Contact Phone: +81.337709199
   Domain Status: ok https://icann.org/epp#ok
*****省略*****


・前回(第十三回)
www.wantanblog.com


・次回(第十五回)
www.wantanblog.com