サーバ作っててちょっと困ったので備忘です。
また備忘かよ!
って感じですが、メモっとかないと忘れるんですよね・・・
あと更新ネタがないから・・・
事象
新しくCentOS6のサーバを構築してもろもろセットアップを終わらせてSSH接続を試したのですが、なんか接続確立するまでにやけに時間がかかる。
約10秒~20秒待ってようやくパスワード入力画面に推移する感じでした。
なんでCentOS7じゃないのかっていう突っ込みは置いといて・・・
原因
調べたところ、どうやらsshdの設定にあるようで、デフォルトだと以下のような仕組みで動作しているようです。
- 対象にSSH接続の要求を実施
- SSH接続要求を受けたサーバはなぜかクライアントのIPでホスト名逆引きしようとする。DNSサーバの設定がされていればDNSサーバへ問い合わせ
- 逆引きできたり、DNSからの応答がなかった場合、何事もなかったかのようにSSH要求に応じる
というわけで、時間がかかる原因はこのホスト逆引きをしているからですね。
DNSサーバに逆引きしにかかるのですが、できない場合はタイムアウトまで延々と待たされるわけです。
え、ホスト名の逆引きができようができまいが結局SSH要求は受けるの?
なんのためにデフォルトでこんな設定にしてあるの?
メリットはなんなの?
って思い調べたのですが、何も出てこず。
rhostを用いたログイン制限に使われるらしいが、そもそもそのような認証方法がデフォルトでOFFになっているらしく。
なんかちぐはぐだなあ・・・
解決方法
原因は逆引きだということが分かりました。
では、解決していきましょう。
この事象を解決するためのアプローチは複数ありますが、代表的な方法は以下となります。
逆引きできるようにする
SSH接続に時間がかかる要因がホスト名逆引きなのであれば、逆引きできるようにすればよいのです。
というわけで、高速にホスト名を引けるようにサーバのhostsに書いて、解決できるようにするとよいです。
# vi /etc/hosts
以下を追記します。
192.168.1.100(クライアントのIP) localhost.local
引ける名前はhogehogeでもoppaiでもなんでもよいです。
逆引きできることが重要なのです。
SSHの設定を変更する
SSH要求を受けた際に、逆引きしないように設定します。
こちらの方が解決方法としてはスマートですね。
# vi /etc/ssh/sshd_config
そして以下設定します。
UseDNS no
そして設定後sshdを再起動します。
# service sshd restart
これで逆引き設定がOFFになっているはずです。
あとがき
というわけで備忘でした。
調べたら解決方法なんていくらでも出てくるので今更感はありますが、まあ更新ネタなかったからね。
しょうがないね。
コメント