需求
公司内网需要搭建一个VPN服务,这是一个非常常见的功能性需求;为了安全,要求VPN登录时使用动态口令,这是一个非常合理的非功能性需求。
探索
VPN服务比较多,如: L2TP/PPTP/OPENVPN/SSLVPN 等等; 但是支持动态口令的VPN就找不到了;不过,有些VPN支持pam,如:openvpn; 由于vpn代码比较多,编译也比较麻烦,未敢擅自修改;但是openldap的代码看了下不太复杂,于是,通过修改ldap中的验证逻辑,实现了openvpn + pam_ldap的动态口令验证功能。
突然有一天,发现xx宽带连接公司的vpn总是失败,电话询问xx客服,得知根据国家xxxx规定,xx宽带不允许使用vpn。后来发现,其实也不完全禁止,或许是具体实现封杀的技术问题,有时候还是可以使用openvpn的; 尽管如此,关于无法使用vpn的事情总会发生的,还得想其他办法。
据说shadowsocks很有名气,能否借助这个实现呢?尤其openvpn其实也是走某个指定端口的应用层面的服务;搜了一下,果然有: https://github.com/shadowsocks/shadowsocks/wiki/Connect-to-OpenVPN-over-Shadowsocks (点进去才发现,该项目已被我star多时了)
不过,这个有两个问题:
- 对于不懂技术的同事来讲,使用起来有点儿难度,需要配置shadowsocks客户端(如果能写个包装器,把shadowsocks和openvpn包装起来就方便多了)
- 如果要shadowsocks到公司内部,也必然要考虑到同样的验证问题,就是:shadowsocks需要支持动态口令; 还好这个修改起来应该不太复杂,应该比修改openldap要简单的多吧!
参考资料:
- http://hyspace.io/posts/2015/08/22/%E7%BA%AA%E5%BF%B5shadowsocks/
- https://ericfu.me/fight-with-greatwall-conclusion/
vpn自动安装脚本(配置过程太酸爽)
- IKEv2 on Debian 7 x64/x32 and Debian 8 magic282/One-Key-L2TP-IKEV2-Setup
- IKEv2 on CentOS & Ubuntu CENTOS/UBUNTU一键安装IPSEC/IKEV2 VPN服务器
- OpenVPN on Debian, Ubuntu and CentOS Nyr/openvpn-install
- Shadowsocks on Debian (编译安装) Debian下shadowsocks-libev一键安装脚本
site-to-site vpn : http://ostolc.org/category/vpn.html