概要
会社の内部で使用しているキャッシュサーバが名前解決ができなくなってしまった. 管理者に問い合わせたところ,権威サーバで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%)