DNSフルリゾルバの研究開発実装について

IIJ技術研究所 日比野 啓©Internet Initiative Japan Inc.

自己紹介
●日比野 啓 / @khibino●以前 はISPでRadius 認

証 サーバを 開

2022年から DNS のフルリゾルバの研究開発実装©Internet Initiative Japan Inc.

発

DNS研究開発実装
組 み 合 わせ 可 能 なDNSコンポーネントを 目 標 に
DNSライブラリ● DNSワイヤーフォーマット解釈/出力● DNSSEC 検証機能
● 優先度付きキューによるキャッシュ● DoH, DoT, DoQ
フルリゾルバ● 反復検索● DNSSEC検証機能の反復検索への組込み○ 署名検証○ NSEC/NSEC3検証による否定応答● Haskellの軽量スレッドによるサーバ実装©Internet Initiative Japan Inc.

反復検索とDNSSEC

反復検索●●●

クライアントからのリクエストに応じて複数ゾーンに分散配置された結果を解決する
目 的 のゾーンの 権 威 サーバが 見 つかるまで、委任情報に従って繰り返し検索を行なう
目
的 のゾーンの 権
威 サーバから結果 のリソースレコード 集合 (RRset)を取得する©Internet Initiative Japan Inc.

反復検索とDNSSEC

反復検索の委任情報
フルリゾルバは委任情報に従って権威サーバを辿る;; AUTHORITY SECTION:
iij.ad.jp.
86400 IN
iij.ad.jp.
86400 IN

NSNS;; ADDITIONAL SECTION:
dns0.iij.ad.jp.
86400 IN
dns1.iij.ad.jp.
86400 IN
dns0.iij.ad.jp.
86400 IN
dns1.iij.ad.jp.
86400 IN

AAAA 2001:240::105
AAAA 2001:240::115A
210.130.0.5
A
210.130.1.5

dns0.iij.ad.jp.
dns1.iij.ad.jp.

©Internet Initiative Japan Inc.

反復検索とDNSSEC

反復検索の委任情報 (DNSSEC)DNSSECの信頼チェーンためのレコードが付加される;; AUTHORITY SECTION:
iij.ad.jp.
86400 INNS
dns0.iij.ad.jp.
iij.ad.jp.
86400 INNS
dns1.iij.ad.jp.
iij.ad.jp.
7200 INDS
18490 8 2
B354CF936F041F1E8D7E9420308AF5243E90B50A16E68AEBCB173049 54BD1AB1
iij.ad.jp.
7200 INRRSIG DS 8 3 7200 20231211174502 20231111174502 36861 jp.
SYdMfWoiAnpRapF2aImpvdS/aaalih1wYNLGHvA3S7NE6RBlxfMPh0Sd
RJbveCgP4gIDdJcz0EqIR05oMYwkAsibf78PVAFc7Ht6yuY4bG8ZmJ+R
BIYt+n8BB4pfpfSQhMfj8c/sZ5zBZM16teBfyXM1rbpvZ5OLXNwLOl4m Dy4=;; ADDITIONAL SECTION:
dns0.iij.ad.jp.
86400 IN
dns1.iij.ad.jp.
86400 IN
dns0.iij.ad.jp.
86400 IN
dns1.iij.ad.jp.
86400 IN

AAAA 2001:240::105
AAAA 2001:240::115A
210.130.0.5
A
210.130.1.5©Internet Initiative Japan Inc.

反復検索とDNSSEC

反復検索 (DNSSEC)DNSSEC の信頼チェーン
●●

●

DS
は委任先ゾーンのSEP(SECURE ENTRY POINT) DNSKEYのハッシュ
委任先ゾーンではSEPDNSKEYでDNSKEY の RRset に対する RRSIG(署名)が検証可能ゾーン内ではDNSKEY
で、それぞれのRRsetに対するRRSIG(署名) が検証可能○ 次の委任先への DS RRset に対するRRSIG(署名)も検証可能©Internet Initiative Japan Inc.

