我尝试过的事情:

我尝试过的事情:

我正在尝试从 Google Cloud 虚拟机连接到 NordVPN 服务器。VPN 连接正常,但是一旦建立连接,现有 SSH 会话就会冻结,并且尝试创建新会话会超时。

该机器运行的是 Ubuntu 16.04。它有一个静态分配的 IP,但未启用 IP 转发。

我尝试过的事情:

我尝试过直接使用 NordVPN 以及使用 OpenVPN。

一切来自:匿名化 OpenVPN 允许 SSH 访问内部服务器

^ 这有区别,因为在 SSH 会话冻结之前,我会从 OpenVPN 中多获得一行日志,而不是没有它。

从:https://askubuntu.com/questions/646051/ssh-to-server-that-is-connected-to-vpn

# 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

从:https://askubuntu.com/questions/893775/cant-ssh-to-server-with-vpn-connection

#!/bin/sh
ip rule add from <your-server-ip> table 128
ip route add table 128 to <your-server-subnet> dev <your-interface>
ip route add table 128 default via <server-gateway>

^ 这两者似乎都没有改变任何东西,有或没有它们似乎没有什么区别。但我不确定我是否使用了正确的子网。我能找到的最好的是 Google Cloud CIDR 35.224.0.0/1235.240.0.0/1335.208.0.0/12

从:防止在服务器机器上登录 VPN 后丢失 SSH 连接

route add -host <my-ip> gw <default gateway>

^ 这会阻止 SSH 会话终止,但实际上不会有流量通过 VPN。

由于我没有主意了,所以现在非常感激任何建议。

答案1

问题是,当您连接到 VPN 时,ssh 流量开始通过 VPN。这意味着连接ssh无法继续(因为您更改了端点)。

这个想法是使固定ssh 流量的路由,以便它继续流经同一个接口(我稍微简化了一下,这在更复杂的环境中不一定有效)。

因此,删除您迄今为止添加的所有规则以解决问题,从头开始。然后,通过 进行连接ssh

执行ip route list以获取默认路由信息(我猜您当前的 ssh 流量使用该信息),您将看到类似以下内容:

# ip route list
default via 172.24.1.1 dev DEVICE onlink 

现在为您的 ssh 流量添加一条明确的路由(更改 DEVICE 以匹配默认路由中的路由):

# ip route add your.ssh.remote.address dev DEVICE

启动 VPN 不应停止您的 ssh 会话。启动 VPN 后,您可以#ip route list检查手动添加的路由是否仍然存在。如果不存在,VPN 可能会删除这些路由。

相关内容