对于我的问题我搜索了很多,但没有找到可行的解决方案,所以我想我自己在这里提出一个问题。
问题:
我有一个远程服务器(让我们称之为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分开? (我发现了一种叫做分裂隧道的东西,但并没有真正理解它)。有人能为此启发我吗?
答案 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