0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DNS権威ゾーンのserialをリセットする

Posted at

DNS 権威サーバが持つゾーンには serial と呼ばれるバージョンの値があります。この値が大きくなったときにゾーンが更新されたとみなされて,複製先にアップデートされるわけですが,この serial の値は常に増加しなければいけないので,減らしてしまうと更新が適切に行なわれなくなってしまいます。

serial の例 (この場合は 1)

; <<>> DiG 9.10.6 <<>> @1.1.1.1 mdns.jp. SOA
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24378
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;mdns.jp.			IN	SOA

;; ANSWER SECTION:
mdns.jp.		3600	IN	SOA	ns-a1.mdns.jp. hostmaster.mdns.jp. 1 10800 3600 604800 3600

;; Query time: 22 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: Thu Sep 19 00:18:22 JST 2024
;; MSG SIZE  rcvd: 89

しかし,現実の運用ではしばしば (ときにはミスによって) この serial を減らさなければならない状況になることがあります。

  1. 誤った値に増加させてしまった場合: YYYYMMDDNN 形式で serial を運用していて, 2024年なのに 2025010101 みたいな値にしてしまったり
  2. 形式を変えたい場合: YYYYMMDDNN 形式で運用していたが,単純なカウンタにしたい/あるいは time_t の値にしたい,など

DNS ゾーン serial の演算

DNS ゾーンの serial は,32-bit 符号なし整数ですが,これは剰余環の演算が定義されていて,4294967295 (2^32 - 1) に1を足すと 0 になります。そして,この「輪っか」の数のなかで,近いほうの隣り同士に注目して,その並びのなかでプラス側に位置する数を大きいとするのです。(RFC1982)

したがって, serial を増やすときに 2147483648 以上の幅で (2147483648 を含みます) serial を増加させると,減ったものとみなされて正常に動作しないことがあるのでしてはいけません。

従って, serial を減少/リセットさせたいときは, 2147483648 未満の幅で, 0 に戻るまで増やしていけば良いのです。(本当に0にするとバグるリゾルバ等があると言われているので0ではなく1に戻すことを推奨します)

例: 2024010101 → 3024010101 → 1

また,変更を行うときだけは TTL を小さな値に変更するとラクです。前のバージョンの TTL がフルで経過するまでは次の変更を行ってはいけません。

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?