ssh 隧道-如何启用超时?

ssh 隧道-如何启用超时?

我经常临时快速地(临时)想要使用 ssh 隧道将 http 流量(以及其他协议)从一台服务器隧道传输到另一台服务器。我为此使用(在源服务器上):

ssh -f -n -L *:80:target-server.com:80 target-server.com sleep 11555200

问题是,过了一会儿,我会看到数百个连接

lsof -n -i:80

ssh     17076 root    5u  IPv6 425353159       TCP <source-serverIP>:http->173.245.48.218:52116 (ESTABLISHED)
ssh     17076 root    8u  IPv6 425352908       TCP <source-serverIP>:http->82.177.80.10:49936 (FIN_WAIT2)
ssh     17076 root    9u  IPv6 425353148       TCP <source-serverIP>:http->173.245.48.218:31791 (ESTABLISHED)
ssh     17076 root   10u  IPv6 425353029       TCP <source-serverIP>:http->80.125.175.214:49837 (FIN_WAIT2)
ssh     17076 root   11u  IPv6 425353100       TCP <source-serverIP>:http->90.10.149.220:47749 (FIN_WAIT2)
ssh     17076 root   12u  IPv6 425353160       TCP <source-serverIP>:http->79.22.138.109:60744 (ESTABLISHED)
ssh     17076 root   13u  IPv6 425353105       TCP <source-serverIP>:http->90.10.149.220:53312 (FIN_WAIT2)

这些连接似乎永远不会超时。当这些连接的数量达到约 1024 时,隧道根本不接受新连接。如果这些连接像没有隧道一样超时,我该怎么办?

# lsof -n -i:80|grep 'FIN_WAIT2'|wc -l
1016

更改/proc/sys/net/ipv4/tcp_fin_timeout为较小的值并不能解决任何问题。

此外,这个问题似乎只发生在隧道 http 流量中(可能还有 https)。使用隧道 pop3/imap 时,我没有看到这样的问题。

另外,我想知道如何将开放隧道连接的最大限制更改为 > 1024。我绑定了

ulimit -n 99999 ssh -f -n -L *:80:target-server.com:80 target-server.com 'ulimit -n 99999 && sleep 11555200'

但它不能解决问题。即使设置tcp_max_orphans为高值也不会影响这一点。

答案1

有三组命令可以启用连接保持。

TCPKeepAlive
ServerAliveInterval结合ServerAliveCountMax
ClientAliveInterval结合ClientAliveCountMax

TCPKeepAlive通过在标准 ssh 加密之外发送 keepalive 来保持连接处于活动状态,这意味着任何网络设备都可以看到它只是一个 keepalive。这是可欺骗的。不建议使用此方法。

ServerAliveInterval由客户端发起。 ServerAliveCountMax将设置要发送的保持连接的最大数量,超过该数量后将断开连接。

ClientAliveInterval与之相同,ServerAliveInterval只不过它是由服务器发起的。

确保所有三个选项均未被调用。检查$HOME/.ssh/config/etc/ssh/ssh_config

答案2

你第一次就做对了,除了睡眠延迟..以秒为单位!尝试一个较小的值,对我来说这是有效的(将在 5 分钟后关闭):

ssh -f -n -L *:80:target-server.com:80 target-server.com 睡眠 300

相关内容