LinuxにおけるDNS
DNSの概要
DNS(Domain Name System)はドメイン名とIPアドレスの対応付けや、 メールの宛先ホストを指示する仕組みを指します。
IPアドレスをDNSサーバに問い合わせる行為は、一般に名前解決と呼びます。
名前解決を行うサーバのことをDNSサーバと呼び、これは大きくDNSキャッシュサーバとDNS権威サーバの2種に分類されます。
・DNSキャッシュサーバ
権威DNSサーバに問い合わせを行い、得た情報をキャッシュに保持する。
権威サーバの負荷を減らす。
・DNS権威サーバ
特定のドメインの情報を管理する正当な権限を持つDNSサーバです。
「xxx.com」や「xxx.jp」などドメインごとに管理している。
■名前解決
名前解決は正引きと逆引きが存在します。
・正引き
ホスト名から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