建立VPN连接后,SSH连接被搞砸

时间:2014-07-11 09:51:44

标签: linux ssh openvpn

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

问题:

  

我有一个远程服务器(让我们称之为A)和本地计算机(让我们   称之为B),都运行Ubuntu 14.04。我可以建立一个逆转   通过这样做连接A和B的SSH隧道在服务器A:ssh -R   2014:localhost:22 userb @ B在本地计算机B:ssh -p 2014   用户A @本地

     

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

     

现在,我将A连接到VPN。 VPN连接成功后   已建立,目前开放的ssh会议没有回应   了。而且,在我杀死之后,我再也不能进入A.   VPN连接。

有没有办法让SSH和VPN都满意?也许将SSH会话与VPN分开? (我发现了一种叫做分裂隧道的东西,但并没有真正理解它)。有人能为此启发我吗?

2 个答案:

答案 0 :(得分:3)

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

问题是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

===

更新:

以上在Debian Jessie上对我来说很好。但是在一个较老的Wheezy系统上我发现我需要添加"来自"到路由表条目:

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

那里" 12.345.67.89"必须是原始的非VPN网关。

答案 1 :(得分:1)

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

traceroute是什么意思? (一旦加载VPN)。你的vpn提供商没有任何端口限制吗?如果您使用的是商业广告,我的意思是。

---编辑

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

telnet B 22

查看是否可以将简单的TCP SYN转发到目标。无论如何,我很惊讶hidemyass不会让你的ssh流量通过。

总结一下,您的VPN是否在您的服务器上配置? 您是否尝试通过VPN从服务器B连接到客户端A? 您应该能够跟踪到您的VPN公共地址(例如,您可以使用whatismyip.com获取)。

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

tcpdump -nnXs 0 -i eth0 host ip.of.vpn