権威DNSサービス調査～複数のDNSプロバイダでDNSSEC対応してみた～

2023年6月23日
ミライコミュニケーションネットワーク
田中温子

自己紹介
• 名前田中温子• 所属

株式会社ミライコミュニケーションネットワーク
技術部運用チーム所属• お知らせ• ChuNOG2を8/3に長野県松本市で開催します• connpassで参加受付中• 最近の悩み事• ペットを飼いたいが家族に反対されている
2

今日の内容• これまでにDNSControlを使ってみて、異なるDNSプロバイダ間のゾーンの移行や、管理に十分使えるツールだと感じた→DNSSEC署名ありの場合にも使えるのか→そもそも複数のDNSプロバイダでDNSSEC対応をやったことがない

3

DNSControlとは• なにができる？
• 複数のDNSプロバイダに対してゾーン情報の更新• 対応するDNSプロバイダのゾーンをDNSControlの形式に変換• 変数やマクロが書ける• Stack Exchange社が開発したOSS• BIND、Route53など35以上のDNSプロバイダに対応

4DNSControlでこれまでに試したこと②deSECへアカウント作成、トークンを発行
AlmaLinux9

DNSControl①ゾーン情報をDNSControlのgetzonesでdnscontrol.jsの形式に変換③①で吸い出した
dnscontrol.jsでdeSECへ
まるっと登録BIND/var/named④レジストリのNSへdeSECのネームサーバを追加

BINDからdeSECへのゾーン複製、二つのDNSプロバイダの管理

5

複数プロバイダでDNSSEC対応するには• 同じゾーンに対して、複数のプロバイダで署名するMulti Signer Modelを未熟な頭で勉強して考えてみた• [Model 1]KSK鍵は共有、ZSK鍵はプロバイダ毎に別々• ゾーン所有者がKSK鍵を保持して署名し、各プロバイダに配布• ゾーン所有者が管理するDSレコードを登録• [Model 2]KSK鍵、ZSK鍵どちらも別々• プロバイダが独自のKSK鍵で署名• 各プロバイダは他のプロバイダのDNSKEY(KSK,ZSKの公開鍵)をインポート• 各プロバイダのDSレコードを登録

6

BINDとdeSECでDNSSEC対応をやってみる
レジストリ
両方のDSレコードをレジストリに登録

BIND
DNSKEYを双方向に登録
7

DNSControlでDNSKEYは管理できる？
• DNSKEYをとってくる、更新する、どちらもできなかった…

DNSControlではできなかったので手でやってみることにした

8

個別でDNSSEC検証して確認• BINDとdeSECそれぞれでDNSSECの検証に問題ないことを確認• digでadフラグがあること• VerisignのDNSSEC Analyzerで確認$ dig +dnssec atana.jp; <<>> DiG 9.16.23-RH <<>> +dnssec atana.jp;; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26240;; flags: qr rd ra ad; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 19具体的にどうやって設定するか
レジストリ
両方のDSレコードをレジストリに登録

dnssecimportkey でDNSKEYをインポートできる

管理画面・APIからDNSKEYを追加登録できる

BIND
DNSKEYを双方向に登録

10

deSEC → BINDへ設定(1)• deSECのDNSKEYをBINDへdnssec-importkeyでインポートする$ cat desec.key
atana.jp. IN DNSKEY 257 3 13
4Y7zop1sv2VmKb3Z9ojZ/SXOLelUgeljLT61BUtg/xlKrtOTEiNzfT8q7FjhsEDy328tQhPUq73VRo7kfgztlQ==$ dnssec-importkey desec.key
Katana.jp.+013+30481.key
Katana.jp.+013+30481.private

DNSKEYを読み込んで.key/.private ファイルを生成する

11

deSEC → BINDへ設定(2)• zoneファイルに追記してdnssec-signzoneする# echo "¥$INCLUDE ¥"Katana.jp.+013+30481.key¥"" >> atana.jp.zone(シリアルあげる)# dnssec-signzone -o atana.jp atana.jp.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 stand-by, 0 revoked
Algorithm: ECDSAP256SHA256: KSKs: 0 active, 1 stand-by, 0 revokedZSKs: 0 active, 0 stand-by, 0 revokedatana.jp.zone.signed# named-checkzone atana.jp atana.jp.zone.signed
zone atana.jp/IN: loaded serial 2023061602 (DNSSEC signed)
OK
12

BIND → deSECへ設定• BINDのDNSKEYを管理画面から登録

13レジストリにDSレコード登録• BIND、deSECのDSレコードをレジストリに登録$ whois atana.jp：[Name Server][Name Server][Name Server][Signing Key]

[Signing Key]

[Signing Key]

[Signing Key]

ns.work.mcnx.jp
ns1.desec.io
ns2.desec.org
18856 8 2 (C5F108595D02F7F2AE792A26803C12FA
5ED01600770D1E115E977E7082E92841 )
18856 8 4 (609F1B682E20985005AC14D8504C9653
E53D026EAD1385C048D370A3D7CBAF12065C74F069975EE002DCE7D3EF536E04 )30481 13 2 (DDEF911B5830F219F191841B0816E4E3
B2F3D622DA467B8C24B5A667A046259A )30481 13 4 (663237E743DCBD354A8DFACF66FA6778
5D687A655A0CDF24257C72815C768A99
C17A73B9E733096D6403AAE9329974CE )BINDのDSレコード

deSECのDSレコード

14

動作確認
• 名前解決ができる• digでadフラグがたっている• 署名が検証できた正しいデータである

対向の鍵の署名RRSIGがないのはそれはそうだ
署名の検証は問題なし• DNSSEC Analyzerでは対向の鍵の署名(RRSIG)がないよ！と×$ dig +dnssec atana.jp; <<>> DiG 9.16.23-RH <<>> +dnssec atana.jp;; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45709;; flags: qr rd ra ad; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 115まとめ• 複数プロバイダのDNSSEC対応はハードルが高いと感じた• DNSControlでDNSKEYのレコード管理は現状はできない→OctoDNSやTerraformなど、他のDNS管理ツールでは対応しているのかな？
• 手でやるのはつらい…

→KnotDNSとか他ソフトウェアではどうなんだろう？
→鍵のロールオーバーの時とか、対向のプロバイダの鍵更新をどうフックする？
• ツールや、権威DNSサービスでの、Multi Signer Modelへの対応よろしくお願いします16