新しく設置したLinuxサーバーにて、SSH接続ができない現象が頻発してい
て困ったので、その解決までの道のりをメモしておく。
新しく設置したLinuxサーバーは、Dell Precision T3500 に CentOS 5.7
を入れたもので、リモートからSSH接続して、主に日常的なプログラムや
データ処理に使うほか、Webサーバーとして利用するために導入したもの。
OSインストール後からずっと、SSH接続時に、接続不全が起きる現象に悩
まされてきた。この現象はなぜか、3回 ssh での接続試行が途中で止まる
のを途中で切断して、それから4回目に試行すると接続に成功するという
現象で、自宅やモバイル環境などほぼ全ての接続環境で発生していて、す
ごく不便だった。ただし、3回の接続試行したあとで、接続さえできれば、
問題無く接続して操作でき、とくに遅延等の問題無く接続できるという現
象だった。
また、SSH接続だけでなく scp などでも問題があり、すこし大きなファイ
ルを転送しようとすると、途中で転送が止まってしまい、「stalled」と
いったメッセージが出るだけになってしまう問題も出ていた。このscpの
問題は -l オプションを使って、転送バイト数を制限すると解消されると
いった解決策もあり、なんとなくそのまま使っていたけど、あまりに不便
だったので、ずっと調べていた。
# 「
google:stalled scp」と検索してみると、あちこちで似た現象が
報告されていることが分かる。
はじめは、TCP MTU による問題かと思い、いくつかパラメータを変えて試
してみたが、あまり変化は無かった。
次に、ググってみると、カーネルのTCP/IP関連パラメータの変更が効くの
ではないかという情報が手に入った。
例えば、以下のページでもそのような方法が紹介されているが、この設定
をそのままコピーしても症状は変わらず。
http://linuxsecure.blogspot.com/2008/05/scp-stalled-through-firewall-ssh-no.html
そこでもう少しパラメータの意味を調べてみると以下のページなどが詳し
く解説していた:
http://www.anarg.jp/personal/t-tugawa/note/linux/sockbuf.html
http://dev.ariel-networks.com/Members/inoue/network-tuning/
実は、同じサブネットワーク内にある Dell 製の旧サーバ(RedHat)では
この問題が起きていなかったので、その旧サーバのパラメータ設定をその
まま以下のように /etc/sysctl.conf 設定してみたところ、無事に ssh
接続でエラーが起きなくなった。
net.ipv4.tcp_rmem = 4096 87380 174760
net.ipv4.tcp_wmem = 4096 16384 131072
net.ipv4.tcp_mem = 393216 524288 786432
net.core.rmem_default = 110592
net.core.wmem_default = 110592
net.core.rmem_max = 131071
net.core.wmem_max = 131071
厳密に何が原因で起きた現象なのかはよく分かっていないが、とりあえず
は解決したようなので、ここに念のためメモしておく。