🕒

CentOS6 のネームサーバの設定を変更したら SSH でのログインがやたらと時間がかかるようになった

2017/02/02に公開

条件

  • ラック内に BIND サーバ群を立てていたが、老朽化に伴い廃止
  • ラック内の外部サービス提供用のサーバはネームサーバとして上記サーバ群を参照していた
  • 移行先はデータセンタが提供しているネームサーバを利用することにした

状態

  • ssh ログインするとコマンドを受け付けるようになるまですごく時間がかかる
  • yum などを使うと探すのにやたらと時間がかかる
  • ping yahoo.co.jp は遅延もなく普通に通る

解決策

以下の記述を追記する。

options single-request-reopen

追記位置はどこでもいいらしいけど、個人的には先頭に書いておいた(今後忘れないように)。
特にネットワーク等を再起動させる必要はない。
options single-request-reopen ではなく options single-request でも良いらしい。

原因

/etc/resolv.conf などにネームサーバの IP を複数書いてある場合、 CentOS6 では名前解決をする際に書いてあるサーバすべてに 同時に 問い合わせをする。
名前解決には 53 番のポートを利用するというのは周知のことだけど、ファイアウォールによっては、同一ポートからの通信があるとうまく処理できないらしい。
それで options single-request-reopen と書くことで、 同時に ではなく、 順次に 問い合わせするようになるそうだ。
詳しいことは、どこかにお任せします。

蛇足

調べてみると ping は名前解決で遅延しないらしいが、 curl なんかはするそうだ。
ネットワーク周りの設定を変更した時、とりあえず ping っていう習慣になっていたので、まんまと罠にはまった格好。
設定変更したサーバはウェブサーバだったので、基本的にサービスとして名前解決をすることがなく、なかなか顕在化しなかった。
SSH が遅いのはたまたま調子が悪いのかな?くらいしか思ってなかったけど、いくつかのサーバが同じ状況になったので、慌てて調べてみたところ CentOS6 特有の問題があることが発覚した。
CentOS5 まではそもそも問い合わせを順次実行していたらしい。

Discussion