新版本

新版本

新版本

因此,为了更清楚起见,我将列出我拥有的东西的清单。

  • 运行 Plex 媒体服务器和 Kitty 的 Windows 10 电脑
  • OVH 出品的 VPS 在 Debian 9 Stretch 上运行

我想要的是 :

  • 想要从本地网络之外的任何地方访问我的服务器

如何 :

  • 通过使用 VPS 作为到我的 Plex 服务器的隧道

问题 :

  • 动态 IP 双重 Nat 来自 ISP 端 4G / LTE 路由器与订阅
  • 无法进行端口转发

问题 :

  • 当 PC(Windows 10)上的 IP 每天更改一次时,通过 kitty 到 vps 的连接会崩溃

手动解决该问题:

  • 找到保持端口打开的进程的 PID 并将其终止

我需要的 :

  • 自动完成此操作或有其他解决方案

图片帮助您理解

Kitty日志中ip改变后

手动解决问题的方法

问答

皮条客果汁 IT: 谢谢 ^^ 无论如何,no-ip 工具对我来说也相当合适。但由于 ISP 有双重 NAT,基本上我必须在我的后面的第二个“路由器”上运行一个 No-ip 软件。这是不可能的,你会同意 ^^。真的很喜欢我的问题真的很简单,但很烦人,因为似乎解决这个问题的方法很简单。但找不到正确的方法 :/

附言:是的,不用担心,旧版本只是我想要的一个大草稿^^我想在新版本中你已经拥有了帮助我所需要的一切:/ ^^

Old version

我有一台 OVH 的 VPS,我用它将 PLEX 上的媒体服务器从我的 PC 隧道传输到 VPS。一切正常,运行正常,除了……

我的 IP 是动态的,并且经过双重 NAT。我的外部 IP 经常更改和更新,至少每天一次。因此,我通过 Kitty(PuTTY 的一个分支)与 VPS 的连接中断了。我通过连接中止后的自动重新连接解决了这个问题。无论如何,当完成此操作后,我在 KiTTY 中指定的端口隧道将失败,这是因为之前的连接没有正确关闭。

对于服务器端,它是 Debian 9 Stretch。

我找到了解决方案,即找到该连接的 PID 并将其终止手动。这是我的问题,我想用脚本自动完成。在这里我请求大家的帮助,希望有人能伸出援手。

附言:我的脚本编写技能看起来很低,所以请尽可能清楚地说明,谢谢。


对一些评论的回答

斯科特– 当我的 IP 地址更改时,连接会崩溃。然后,由于 KiTTY,它会重新连接。我在命令行中只需输入netstat -lnp,它就会显示所有活动连接。我会找到与指定端口(在本例中)链接的连接32400以及关联的 PID,然后使用 终止该PID连接。例如,kill上次的 PID 是。12007

卡米尔·马乔罗夫斯基– 我试过这个(指这是另一个问题的答案):

通过编辑文件永久/etc/sysctl.conf添加:

net.ipv4.tcp_keepalive_time=300

如果您只能sshd在服务器上重新配置,我认为这是最优雅的方式。让sshd_config包含如下行:

ClientAliveCountMax 3
ClientAliveInterval 15

但是当我模拟连接崩溃时,这两种方法都不起作用,它会重新连接,但端口仍然被占用。

解决方案如下

返回客户端

仅当我能使其适合我的情况时,它才对我有用。

“但当我模拟连接崩溃时,这两种方法都不起作用,它会重新连接,但端口仍然被占用” – 您是否重新启动了 sshd?您是否尝试立即重新连接?使用这些设置,您需要等待最多一分钟才能让端口空闲。– Kamil Maciorowski

是的,我确实使用以下命令重新启动了 SSHD:

/etc/init.d/ssh 重启

为了安全起见,因为我不知道是否重新启动 sshd

服务 sshd 重启

重新连接是自动且即时的,我现在正在寻找一种方法来延迟这个过程,如果你知道怎么做,请告诉我,谢谢,这样你就知道:

net.ipv4.tcp_keepalive_time=300

我将其设置为 10 秒而不是 300 秒,这样可以吗?

另外,我不太明白你关于同时加载两个会话的第二条评论,用第二个会话修复它,我的目标是重新启动实际的会话过程,该过程是自动化的,现在需要释放端口,以便我可以使用新的绑定重新打开它。

澄清:在我上面的评论中,有一种通用方法可以防止将自己锁定在服务器之外。如果你严重破坏了 sshd_config,你将无法重新使用 ssh。这就是为什么你应该始终使用新连接对其进行测试,而旧连接仍然允许你无论如何都恢复更改。请注意,一般来说,可能有一个语法有效的 sshd_config,但仍然无法连接;因此,重新启动 sshd 而没有任何错误并不一定意味着它会起作用。– Kamil Maciorowski

所以最后,我有什么解决方案可以让这个过程自动化,并在更短的时间后释放端口,以及如何使用脚本或其他东西延迟 kitty 中的重新连接?再次感谢您抽出时间,我很感激

“重新连接是自动且即时的,我现在正在寻找一种延迟此过程的方法” – 您的意思是 KiTTY 尝试立即重新连接,对吗?在客户端的 Linux 中,您的问题可以通过 autossh 或循环 ssh -o ExitOnForwardFailure=yes 轻松解决……(请参阅此答案)。我认为 Cygwin 下的 ssh 应该支持此选项。如果您坚持使用服务器端脚本,我想这是可以做到的;但如果不是旧隧道,脚本必须不能终止隧道。我现在没有时间提供如此繁琐的解决方案;也许 12 小时后。– Kamil Maciorowski

好的,谢谢,无论如何我会在 12 小时后见到你,在此之前我会尝试所有其他解决方案,我会告诉你进展如何,再次感谢你。

相关内容