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


我遇到了一个我无法处理的问题。 当我通过SSH登录VPS并尝试在该VPS上建立VPN连接时,VPS与我的机器之间的SSH连接会丢失。我认为这是因为VPN设置改变了路由。怎么预防?


12
2017-12-07 12:55




VP建立后连接SSH怎么样? :p你是对的,因为VPN会覆盖路由路径。您可以做的是保持原始路径不变,只需添加额外的VPN路径(除非您想将VPS用作代理。这是另一个故事)。你使用哪个客户? - Nikolaidis Fotis
“尝试在该VPS上建立VPN连接”是什么意思?您是从计算机连接到VPS上的Openvpn服务器吗?您的VPS是否连接到在第三台主机上运行的Openvpn服务器?在最后一种情况下,这种VPN连接是否会推回一些路由?另外,请确认没有NAT转换到达您的VPS(在其接口上配置的IP地址与您在SSH连接中指定的IP地址相同? - Damiano Verzulli
@NikolaidisFotis因为VPN正在运行,我无法连接。我使用openvpn客户端。有一个 --route-noexec 忽略服务器推送的路由的选项,但正如您所提到的,当我想使用VPN作为代理时,它没有帮助... - mic22
@DamianoVerzulli第二个选项,是推送路线(但我认为必须这样做,因为我需要VPN作为代理来代替机器的原始IP地址),并且没有没有NAT - mic22


答案:


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

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


5
2018-01-09 08:22



嘿,谢谢你的建议,但现在我无法通过tun0到达互联网。我想我错过了一个网关。有关如何为tun0添加网关的任何想法? ifconfig的相关部分: inet addr:10.56.10.6 P-t-P:10.56.10.5 Mask:255.255.255.255 - Housemd
您需要通过默认ISP网关手动将路由添加到VPN服务器本身,然后通过10.56.10.5为所有其他流量添加默认网关 - Anubioz
对不起,什么?我不知道你刚刚说了什么。你举个例子吗? - Housemd
让我澄清一下 - 我不希望默认路由是通过tun0,但我确实需要tun0才能访问互联网。 - Housemd
@Housemd嗯,您需要自己通过tun0访问互联网,还是需要通过tun0从其他地方连接的客户端才能访问互联网? - Anubioz


让我们考虑以下场景:

  1. 您的VPS有一个以太网接口,配置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),您可以成功建立到4.3.2.1的SSH连接。因此,主机4.3.2.1和9.8.7.6可以成功地相互接触。

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

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

在这个阶段:

  • 如果 没有路由会从远程OpenVPN服务器推送到本地VPS,然后在路由方面没有任何改变,并且您的SSH连接将在没有任何问题的情况下生存。在这种情况下,通过VPN的唯一流量是指向远程OpenVPN服务器的流量(10.10.10.1);

  • 如果 远程OpenVPN服务器将推回某些路由,特别是如果VPS default-gateway将被替换为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链路后,通过VPN(10.10.10.1)进行相关的def-gw替换。

换句话说:一旦建立了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的原始默认网关。

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


1
2017-12-07 23:39



谢谢你的回答@DamianoVerzulli!默认网关未指定。 route add 具有0.0.0.0 gw返回值的命令 SIOCADDRT: Invalid argument - mic22
这就是我在openvpn连接后得到的 [server] Peer Connection Initiated with [AF_INET]64.251.27.139:443; TUN/TAP device tun0 opened; do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0; /sbin/ip link set dev tun0 up mtu 1500; /sbin/ip addr add dev tun0 10.200.1.251/22 broadcast 10.200.3.255; ERROR: Linux route add command failed: external program exited with error status: 2 - mic22
@ mic22:我想知道你的VPS的def-gw是如何指定的,因为在这种情况下这样的VPS无法到达本地子网之外的任何东西(这意味着你的机器 - 能够通过SSH连接 - 和OpenVpn服务器 - 能够建立VPN - 应该是“本地的”,因此,非常无用!)。顺便说一句:当你通过SSH连接时,可以通过“netstat -rn”轻松获得定义(行以0.0.0.0开头,第二列) - Damiano Verzulli
netstat -rn 结果 0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 venet0 我正在使用的VPS是一个带有Ubuntu 14.04服务器的OVH基本选项 - mic22
ifconfig 和 netstat -rn 输出: goo.gl/TEZ61q - mic22


这有助于:

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

man sshd_config | less +/'^ *TCPKeepAlive'

TCPKEEPALIVE

指定系统是否应向其发送TCP keepalive消息   另一边。如果他们被发送,死亡的连接或崩溃之一   的机器将被正确注意到。但是,这意味着   如果路线暂时停止,连接将会死亡,有些人   觉得很烦人。另一方面,如果未发送TCP keepalive,   会话可能无限期地挂在服务器上,留下“鬼”用户   并消耗服务器资源。

默认是 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没有''。


0
2017-12-07 14:44



我已经有了 TCPKeepAlive 选项设置为 yes 所以这不是一个合适的解决方案 - mic22


连接VPN后,ssh断开连接,因为来自服务器的ssh流量通过VPN服务器传输。所以为了避免这种情况,在连接VPN之前运行以下命令。

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

your-machine-public-ip:你从哪里做SSH的机器的IP。 Server-gatway-ip:该服务器的Gatway /路由器的IP

上述命令将通过给定网关重定向流量,而不是通过VPN Server。


-1
2017-11-04 07:28



这令人困惑,语言似乎倒退了。您不想添加具有SSH目标的IP地址和本地工作站的默认网关的路由吗? - rmalayter