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


14

我遇到了我无法解决的问题。当我通过SSH登录到VPS并尝试建立该VPS上的VPN连接时,VPS和我的计算机之间的SSH连接丢失。我认为那是因为路由被VPN设置更改了。如何预防呢?


建立VP后如何连接到SSH呢?:p你说对了,这是因为VPN覆盖了路由路径。您可以做的是保持原始路径不变,仅添加额外的VPN路径(除非您想将VPS用作代理。这是另一回事)。您使用哪个客户?
Nikolaidis Fotis 2014年

“尝试在该VPS上建立VPN连接”是什么意思?您是从计算机连接到VPS上的Openvpn服务器吗?您的VPS是否正在连接到在第三台主机上运行的Openvpn服务器?在最后一种情况下,这种VPN连接会推迟一些路由吗?另外,请确认没有NAT转换可到达您的VPS(在其接口上配置的IP地址是否与您在SSH连接中指定的地址相同?
Damiano Verzulli 2014年

@NikolaidisFotis由于VPN正在运行,我无法连接。我使用openvpn客户端。有一个--route-noexec选项可以忽略服务器推送的路由,但是,正如您提到的,当我想使用VPN作为代理时,这无济于事
mic22 2014年

@DamianoVerzulli第二个选择,是路由被推送(但是我认为必须这样做,因为我需要让VPN像代理一样来克隆机器的原始IP地址),而且没有NAT
mic22

Answers:


6

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

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


嘿,谢谢你的建议,但是现在我无法通过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'5

@Housemd hm您需要自己通过tun0进行互联网访问,还是需要从其他地方通过tun0连接的客户端进行互联网访问?
阿努比斯

4

让我们考虑以下情形:

  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接口(假设为该接口分配了10.10.10.2 IP和10.10.10.1 PTP)。

在这个阶段:

  • 如果没有路由从远程OpenVPN服务器推送到本地VPS,则路由术语将保持不变,并且SSH连接将继续存在而没有任何问题。在这种情况下,穿越VPN的唯一流量是定向到远程OpenVPN Server(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链接并进行了相关的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的原始默认网关。

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


感谢您的答复@DamianoVerzulli!未指定默认网关。route add这样的0.0.0.0 gw命令返回SIOCADDRT: Invalid argument
mic22,2014年

这就是我在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开头的行,第二列)轻松获得def-gw
Damiano Verzulli 2014年

netstat -rn结果0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 venet0,我使用的VPS是板载Ubuntu 14.04 Server的OVH基本选项
mic22,2014年

ifconfignetstat -rn输出:goo.gl/TEZ61q
mic22

0

这可以帮助:

放在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否''。


我已经将TCPKeepAlive选项设置为,yes因此这不是一个合适的解决方案
mic22 2014年

0

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

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

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

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


0

我个人比较喜欢将所有与SSH的连接都通过VPN路由。如果在建立VPN之前进行有效的ssh连接,则由于路由更改,它必须重新连接。

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

Host *
   ServerAliveInterval 300
   ServerAliveCountMax 2
   BatchMode yes
  • BatchMode代表自动重新连接
  • ServerAlive代表保持活力

-1

连接VPN后,ssh会断开连接,因为来自服务器的ssh通信会通过VPN服务器。因此,为避免这种情况,请在连接VPN之前运行以下命令。

路由添加-host your-machine-public-ip gw Server-gatway-ip dev eth0

your-machine-public-ip:进行SSH的计算机的IP。Server-gatway-ip:该服务器的网关/路由器的IP

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


这很令人困惑,而且语言似乎倒退了。您是否要添加带有SSH目标的IP地址和本地工作站的默认网关的路由?
rmalayter 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.