我正在尝试从 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/12
、35.240.0.0/13
和35.208.0.0/12
。
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 可能会删除这些路由。