[俺日記]

医学都市伝説さんのDNSトラブル / 2006-10-09 (月)

医学都市伝説: あれ?ネーム・サーバーが……』より(via otsuneさんのブクマ)。タグはDNS

otsuneさんは

単にns1がコンテンツサーバーでns2がゾーン転送を受けていたのに、それを逆に設定しちゃってexpireされたんだろうなぁ

って言ってたけど、『ns1がマスターでns2がスレーブ』って言いたかったのかなと言ってみる。いや話の本筋はそこじゃない。まずはSOAレコードを引いてみた。SOAレコードは以下のように返って来た。

med-legend.com. 600 IN SOA main.primevps.net. tech.webk.net. 2006050501 7200 3600 604800 600

digコマンドでSOAレコード引いたとき、IN SOAの次に来るのはマスターネームサーバだったよね。この場合はmain.primevps.netというサーバになるわけか。このサーバはNSレコードには存在しないんだけど、これは許されるのだろうか?ns1もns2もmainのスレーブサーバってことでいいのかな。ns1とns2はmainに更新が無いか2時間ごとに問い合わせ、あればゾーン転送してもらう、この設定自体には特に問題無さそうだ(本当かなぁ)。ns1、ns2、mainに直接digで問い合わせてみたが、レコードは全て一致する。シリアルも2006050501で同じ。これ多分今年の子供の日に更新したんだよねぇ。だから『ns1→ns2という転送を逆に設定した→転送が失敗し続けてexpire』という、プライマリとセカンダリを入れ替えてしまったが故の事故って線は無いんじゃないかと。この場合どっちがプライマリでも同じだと思う。たぶん。

さて、初期設定の誤りであったのなら、何で今まで問題なかったのか、そもそもns1、ns2の順など関係ないのなら、何故それを変更したらアクセスできるようになったのか、順序に関係があるなら、何で知らないうちに設定が変るようなことがあったのか、と言う謎が残ったことになる。

レコードから推測されるのは、ns1もns2もmainからゾーン転送してもらっており、立場は同じという事。だから順序は関係ない。そもそもns1とns2の間でゾーン転送は行われていないと思われる。

で、プライマリ=ns2という設定を、プライマリ=ns1にしたら繋がった、という事だけど、仮にプライマリ→セカンダリという方向にゾーン転送するようになっていた場合、ns2→ns1とゾーン転送しようとして失敗し続け、その結果としてns1は自分が持つレコードを破棄しているはずであるが、ns2が持つレコードは破棄されていないはずである。つまり1/2の確率で(=ns2に問い合わせしたときだけ)名前解決が出来て繋がるはず。でもそういう話じゃないっぽい。そしてこの状態からns1→ns2という方向に設定を直したって元に戻る訳が無い。でも、そういう話ではなく、またどちらのサーバのレコードも2006年5月5日から変更していないっぽいんだから、この仮定は却下。やっぱりmainからns1、ns2にゾーン転送されていると考えるのが自然だろう。

それよりも気になったのは、ns1とns2が、同一の(たぶん)ネットワークにあるって事(IPアドレスが1番違い)。ついでに言えばmainも多分同じネットワークにある。これはDNSの性格上問題じゃないかなーと思うのだが。コンテンツサーバはそれぞれ違うところに置かないと意味無いって俺は習ったよ?

以上の事から、俺は今回の事象は以下のような流れではないかと推測する。

mainが落ちたまたはmainとns1・ns2間のネットワークトラブルが発生した→ns1とns2がmainに問い合わせをするが失敗→REFRESH=2時間、RETRY=1時間、EXPIRE=1週間を経てns1・ns2がレコードをexpireする→名前解決不能に陥る→繋がらなくなる→設定を変更した→ns1とns2がmainに再度同期を求める→名前解決可能になる→繋がるようになった

というものではないかと。一度レコードをexpireしてからのns1・ns2がmainに対して同期を繰り返そうとするかはわからんしどっちでもいい気がする。RETRYが1時間だから、同期失敗から設定変更の間にmainが復活するってのは十分ありそうな話だ。同期要求を繰り返していない場合、このサービスではmainが全部のゾーンのマスターサーバになってるってのはありそうな状況だから、設定を変更したらmainに対して新たにゾーン転送を求めて無事転送された、ってことでいいんじゃね?otsuneさんにiChatでこの事話したら、

あー、ns1とns2を入れ替えたのは本来は意味が無くてネガティヴキャッシュをリセットしたのが効果あったと

一言でまとめると、「http://jp.webk.net/がnsを場所的に冗長にしていないから、いろいろあってそう言う事が起こった」

と実に的確な表現でまとめてくださいました。

回避方法?やっぱり全然別のネットワークに複数のコンテンツサーバを置くしか無いんじゃないですか?2個だと1個落ちたとき名前解決出来ない確率は1/2だけど、n個置けば1/nに減るし。うち?2個だよ(;´Д`)

[ ツッコミの受付は終了しています ]

「医学都市伝説さんのDNSトラブル」のリンク用URL