在 sshd 配置中,您可以指定选项TCPKeepAlive yes。这些包未加密,因此可能被欺骗。随着选项
ClientAliveInterval
ClientAliveCountMax
ServerAliveInterval
ServerAliveCountMax
Run Code Online (Sandbox Code Playgroud)
您可以指定保持活动数据包的间隔和连接断开后的超时时间 (*CountMax)。另请参见此处sshd_config 中的“ServerAliveInterval”和“ClientAliveInterval”选项究竟是做什么的?
有了TCPKeepAlive你只可以启用它。那么发送 TCP-Pakets 的间隔是多少?在多少个不成功的数据包之后,连接被视为断开并关闭?由于默认值为:
#TCPKeepAlive yes
#ClientAliveInterval 0
#ClientAliveCountMax 3
Run Code Online (Sandbox Code Playgroud)
据我了解:检测和关闭断开/非活动连接仅取决于默认配置中的 TCPKeepAlive 选项。因此,了解这些值非常重要。
我有一台带有两个网络接口和两个不同互联网连接的机器。我知道有多个路由表之类的东西。不过我有一个非常简单的场景。传出 ssh 应用程序应始终通过 wlan0。那么为什么要做这么复杂的事情呢?
第一次使用curl 进行测试,它的工作非常完美:
curl --interface wlan0 ifconfig.me
185.107.XX.XX
curl --interface eth0 ifconfig.me
62.226.XX.XX
Run Code Online (Sandbox Code Playgroud)
因此,无需为两个接口设置任何特殊的路由规则,它就完全按照我想要的方式工作。eth0 是默认路由
ip route
default via 192.168.178.1 dev eth0 proto dhcp src 192.168.178.21 metric 202
default via 172.16.1.1 dev wlan0 proto dhcp src 172.16.1.88 metric 303
172.16.1.0/24 dev wlan0 proto dhcp scope link src 172.16.1.88 metric 303
192.168.178.0/24 dev eth0 proto dhcp scope link src 192.168.178.21 metric 202
Run Code Online (Sandbox Code Playgroud)
现在尝试用 wget 做同样的事情。Wget 非常适合调试,因为它具有与--bind-addressssh 相同的选项-b。
wget -O- --bind-address=192.168.178.21 ifconfig.me 2> /dev/null
62.226.XX.XX …Run Code Online (Sandbox Code Playgroud)