我的服务器应该连接到 VPN,作为客户。当我运行 OpenVPN 脚本(来自 HMA)时,我的本地计算机通过 SSH 与服务器的连接丢失 - 无法再连接,我必须手动终止 VPN 进程。此外,隐藏的 TOR 服务(.onion 页面)在此期间不可用。
当服务器连接到 VPN 时,TOR 页面是否可用并且我可以通过 SSH 连接?
答案1
问题是默认网关被 OpenVPN 更改,这会中断任何来自非 VPN 接口的连接。Linux 会将对来自真实接口的数据包的响应发送到 VPN 接口之外!您需要在启动 OpenVPN 之前设置适当的路由。
以下内容对我有用。它使用 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 系统上,我发现我需要在路由表条目中添加“via”:
# 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网关。
答案2
我也有类似的问题。我的 Ubuntu 桌面使用 VPN,而我的常规 SSH 连接在家庭网络之外不起作用。
不过,我刚才确实想到了一件事。你还转发了到那台电脑的端口吗?
VPN 从 VPN 站点分配一个新的 IP 地址,因此路由器无法再找到要连接的 IP 地址。
我认为您需要知道 VPN 主机分配的新 IP 地址才能知道要连接到哪个地址。
我只是给出有根据的猜测,而不是已知的解决办法;所以如果它不起作用,请不要辱骂我。:)
经过进一步调查,我发现您需要通过 VPN 转发端口(我认为),因为 VPN 正在重定向端口 80,而您的 SSH 隧道通常使用端口 22。我认为您需要通过 VPN 转发端口 22,这样当您在端口 80 上连接到 VPN 时,它会将您重定向到 SSH 隧道所需的转发端口,即 PuTTy。
我仍然不能 100% 确定这是怎么做的。如果有人能证实这一点,那就太好了。