名前解決ができなくなった?
概要
会社の内部で使用しているキャッシュサーバが名前解決ができなくなってしまった. 管理者に問い合わせたところ,権威サーバでKSKロールオーバーを行ったという話を聞くことができた. キャッシュサーバでDNSSECの検証をして名前解決をできるようにトラブルシューティングしてほしい.
前提条件
$ dig @192.168.2.131 pc1.ictsc.net
で名前解決ができない
- 権威サーバーを使っているキャッシュサーバーは一つしかない
初期状態
クライアントから dig @192.168.2.131 pc1.ictsc.net +dnssec
を実行しても,名前解決ができない.
終了状態
クライアントから dig @192.168.2.131 pc1.ictsc.net +dnssec
を実行して,dnssecの検証が成功して名前解決ができる.
解説
この問題は権威サーバで使用している署名の期限が切れてしまったことにより,DNSSECの検証が成功しなくなった問題でした.
解き方としては,権威サーバで再署名を行いキャッシュサーバでトラストアンカーの更新を行うことでDNSSECの検証が成功するようになります.
今回の解放例の一つを示します.
まず、クライアントから権威サーバで名前解決をできるかを確認します。
$ dig @192.168.2.20 pc1.ictsc.net
; <<>> DiG 9.11.20-RedHat-9.11.20-5.el8 <<>> @192.168.2.20 pc1.ictsc.net
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49438
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: fb2922914c429f5fa65713d2603b3d6486e5d706011553e6 (good)
;; QUESTION SECTION:
;pc1.ictsc.net. IN A
;; ANSWER SECTION:
pc1.ictsc.net. 86400 IN A 192.168.2.151
;; AUTHORITY SECTION:
ictsc.net. 86400 IN NS master-ns.ictsc.net.
;; ADDITIONAL SECTION:
master-ns.ictsc.net. 86400 IN A 192.168.2.20
;; Query time: 1 msec
;; SERVER: 192.168.2.20#53(192.168.2.20)
;; WHEN: Sun Feb 28 15:51:16 JST 2021
;; MSG SIZE rcvd: 126
次に,キャッシュサーバで名前解決ができるかを確認します.
$ dig @192.168.2.131 pc1.ictsc.net +dnssec
; <<>> DiG 9.11.20-RedHat-9.11.20-5.el8 <<>> @192.168.2.131 pc1.ictsc.net +dnssec
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 27168
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 956
; COOKIE: 6fbba7982beede01a541f72f603b3d788b89e7b7d3c4fbc1 (good)
;; QUESTION SECTION:
;pc1.ictsc.net. IN A
;; Query time: 3 msec
;; SERVER: 192.168.2.131#53(192.168.2.131)
;; WHEN: Sun Feb 28 15:51:36 JST 2021
;; MSG SIZE rcvd: 70
キャッシュサーバで名前解決ができないことがわかったので、コマンド引数に+cd
を追加してDNSSECの検証をせずに名前解決を行います。
名前解決が成功するため,DNSSECの検証に失敗していることがわかります。
$ dig @192.168.2.131 pc1.ictsc.net +cd
; <<>> DiG 9.11.20-RedHat-9.11.20-5.el8 <<>> @192.168.2.131 pc1.ictsc.net +cd
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25924
;; flags: qr rd ra cd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 956
; COOKIE: 67453de86c9abd57bee0655c603b3d852c5c6647f116587d (good)
;; QUESTION SECTION:
;pc1.ictsc.net. IN A
;; ANSWER SECTION:
pc1.ictsc.net. 86329 IN A 192.168.2.151
;; AUTHORITY SECTION:
ictsc.net. 86338 IN NS master-ns.ictsc.net.
;; Query time: 0 msec
;; SERVER: 192.168.2.131#53(192.168.2.131)
;; WHEN: Sun Feb 28 15:51:49 JST 2021
;; MSG SIZE rcvd: 110
クライアントから署名の有効期限を確認します.
2月10日に署名の有効期限が切れていることが確認できます.
$ dig @192.168.2.20 pc1.ictsc.net +dnssec
pc1.ictsc.net 86400 IN RRSIG A 8 3 86400 20210210004000 20210111004000 ...
権威サーバで新しいKSK鍵のみを用いて、ゾーンに再署名を行います.
$ sudo su
$ cd /var/named
$ vim ictsc.net.zone
$TTL 1D ;
@ IN SOA master-ns.ictsc.net. root.master-ns.ictsc.net. ( ;
2020123101 ;
3H ;
1H ;
1W ;
1H ) ;
IN NS master-ns.ictsc.net. ;
cache-ns IN A 192.168.2.131 ;
master-ns IN A 192.168.2.20 ;
pc1 IN A 192.168.2.151 ;
pc2 IN A 192.168.2.152 ;
pc3 IN A 192.168.2.153 ;
$INCLUDE "Kictsc.net.+008+63885.key"
$INCLUDE "Kictsc.net.+008+63439.key"
$INCLUDE "Kictsc.net.+008+63829.key" # 古いksk鍵を削除
$ dnssec-signzone -x -o ictsc.net -k Kictsc.net.+008+63439.key ictsc.net.zone
Verifying the zone using the following algorithms: RSASHA256.
Zone fully signed:
Algorithm: RSASHA256: KSKs: 1 active, 0 stand-by, 0 revoked
ZSKs: 1 active, 0 present, 0 revoked
ictsc.net.zone.signed
ゾーンのリロードを行います.
rndc reload ictsc.net
クライアント側でKSK公開鍵を取得し,古いトラストアンカーを削除し新しいトラストアンカーの設定を行います.
$ dig @192.168.2.20 ictsc.net dnskey | grep 'DNSKEY.*257'
ictsc.net. 86400 IN DNSKEY 257 3 8 AwEAAePGnJDVqiEhjCRcnYYNP+Pf2DFnJwoj3sTlJwkh2aM1LZR4ajtR sxidDJi59Hf/lcwCBiEnW8eNvpuHz5NfrUTuc/hI/jKI38VkH4m+b68B feNyJtS9IUn8Naln/9r4hQBFCCEHJNmiMo5XnKdD3oEuDSgIsCeP8IOJ c1tlEcimy
fBfijuQleTr7MyoxW3iK0Q7kUuy8kIGelWKMogbUwrFFeBV CNvIAiofQOy7UDkjuGe9UpEXozZ5LNQkrBONzkUvr8Dt3YlhhWWYAjbX W5WzrLiQS9PTr3HMRlOOvTk4XlxQu0LDyqalyuBQnvMMg0AleQ7Q5c+M LU3l96yAg50=
$ sudo vim /var/named/chroot/etc/named.conf
trusted-keys {
"ictsc.net." 257 3 8 "AwEAAePGnJDVqiEhjCRcnYYNP+Pf2DFnJwoj3sTlJwkh2aM1LZR4ajtR sxidDJi59Hf/lcwCBiEnW8eNvpuHz5NfrUTuc/hI/jKI38VkH4m+b68B feNyJtS9IUn8Naln/9r4hQBFCCEHJNmiMo5XnKdD3oEuDSgIsCeP8IOJ c1tlEcimyfBfijuQleTr7MyoxW3iK0Q7kU
uy8kIGelWKMogbUwrFFeBV CNvIAiofQOy7UDkjuGe9UpEXozZ5LNQkrBONzkUvr8Dt3YlhhWWYAjbX W5WzrLiQS9PTr3HMRlOOvTk4XlxQu0LDyqalyuBQnvMMg0AleQ7Q5c+M LU3l96yAg50=";
};
$ sudo systemctl restart named-chroot
最後に、クライアント側でキャッシュサーバを使用して,DNSSECの検証が成功するかを確認します.
flagsにadが含まれていれば,DNSSECの検証に成功して名前解決ができています.
$ dig @192.168.2.131 pc1.ictsc.net +dnssec
; <<>> DiG 9.11.20-RedHat-9.11.20-5.el8 <<>> @192.168.2.131 pc1.ictsc.net +dnssec
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50967
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 956
; COOKIE: 11c4d3fa9bdf7a63dc315b95603de72eaeb7725d8de23282 (good)
;; QUESTION SECTION:
;pc1.ictsc.net. IN A
;; ANSWER SECTION:
pc1.ictsc.net. 86258 IN A 192.168.2.151
pc1.ictsc.net. 86258 IN RRSIG A 8 3 86400 20210401061624 20210302061624 63885 ictsc.net. K2/YRHfbne6RIqBzkt0/bZ7T62QTNr52S/SGuD9omC5ClbsJjOydBvXm THSSR0BtxlzbSGVzhggkBDzXcfc7lS8Iv8tbUWDKlvNp+heAo+PhDnWY 8VZWolD2Y2n9HNuBNXhidvIXHyrJbuhtzbamelgnEDx9zKlazeGrbjSZ Kqo=
;; Query time: 0 msec
;; SERVER: 192.168.2.131#53(192.168.2.131)
;; WHEN: Tue Mar 02 16:20:14 JST 2021
;; MSG SIZE rcvd: 255
採点基準
- 問題の発生原因について言及している (20%)
- クライアントからキャッシュサーバを使って,DNSSECが有効で名前解決を行える (80%)