建立VPN连接后,SSH连接中断

Cuo*_*ong 5 linux ssh openvpn

对于我的问题,我进行了很多搜索,但没有找到可行的解决方案,因此我想自己要在这里提出一个问题。

问题:

我有一台运行Ubuntu 14.04的远程服务器(称为A)和本地计算机(称为B)。我可以这样做来建立连接A和B的反向SSH隧道在服务器A:ssh -R 2014:localhost:22 userb @ B在本地计算机B:ssh -p 2014 usera @ localhost

其中用户a和用户b分别是A和B的两个用户。

现在,我将A连接到VPN。成功建立VPN连接后,当前打开的ssh会话不再响应。另外,直到终止VPN连接后,我才能再进入A。

有没有办法让SSH和VPN都开心呢?也许要将SSH会话与VPN分开?(我发现了一种称为拆分隧道的东西,但并没有真正理解它)。有人可以启发我吗?

Joh*_*Doe 5

这可能有点晚了,但是......

问题是 OpenVPN 更改了默认网关,除非您在启动 OpenVPN 之前设置了适当的路由,否则会中断您当前的 SSH 连接。

以下内容对我有用。它使用 iptables 和 ip (iproute2)。下面,假设OpenVPN启动前的默认网关接口为“eth0”。这个想法是确保当与 eth0 建立连接时,即使 eth0 不再是默认网关接口,连接的响应数据包也会再次返回 eth0。

您可以对连接标记、防火墙标记和路由表使用相同的编号。我使用不同的数字来使它们之间的差异更加明显。

# set "connection" mark of connection from eth0 when first packet of connection arrives
sudo iptables -t mangle -A PREROUTING -i eth0 -m conntrack --ctstate NEW -j CONNMARK --set-mark 1234

# set "firewall" mark for response packets in connection with our connection mark
sudo iptables -t mangle -A OUTPUT -m connmark --mark 1234 -j MARK --set-mark 4321

# our routing table with eth0 as gateway interface
sudo ip route add default dev eth0 table 3412

# route packets with our firewall mark using our routing table
sudo ip rule add fwmark 4321 table 3412
Run Code Online (Sandbox Code Playgroud)

===

更新:

以上在 Debian Jessie 上对我来说很好用。但是在较旧的 Wheezy 系统上,我刚刚发现需要在路由表条目中添加“via”:

# our routing table with eth0 as gateway interface
sudo ip route add default dev eth0 via 12.345.67.89 table 3412
Run Code Online (Sandbox Code Playgroud)

其中“12.345.67.89”一定是原来的非VPN网关。


wst*_*ven 1

VPN 通过将默认网关修改为新的隧道接口来搞乱您的路由表。有趣的是,之后您无法启动新的 ssh 连接。所以你是说 ssh -R 2014:localhost:22 userb@B 在通过你的 VPN 时不会连接?

Traceroute 说的是什么?(VPN 加载后)。您的 VPN 提供商没有任何端口限制吗?我的意思是,如果您使用的是商业版。

- - 编辑

您最好的尝试是,在连接到 VPN 时,从服务器 A :

远程登录B 22

看看是否可以向目标发送简单的 TCP SYN。不管怎样,我会很惊讶 hidemyass 不会让你的 ssh 流量通过。

回顾一下,您的 VPN 是否已在您的服务器上配置?您正在尝试通过 VPN 从服务器 B 连接到客户端 A?您应该能够追踪到您的 VPN 公共地址(例如,您可以通过 Whatismyip.com 获得该地址)。

您也可以在客户端上检查来自服务器的远程数据包:

tcpdump -nnXs 0 -i eth0 主机 ip.of.vpn