伪·如何在 Linux 下使用深信服 SSL VPN
Fri 12 January 2018背景
本文大概会很水……
由于要在外网访问校内的资源,包括实验室的服务器什么的,所以学校提供了接入校内的 VPN 服务。三本院校的采用国内著名的深信服 SSL VPN。众所周知,国内各种企业的产品都是没有 Linux 版本的,所以要在 Linux 下使用深信服的 SSL VPN,还是得装个虚拟机 _(:з」∠)_ 好了,感觉读到这里你要就失望了,哎,没办法呀,有谁去破解下辣鸡深信服的 SSL VPN 协议呗?
配置
嗯,用 qemu 装个 Bugdows,在 Bugdows 上装个深信服的 EasyConnect。
在 Linux 下创建一个 bridge:
ip l add qbr0 type bridge ip l set qbr0 up
启动虚拟机的时候需要给 Windows 添加两块网卡,一块采用 user 模式,也就是 SLiRP 模式,另一块采用 bridge 模式:
qemu-system-x86-64 \ -netdev user,id=mynet0,net=192.168.76.0/24,dhcpstart=192.168.76.9 \ -device virtio-net,netdev=mynet0 \ -netdev bridge,id=mynet1,br=qbr0 \ -device virtio-net,netdev=mynet1 \ ...
这一步 qemu 会利用 qemu-bridge-helper 自动创建一个 tap 设备,并且把这个 tap 连到 qbr0 里。因为 qemu-bridge-helper 是 setuid 的,qemu-bridge-helper 会检查授权,如果这一步出现 ACL 错误提示,需要在 /etc/qemu/bridge.conf 里添加上 allow qbr0 ,如果要允许接入任意的网桥,就添加 allow all 。
启动 Windows,启动 EasyConnect,这时 Windows 下应该出现 3 块网卡,一块 user 模式,我们叫它「Network 1」,一块是 bridge 模式,叫他「Network 2」,还有一个是 SSL VPN 的虚拟网卡,叫它「spicy chicken sangfor」。下面把 Linux 称为 Host,Windows 称为 Guest。
- 「Network 1」用于接入互联网,这块网卡只能从 Guest 访问 Host,没法从 Host 访问 Guest,类似与 vbox 的 NAT 模式;
- 「Network 2」用于 Host 和 Guest 间的相互通信,这里主要是把 Host 的数据传个 VPN;
- 「spicy chicken sangfor」当然是用来访问内网了。
这时候共享 「spicy chicken sangfor」,右键属性 -> 共享 -> 选「Network 2」 -> 确定。之后 Windows 会自动把「Network 2」的 IP 设置成 192.168.137.1,并且在这个网络上启动一个 DHCP 服务器。我不太懂 Windows 为啥要把 IP 改成这个,用原来的不好么?
在 Linux 上对 qbr0 启动 dhcpcd,qbr0 会自动分配到一个 192.168.137.X/24 的地址,当然也可以手动设置,只要在这个网段内就可以了。再配置一下路由表,让内网的 IP 走 qbr0 接口就好了:
ip r add 10.0.0.0/8 via 192.168.137.1 dev qbr0
画张图
其实很好理解,现在访问内网的路由大概是这样:
(VPN) (ICS) Guest(Windows) [Network 1] <----- [spicy chicken sangfor] <----- [Network 2] | ^ | (SLiRP) | -----------------------|-------------------------------------------------|------------- | | v | Host(Linux) [eth0] [qbr0] <- [tap0] | ^ v | target request
EOF