autosshを30秒のポーリング時間で開始しました。
AUTOSSH_POLL=30 AUTOSSH_LOGLEVEL=7 autossh -M 0 -f -S none -f -N -L localhost:34567:localhost:6543 user1@server1
そしてそれはうまくいきます:
Sep 5 12:26:44 serverA autossh[20935]: check on child 23084
Sep 5 12:26:44 serverA autossh[20935]: set alarm for 30 secs
しかし、ネットワークケーブルを物理的に取り外した場合、つまりトンネルが機能しなくなった場合、autosshはsshデーモンを強制終了しません。どうして?リンクがダウンしている場合、autosshは何もできないことを理解していますが、私の意見では、次のことを実行する必要があります。
- 子sshプロセスを確認します(
check on child ...
) - 遠端を確認してください!!! (トンネルを介したpingのような操作)
- トンネルがダウンしていることを認識する
- sshプロセスを停止します
- もう一度トンネルを作成してみてください
- それが機能しないことを認識し、(指数関数的に増加する?)タイマーを設定してすぐにもう一度チェックする
それが私がautosshを実行している理由です:トンネルに何かが起こった場合(ソフトウェアまたはハードウェアの問題である場合)、トンネルを再起動する必要があります。代わりに、sshプロセスが終了するのを待っています。接続を再確立する見込みがない場合でも、再起動しようとしているのではないですか?
autosshはどのようなチェックを行っていますか?sshが稼働していることを確認してください。遠端のチェックを行っていませんか?
編集する
要求に応じて、ssh構成の関連部分を追加します。
# (see http://aaroncrane.co.uk/2008/04/ssh_faster)
# The ServerAliveInterval tells SSH to send a keepalive message every 60 seconds while the connection is open;
# that both helps poor-quality NAT routers understand that the NAT table entry for your connection should
# be kept alive, and helps SSH detect when there’s a network problem between the server and client.
ServerAliveInterval 60
# The ServerAliveCountMax says that after 60 consecutive unanswered keepalive messages, the connection should
# be dropped. At that point, AutoSSH should try to invoke a fresh SSH client. You can tweak those
# specific values if you want, but they seem to work well for me.
ServerAliveCountMax 60
TCPKeepAlive yes
dev tun
両方で使用remote
し、クライアントの構成で設定します。唯一の厄介なビットは、証明書の管理です。OpenVPNに付属の「easy-rsa」CAを使用します。証明書を取得したら、あとは簡単です。