Tech Notes

SSHでの接続が遅い原因

TeraTermを使ってSSHの接続をしようとすると、接続し始めてからユーザー名などを聞かれる(接続が確立して応答が帰ってくる)までの時間がやたら長いので理由を調べてみたら、やたら単純だったのでメモ。サーバー側OSはCentOS6.5です。

自分はSSHの接続に使うポート番号をセキュリティの為に大きいものに変えているのですが、そうするとサーバ側のファイアウォールの設定もそれにそぐった設定にしなければなりません。

iptablesの設定で、SSHの許可に関する項目を書き換えます。ポート番号22を許可することになっているところを、自分の使いたいポート番号に書き換えていました。

そしてここからが本題ですが、TeraTermはプロトコルに「UNISPEC」が指定されてるとき、まずIPv6での接続を試みます。しかしiptablesでいじくれるのはIPv4のファイアーウォールの設定だけで、IPv6のファイアーウォールはip6tablesが司っています。iptablesではその使いたいポートが解放されていても、ip6tablesの方では許可していなかったのです。

そのためTeraTermがIPv6での接続を試行している間、タイムアウトまで待ちぼうけを喰らっていました。

当然UNISPECではなくIPv4を指定してから接続すればすぐにユーザー名聞くダイアログが出てきますが、ip6tablesでも許可すれば毎回プロトコルにIPv4指定する必要はなくなります。

追記

最近のCentOSというかRedHat系のLinuxでは、iptablesからfirewalldとかいう新しいファイアーウォール機能へ移行する模様です。こちらではポート番号だけ指定すればIPv4とIPv6のファイアーウォールを同時に操れます。内部的にはiptablesとip6tablesを使っているらしいので、一緒にうまいことやってくれるのでしょう。便利。