リンク: [ホーム] [自己紹介] [リンク集] [アルバム] [ソフトウェア] [発表文献] [その他]

まさおのChangeLogメモ / 2011-10-05

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

2011-10-05 Wed

* SSH接続不全エラーの解消 (sysctl.conf)

新しく設置した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

厳密に何が原因で起きた現象なのかはよく分かっていないが、とりあえず
は解決したようなので、ここに念のためメモしておく。