防止在服务器机器上登录 VPN 后丢失 SSH 连接

防止在服务器机器上登录 VPN 后丢失 SSH 连接

我遇到了一个无法解决的问题。当我通过 SSH 登录到 VPS 并尝试在该 VPS 上建立 VPN 连接时,VPS 和我的机器之间的 SSH 连接丢失。我认为这是因为路由被 VPN 设置更改了。如何防止这种情况发生?

答案1

让我们考虑以下场景:

  1. 您的 VPS 有一个以太网接口,配置了 IP 地址 4.3.2.1/24;
  2. 您的 VPS 可以通过默认网关 4.3.2.254 访问互联网
  3. 你的 VPS 有不是尚未激活任何 OpenVPN 连接;因此tun 接口处于活动状态

在这种情况下,从您的机器(假设您的机器是 9.8.7.6/24,def-gw 为 9.8.7.254)您可以成功建立到 4.3.2.1 的 SSH 连接。因此,主机 4.3.2.1 和 9.8.7.6 都可以成功互相访问。

现在,建立了这样的 SSH 连接,我们假设:

  1. 您从 VPS 4.3.2.1 启动 OpenVPN 连接;
  2. 这样,新的 tun0 接口将被动态配置(假设它将被分配一个 10.10.10.2 IP 和一个 10.10.10.1 PTP)。

在这个阶段:

  • 如果远程 OpenVPN 服务器不会将任何路由推送到您的本地 VPS,那么路由方面不会发生任何变化,您的 SSH 连接将毫无问题地继续存在。在这种情况下,唯一穿越 VPN 的流量是指向远程 OpenVPN 服务器 (10.10.10.1) 的流量;

  • 如果远程 OpenVPN 服务器将推回一些路由,特别是如果 VPS 默认网关将被替换为 10.10.10.1 (远程 OpenVPN 端点),然后你遇到了问题。在这种情况下,你正在隧道全部VPN 内的传出 IP 流量(OpenVPN 本身除外)。

在第二种情况下(建立 VPN 连接后立即替换 def-gw),由于不对称路由,您之前的 SSH 连接将“挂起”:

  • 从您的机器(9.8.7.6)到 VPS(4.3.2.1)的流量将流经之前的、从未改变的路径;
  • 从 VPS(4.3.2.1)到你的机器(9.8.7.6)的流量:
    • 没有 VPN(因此最初)是通过 4.3.2.254 网关路由的;
    • VPN链路建立后,进行相关的def-gw替换,通过VPN(10.10.10.1)进行路由。

换句话说:一旦建立 VPN 链接,您从 VPS 到您的机器的返回路线就会改变,这不是一件好事(返回路径上的多个网络设备可能会识别出这种不对称路径并简单地丢弃数据包)。

此外,您的远程 OpenVPN 服务器很有可能充当 NAT 盒:来自 VPN 的所有流量都将通过远程 OpenVPN 服务器的公共 IP 地址进行 NAT。如果这是真的,那么事情就不再是......“不好”,但绝对是“坏”,就像您的 SSH 连接一样:返回流量除了沿着不同的路线返回外,还会返回到您的机器使用不同的源 IP(VPN 服务器的公共接口之一)。

如何解决这个问题呢?

确实相当容易。

简单指示你的 VPS 服务器不要通过 VPN 将流量路由到你的机器,而是依靠之前的路由。在启动 OpenVPN 之前,添加以下内容应该很简单:

     route add -host 9.8.7.6 gw 4.3.2.254

在哪里:

  • 9.8.7.6 是你的机器公网IP地址
  • 4.3.2.254 是您的 VPS 原始默认网关。

附言:通过提供更详细的问题,你会得到更快的答案:-)

答案2

您需要在 VPS 上的 OpenVPN 客户端的配置文件中添加route-nopull选项(如果存在则删除)。redirect-gateway

这样,连接到 VPN 服务器就不会修改 VPS 上的任何路由,因此您可以自行设置所需的路由。

答案3

我遇到了这个问题并尝试了所有推荐的解决方案,但我的问题仍然没有解决!

尝试了很多解决方案后,我使用了该screen命令。(我的 VPN 客户端是 cisco-any-connect)。

$ screen -R VPN
$ openconnect -b "your server"

提供您的凭证后,立即按 ctrl+a+d 并返回您的会话。

答案4

我个人更喜欢所有到 SSH 的连接都通过 VPN 路由。如果在 VPN 建立之前有活动的 ssh 连接,则由于路由更改,它必须重新连接。

我建议使用autossh 在你的 ssh 客户端配置下只需添加.ssh/config

Host *
   ServerAliveInterval 300
   ServerAliveCountMax 2
   BatchMode yes
  • 批处理模式代表自动重新连接
  • 服务器存活代表着保持活力

相关内容