web-dev-qa-db-ja.com

OpenSSH:TCPKeepAliveオプションの間隔はどのくらいですか?

Sshd configでは、オプションTCPKeepAlive yesを指定できます。これらのパケットは暗号化されていないため、なりすましの可能性があります。オプション付き

ClientAliveInterval
ClientAliveCountMax
ServerAliveInterval
ServerAliveCountMax

キープアライブパケットの間隔と、接続が切断されるまでのタイムアウト(* CountMax)を指定できます。こちらも参照してください sshd_configの `ServerAliveInterval`と` ClientAliveInterval`のオプションは正確に何をしますか?

TCPKeepAliveでは、それを有効にすることしかできません。では、TCPパケットが送信される間隔はどのくらいですか?失敗したパケットがいくつあると、接続は切断されて閉じられたと見なされますかデフォルト値は次のとおりです。

#TCPKeepAlive yes
#ClientAliveInterval 0
#ClientAliveCountMax 3

私が理解している限り:壊れた/非アクティブな接続の検出とクローズは、デフォルト構成のTCPKeepAliveオプションにのみ依存します。したがって、その値を知ることは非常に重要です。

1
Hannes

OpenSSHがTCPKeepAlive(OSによって実装される)の微調整を提供しない理由は、おそらくそのパラメーターを変更する移植可能な方法がないためです。ポータブルなのは、setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &on_off)でオンまたはオフにすることだけです。

Linuxでは、tcp(7)のマンページに記載されているように、_/proc_ファイルシステムを介してデフォルト値を確認(および変更)できます。

_grep -T . /proc/sys/net/ipv4/tcp_keepalive*
/proc/sys/net/ipv4/tcp_keepalive_intvl: 75
/proc/sys/net/ipv4/tcp_keepalive_probes:        9
/proc/sys/net/ipv4/tcp_keepalive_time:  7200
_

したがって、接続がアイドル状態であると見なされるまで2時間待機してから、75秒間隔で9つのプローブを送信します。

Linux、FreeBSD、およびNetBSD(OpenBSDではない)では、setsockopt(fd, IPPROTO_TCP, TCP_KEEP{CNT,IDLE,INTVL}, &val)を使用して、ソケットごとにこれらのオプションを変更することもできますが、前述のように、OpenSSHはそれを行いません。

3
mosvy