对于我的问题,我进行了很多搜索,但没有找到可行的解决方案,因此我想自己要在这里提出一个问题。
问题:
我有一台运行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分开?(我发现了一种称为拆分隧道的东西,但并没有真正理解它)。有人可以启发我吗?
这可能有点晚了,但是......
问题是 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网关。
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
| 归档时间: |
|
| 查看次数: |
7813 次 |
| 最近记录: |