![开启 VPN 后无法连接 SSH 服务器](https://linux22.com/image/1292727/%E5%BC%80%E5%90%AF%20VPN%20%E5%90%8E%E6%97%A0%E6%B3%95%E8%BF%9E%E6%8E%A5%20SSH%20%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
我最近发现,当我的工作站通过 VPN 连接时,无法从远程站点连接到其 SSH 服务器。我确信这是一个路由问题,因为 VPN 客户端将默认网关更改为 ppp 连接的对等方(VPN 服务器)。
有没有解决方案可以让 SSH 服务器和 VPN 客户端都满意?
答案1
当您使用 VPN 时,VPN 网络通常会接管您的整个接口,这样您只能从 VPN 网络上的某个位置进行路由,而不能从整个互联网进行路由。大多数人通过运行虚拟机(virtualbox 等)并连接到该虚拟机中的 VPN 来解决此问题,这样它就不会完全阻断实际机器上的主连接。
答案2
在尝试网络设置之前,请检查相关 ssh 服务器是否在 vpn 接口上侦听。它可能已绑定到服务器上的特定接口。
示例netstat -a
输出:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:ssh *:* LISTEN
本例中的 ssh 服务器监听所有接口(中带星号的表示)*:ssh
。如果您的系统上有一个主机地址,则 ssh 服务器绑定到特定接口。
如果有必要,请编辑/etc/ssh/sshd_config
并设置ListenAddress 0.0.0.0
以进行调整。
如果 sshd 已经监听了正确的接口,请随意进入路由地牢 :-)
答案3
你正在谈论分割隧道。如果你对命令行足够熟悉ROUTE.EXE 工具,您可以检查 VPN 客户端放置的路由,并将其删除。然后重新添加一条路由,以仅允许流向公司 LAN 的流量通过 VPN 网关。
具体来说,你可以使用
route print
...获取路由条目列表。如果看不到输出,则听起来您的 VPN 客户端会放置一个默认 (0.0.0.0) 条目,其中网关是 VPN 对等网关。您可以使用
route delete 10.*
...例如,删除所有指向 10.xxx 网络的条目。
然后您可以使用
route add 10.0.0.0 mask 255.0.0.0 10.0.99.99
...其中第一个地址(10.0.0.0 255.0.0.0)是您的公司网络和掩码,第二个地址是远程网关。
每次连接时您都需要运行它,因此您可能需要编写脚本。
旁注:另一种选择是说服您的公司设置他们的 VPN 以使用拆分隧道;这样做的理由是减少带宽,并且(IANAL)减少通过其网络流动的非公司网络流量的责任。