FrontPage 差分 一覧 ソース 検索 ヘルプ ログイン

DNS SOAレコードのSerialを減少させる

DNS SOAレコードのSerialを減少させる

[カテゴリ:others]

SOAレコードのSerialの値は32bit正数として扱われるので、その値は 0〜4,294,967,295.

通常変更日付に準じて YYYYMMDDnn のかたちでSerialを入力するため、4294年まではまぁ問題は起きないのだけど、一度数字がオーバーしてしまうと戻すのがめんどくさいとゆーお話。


一番簡単な方法はセカンダリの持っている情報を削除してしまうこと。

で更新可能。


セカンダリがISPのネームサーバだったりして柔軟な運用が困難な場合には、Serialをぐるりと回転させてやることで回避可能。

例えば今Serialとして 3005110101 が登録されているとする。誰かが西暦を1000年間違えやがったんだ。

この場合、普通に考えれば 3005110102 から 4294967295 までが新しいSerialとして取れる値になるわけだけど、実際のところSOAのSerialの考え方はちょいと違って、「連続空間演算」とゆーものを使う。

どーゆーことかとゆーとものすごくぶっちゃけた言い方をすると、0と4294967296を繋いでやって、自分より「後ろ」31bit分を「大きい」、自分より「前」31bit分を「小さい」と定義するやりかた。

31bitフルでbitを立てると10進数では2147483648なわけで、3005110101からこの値を引くと0857626453になる。同じく3005110101にこの値を足してやったうえで、0と4294967296を同一視する(=出てきた値から4294967296を減算する)とやっぱり0857626453になる。

この0857626453という値が3005110101にとっては特別な値で、「同じ」でなく「大きく」なく「小さく」ないという条件を全て満たす値になる。3005110102 から 5152593748 (=0857626452) までが 3005110101「より大きい値」で 0857626454 から 3005110100 までが 3005110101「より小さい値」になる。

SOA Serialに加算できる値が最大2147483647(=2^31-1)なのは、こーゆー理由があるから。

本題に戻ると、Serial 3005110101 を 2005110102 に変更したい場合、まずは 3005110101 に 2147483647(=2^31-1) を加算してやり、(4294967296以上になるならその分減算してやって、)857626452 という値をセットして、セカンダリに伝播されるまで Reflesh 期間の2倍の時間を待つ。

そのうえで再度望みの値になるように Serial を変更すればよろしい。


参考リンク