OpenVZ上使用IPSec
OpenVZ核心在042stab084.8
及以后的版本可以在container内部使用IPSec。提供IPSec支持的OpenVZ VPS商家不是很多,所以如果打算在OpenVZ上搭建VPN使用IKEv1/IKEv2的话请务必先咨询服务商,并且要使用IPSec的话需要container内部的系统是x64(与host的架构一致)。
Ubuntu 14.04的Strongswan里面带有kernel-libipsec
插件,理论上凭借这个加上合适的OpenVZ平台就可以使用IKEv1了。然而由于源代码里面的一个疏忽(debian/rules里面dh_install
的选项-Xlibstrongswan-kernel
不拷贝安装的内核插件,而很不幸地kernel-libipsec
正好是内核插件),实际提供的二进制包libstrongswan-kernel-libipsec
里面没有提供/usr/lib/ipsec/plugins/libstrongswan-kernel-libipsec.so
这个文件,因而无法使用kernel-libipsec
。
解决办法很简单,用apt-get把源代码下回来,./configure --enable-kernel-libipsec && make
之后能在src/libcharon/plugins/kernel_libipsec/.libs/
里面找到编译好的libstrongswan-kernel-libipsec.s
o,拷到/usr/lib/ipsec/plugins/
即可。 不过目前似乎kernel-libipsec
与L2TP有冲突,即使L2TP设置了type=tunnel
也没用,log里面会提示IPsec SA: unsupported mode
。
更新:在bug tracker里面询问了开发者,libipsec只支持tunnel模式,而iOS和Windows自带的L2TP/IPSec客户端都只支持transport,并且strongswan如果收到客户端请求使用transport模式的话会自动转为transport,忽略掉设定里面的type=tunnel
。