DNSSECでの否定応答●●●

NSEC/NSEC3○
存在するドメインの範囲情報○
間のドメインの不存在○
NSEC/NSEC3 のレコードのRRSIGが検証される
NSEC○
ゾーンをドメイン正規化順序による範囲情報で分割
NSEC3
○
隠蔽
目
的 でドメイン 名 のハッシュ値を再度ドメイン名とする■
ハッシュ値を取ることで順序は入れ換わる■
入 れ 替 わった 順 序 でも、 範 囲 情 報 によりゾーンが分割される性質は変わらない○
ハッシュ値はBase32Hexで文字列化■
順序関係を変化させない©Internet Initiative Japan Inc.

DNSSEC 署名検証時の TTL の復元
RRSIG にある original TTL で復元する% dig @a.dns.jp. jp. SOA +dnssec
jp.
86400 IN
SOA z.dns.jp. root.dns.jp. 1700124302 3600 900 1814400 900
jp.
86400 INRRSIG SOA 8 1 86400 20231211174502 20231111174502 36861 jp.
mp4Xu9fl…
% dig @a.dns.jp. does-not-exist.jp. A +dnssecjp.
900 INSOA z.dns.jp. root.dns.jp. 1700124302 3600 900 1814400 900
jp.
900 INRRSIG SOA 8 1 86400 20231211174502 20231111174502 36861 jp.
mp4Xu9fleEhK0pCPn6ckzD5MdhDXjVb/WMGaz2+uZGWFNV4cEiOozJvr
TgCy18CS0XinqdS8zCOZEAZ0D5ip8yJEF/S2BnSG4rJh8cKvoy7CRXjj
KJ8MU2R5uiEJ6fJpu62UYRSf1xgWC4chEnRnpNREd3Ht5/79tGKTzmv3 0/Y©Internet Initiative Japan Inc.

例外的な振舞い

Empty Non-Terminal に対するNXDOMAINQNAME minimization で問題● 委 任 情 報 が 無 い 場 合 (NoErr)と同様に扱った方が無難● RFC8020(NXDOMAIN 下 には 何 も 無 い)に対応すると引けなくなる## 実例% dig danuoyi.alicdn.com. NS +shortdanuoyinewns1.gds.alicdn.com.
...
% dig @danuoyinewns1.gds.alicdn.com.
＼sc02.alicdn.com.danuoyi.alicdn.com. A... status: NOERROR, ...
sc02.alicdn.com.danuoyi.alicdn.com. 60 IN A ...
...
% dig @danuoyinewns1.gds.alicdn.com.
＼alicdn.com.danuoyi.alicdn.com. A... status: NXDOMAIN , ...
% dig @danuoyinewns1.gds.alicdn.com.
＼com.danuoyi.alicdn.com. A... status: NXDOMAIN , ...

©Internet Initiative Japan Inc.

例外的な振舞い

ゾーンの親子同居
委任元と委任先が同じ権威サーバ
委任情報を直接得る方法が無い
DNSSECの場合もDSが取れない○ DSを補うためのクエリ
反復検索に親子同居のためのロジックが必要●●●©Internet Initiative Japan Inc.

フルリゾルバの構成とキャッシュ●●

Haskellの軽量スレッドによるサーバ実装
優先度
付 きキューによるキャッシュ/ネガティブキャッシュ○ キャッシュ破 棄 時 刻を優 先 度に設 定（現在時刻 + TTL ≡ 破棄時刻）©Internet Initiative Japan Inc.

デモ

©Internet Initiative Japan Inc.

今後の課題パフォーマンスチューニング
● キャッシュが無い状況でのスループット向上
機能追加● 攻撃に対する耐性○ NSEC/NSEC3範囲情報による否定応答キャッシュ (RFC8198)○ ルートゾーンのコピーを持つ (RFC8806)
レポジトリ● https://github.com/kazu-yamamoto/dnsext©Internet Initiative Japan Inc.

ありがとうございました©Internet Initiative Japan Inc.