在 Linux 上使用深信服 VPN
因为公司使用 Windows 和 MacOS 的人最多,因此导致两个后果:
- 连接公司内网需要使用的深信服 VPN 基本只支持 Windows 和 MacOS
- 后端 golang 大仓代码基本只能在 MacOS 或者 Linux 上提交和调试
求一下交集可以发现,在贵司使用 Linux 作为开发平台的同学应该很难过。很不幸的是,我刚好属于那种在 Linux (虚拟机里跑 Mint) 上写后端服务的人。
公司买的深信服的 VPN 服务,那个客户端虽然官方宣称支持 ubuntu,但是事实是压根不能用,连接成功后一旦有数据包就自动断开。
官方论坛有人反映过类似的问题,得到的回答千篇一律都是推荐使用 Windows 和 MacOS。
然而让我使用屎一样的 MacOS 是不可能的;让我在自己的主力台式机的 Windows 上装深信服的客户端也是不可能的。
于是经过一番折腾之后,我找到了一个 workaround:搞一个 vm 跑 Windows,用来运行深信服 VPN;然后 mint vm 将内网地址的网络包转发到 windows vm 上。
Let the Hacking Begin
环境如下:
- 物理宿主机 Windows 10
- 虚拟机 vm Windows 8 (使用 win8 是因为这个版本相对资源占用少而且支持 hidpi)
- 虚拟机 vm mint
操作步骤如下:
- vm win8 安装好 sangfor vpn 客户端之后会多一个 sangfor 网卡;vm 自己一开始有一个 NAT 网卡;我们现在再手动加一块 bridge 网卡
需要手动添加 bridge 网卡的目的是,连通 vm win8 和外网,保证 vpn 可以工作 - 设置 sangfor vpn 网卡,将网络共享给 NAT 网卡
注意这一步设置完之后会有两个后果
a. NAT 网卡因为使用了 sangfor vpn,因此再 sangfor vpn 没有网络联通的情况下 NAT 网卡是无法连接外网的。所以我们前面才手动添加了一块 bridge 网卡
b. 因为 Windows 自身的策略问题,NAT 网卡的 IP 地址会自动变成 192.168.137.1。 - 在 vm mint 里首先执行 将 vm mint 的 NAT 网卡也加入到 192.168.137.1 的子网里,保证能和 vm win8 的 NAT 网卡通信。
1
sudo ip a add 192.168.137.2/24 dev ens33
这里ens33
是我的 vm mint NAT 网卡对应的 interface name,你根据自己需要更改。
然后修改路由表:这样目的地是公司内网的数据包就转发到 192.168.137.1 里了1
2
3打一个没必要的马赛克 -..-
sudo ip r add 172.xx.20.0/24 via 192.168.137.1
sudo ip r add 172.xx.21.0/24 via 192.168.137.1 - 因为前面 vm win8 的 NAT 网卡共享了 sangfor vpn 网卡的网络,所以可以正确无误的找到下一跳目标。
注:linux 上设置的改动重启后会自动丢失,需要时候需要重新跑一遍。
结果图