login到服务器机器上的VPN后,防止SSH连接丢失

我遇到了一个我无法解决的问题。 当我通过SSHlogin到VPS并尝试在该VPS上build立VPN连接时,VPS和我的计算机之间的SSH连接丢失。 我认为这是因为路由被VPN设置改变了。 如何防止呢?

你需要在你的VPS上添加route-nopull选项(并删除redirect-gateway如果存在的话)到OpenVPN客户端的configuration文件中。

这种方式连接到VPN服务器将不会修改您的VPS上的任何路线,所以你将能够设置你自己需要的。

我们来考虑下面的情况:

  1. 您的VPS具有单个以太网接口,configuration了IP地址4.3.2.1/24;
  2. 您的VPS可以通过默认网关4.3.2.254访问Internet
  3. 您的VPS尚未激活任何OpenVPN连接; 因此没有 tun接口激活

在这种情况下,从你的机器上(假设你的机器是9.8.7.6/24,用def-gw 9.8.7.254),你可以成功build立到4.3.2.1的SSH连接。 因此,主机4.3.2.1和9.8.7.6都可以成功地到达对方。

现在,build立这样一个SSH连接,让我们假设:

  1. 你从你的VPS 4.3.2.1启动一个OpenVPN连接;
  2. 因此,一个新的tun0接口将被dinamicallyconfiguration(假设它将被分配一个10.10.10.2 IP,10.10.10.1 PTP)。

在这个阶段:

  • 如果没有路由将从远程OpenVPN服务器推送到您的本地VPS,那么在路由方面没有任何改变,您的SSH连接将继续存在而没有任何问题。 在这种情况下,唯一通过VPN的stream量是指向远程OpenVPN服务器(10.10.10.1)的stream量。

  • 如果远程OpenVPN服务器将推回一些路由,特别是如果VPS默认网关将被10.10.10.1(远程OpenVPN端点)replace, 那么你有问题。 在这种情况下,您需要在VPN中隧道传输IPstream量(除了OpenVPN本身)。

在第二种情况下(在build立VPN连接之后立即replacedefgw),由于路由不对称,以前的SSH连接将“挂起”:

  • 从您的机器(9.8.7.6)到VPS(4.3.2.1)的stream量将通过前一个永不改变的pathstream动;
  • 从VPS(4.3.2.1)到您的机器(9.8.7.6)的stream量:
    • 没有VPN(因此,最初)通过4.3.2.254网关路由;
    • build立VPN链接后,通过相关的def-gwreplace,通过VPN路由(10.10.10.1)。

换句话说:只要build立了VPN连接,从VPS到你的机器的返回路线就会改变,这不是一件好事情(沿返回path的几个networking设备可以识别这种不对称path和简单的丢包)。

此外,您的远程OpenVPN服务器充当NAT-Box的可能性很高:来自VPN的所有stream量都将使用远程OpenVPN服务器的公共IP地址进行NAT。 如果这是真的,那么事情不再是……“不好”,但肯定是“坏”的,至于你的SSH连接:返回stream量,除了回到不同的路线,是回到你的机器一个不同的源IP (VPN服务器的公共接口之一)。

如何解决这个问题?

确实很容易。

只需指示您的VPS服务器不要沿着VPN将stream量路由到您的机器,而是依靠先前的路线 。 在启动OpenVPN之前,应该像添加一样简单:

  route add -host 9.8.7.6 gw 4.3.2.254 

哪里:

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

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

这可以帮助:

TCPKeepAlive=yes放在你的/etc/ssh/sshd_config

 man sshd_config | less +/'^ *TCPKeepAlive' 

TCPKEEPALIVE

指定系统是否应将TCP保持活动消息发送到另一端。 如果他们被发送,死亡的连接或其中一台机器崩溃将适当注意到。 然而,这意味着如果路线暂时停下来,连接就会死亡,有些人会觉得烦人。 另一方面,如果TCP保持活动未被发送,则会话可能无限期地挂在服务器上,留下“鬼”用户并消耗服务器资源。

缺省值为“ yes'' (to send TCP keepalive messages), and the server will notice if the network goes down or the client host crashes. This avoids infinitely hanging sessions. To disable TCP keepalive messages, the value should be set to yes'' (to send TCP keepalive messages), and the server will notice if the network goes down or the client host crashes. This avoids infinitely hanging sessions. To disable TCP keepalive messages, the value should be set to yes'' (to send TCP keepalive messages), and the server will notice if the network goes down or the client host crashes. This avoids infinitely hanging sessions. To disable TCP keepalive messages, the value should be set to no。

一旦连接VPN后,ssh越来越断开连接,因为ssh通过VPN服务器的服务器stream量。 所以要避免在连接VPN之前运行下面的命令。

route add -host your-machine-public-ip gw Server-gatway -ip dev eth0

your-machine-public-ip:你的机器的IP地址。 Server-gatway-ip:该服务器的Gatway /路由器的IP

上述命令将通过给定的网关不通过VPN服务器redirectstream量。