linux – 可能的TIME_WAIT问题的解决方法,防止重新建立损坏的SSH隧道?

虽然不打算交叉发帖,但在将此问题发送到SecurityFocus的OpenSSH列表后,我注意到该列表的流量相当低(之前的帖子大约是5个月前).话虽这么说,我决定在这里重新发布,因为这个问题可能会得到更多的关注(并且如果得到回答,将更有可能被其他人使用):

问题:我有一个从内部机器到我的DMZ中的主机的反向SSH隧道,它设置为在系统启动时启动并在隧道出现故障时重新启动.但是,当隧道中断时(例如,由于网络中断),由于DMZ主机上的端口正在使用,它无法重新建立.从我读取的OpenSSH邮件列表存档和其他地方来看,这似乎是因为端口处于TIME_WAIT状态.这很好:我可以在设置隧道的脚本中放入一个sleep语句.但是,这导致了两个问题:
1)任何想法如何确定在特定的Linux(或其他)系统上定义TIME_WAIT间隔是什么?虽然我可以睡5分钟并且没事,但是尽可能多地减少时间会很好.
2)虽然OpenSSH似乎不支持“ClearAllForwardings”选项,但是是否有类似的功能,即auth’d连接可以自动拆除并重新创建它之前建立的现有连接?

长时间睡眠可能“足够好”,但如果可能的话,我更愿意以更有效的方式处理TIME_WAIT条件.

我感谢任何指导或建议!

解决方法

我认为你可以使用各种SSH设置,如TCPKeepAlive,ServerAliveInterval,ServerAliveCountMax等来设置如果连接断开,它将杀死所有内容.我有类似的设置,我对双方的SSHD和SSH进行了很多修改,以配合我想要的.然后我有一个cron作业,如果需要的话,每5分钟运行一次,重启隧道.
#!/bin/bash
if ps aux | grep "ssh -fnNTx" | grep -v "grep"
then
echo "Already Running"
else
echo "Starting now"
ssh -fnNTx -L 1514:127.0.0.1:514 user1@X.X.X.X
fi

到目前为止,这个解决方案对我来说很好.您还可以设置某种类型的Nagios检查或其他脚本以查看隧道是否已打开,如果没有,请执行该pid的杀死以便重新启动.

编辑:

以前的文章谈了很多关于TIME_WAIT的问题. How to forcibly close a socket in TIME_WAIT?

相关文章

文章浏览阅读1.8k次,点赞63次,收藏54次。Linux下的目录权限...
文章浏览阅读1.6k次,点赞44次,收藏38次。关于Qt的安装、Wi...
本文介绍了使用shell脚本编写一个 Hello
文章浏览阅读1.5k次,点赞37次,收藏43次。【Linux】初识Lin...
文章浏览阅读3k次,点赞34次,收藏156次。Linux超详细笔记,...
文章浏览阅读6.8k次,点赞109次,收藏114次。【Linux】 Open...