大部分搭建过程都是根据这篇教程进行的,但是由于Azure和Ubuntu12.04的部分包的问题,安装上有一些改动,所以这里记录一下改动的部分。
strongswan的安装
在apt-get中安装的strongswan版本较低,而且没有某些插件支持,所以我们要从源码编译strongswan来安装
安装过程主要参考了这篇文章
#Get Stronswan rebuild deps
sudo apt-get update
sudo apt-get -y install devscripts
sudo apt-get -y build-dep strongswan
# 创建一个用户用来编译strongswan
adduser bobbuilder --shell /bin/bash \
--disabled-password --gecos bobbuilder
# 切换到这个用户
sudo su - bobbuilder
# 下载 Strongswan 5.0.1 的源码,这里可以改成最新版 http://download.strongswan.org/strongswan-5.2.0.tar.bz2
mkdir -p ~/build/ss5
cd ~/build/ss5
apt-get source strongswan
wget http://download.strongswan.org/strongswan-5.0.1.tar.bz2
# 把ubuntu12.04默认的 4.5.2 版本替换成 5.0.1 版本
cd strongswan-4.5.2
uupdate ../strongswan-5.0.1.tar.bz2 -v 5.0.1
# 由于版本的差异,需要进行部分修改
# 同时启用 kernel crypto algos 和 blowfish
# 并且尝试修复不见鸟的 medsrv 插件.
cd ../strongswan-5.0.1
sed -i.bak debian/patches/series \
-e ’s/^0001/#0001/g’ \
-e ’s/^0002/#0002/g’ \
-e ’s/^glib-include/#glib-include/g’
sed -i.bak debian/rules \
-e ’s/enable-led/enable-led --enable-af-alg --enable-blowfish /g’ \
-e ‘s|\$(CFLAGS)|\$(CFLAGS) -include \$(CURDIR)/config.h|g’ \
-e ‘s|-Xmedsrv||g’
# IKEv1 “Pluto” 不再支援 5.0+ 版本
sed -i.bak debian/strongswan/DEBIAN/control \
-e ‘s|strongswan-ikev1, ||g’
sed -i.bak debian/control \
-e ‘s|, strongswan-ikev1||g’ \
-e ‘/Package: strongswan-ikev1/,/IKEv2 daemon./d’
# 木用
sed -i.bak debian/strongswan.docs \
-e ‘/CREDITS/d’
# 移动库到新的位置
sed -i.bak debian/libstrongswan.install \
-e ‘s|usr/lib/lib|usr/lib/ipsec/lib|g’ \
-e ‘s|usr/lib/$|usr/lib/ipsec/|g’
sed -i.bak debian/strongswan-ikev2.install \
-e ‘s|usr/lib/lib|usr/lib/ipsec/lib|g’ \
-e ‘s|usr/lib/$|usr/lib/ipsec/|g’
# Xauth 部件有了新名字
sed -i.bak debian/libstrongswan.install \
-e ‘s|libstrongswan-xauth.so|libstrongswan-xauth-generic.so|g’
# networkmanager的样子
sed -i.bak2 debian/rules \
-e ‘s|plugins/libstrongswan-nm.so\*|charon-nm|g’ \
-e ‘s|strongswan-nm/usr/lib/ipsec/plugins/|strongswan-nm/usr/lib/ipsec/|g’ \
-e ‘s|-Xlibstrongswan-nm.so|-Xcharon-nm|g’
# 把以前不存在的插件启用
echo “usr/lib/ipsec/medsrv/* usr/lib/ipsec/medsrv/“ \
>>debian/libstrongswan.install
echo “usr/lib/ipsec/libtls.so* usr/lib/ipsec/“ \
>>debian/libstrongswan.install
echo “usr/lib/ipsec/libsimaka.so* usr/lib/ipsec/“ \
>>debian/libstrongswan.install
echo “usr/lib/ipsec/libradius.so* usr/lib/ipsec/“ \
>>debian/libstrongswan.install
echo “usr/lib/ipsec/libtnccs.so* usr/lib/ipsec/“ \
>>debian/libstrongswan.install
echo “usr/lib/ipsec/plugins/libstrongswan-af-alg.so* usr/lib/ipsec/plugins/“ \
>>debian/libstrongswan.install
echo “usr/lib/ipsec/plugins/libstrongswan-blowfish.so* usr/lib/ipsec/plugins/“ \
>>debian/libstrongswan.install
echo “usr/lib/ipsec/plugins/libstrongswan-cmac.so* usr/lib/ipsec/plugins/“ \
>>debian/libstrongswan.install
echo “usr/lib/ipsec/plugins/libstrongswan-pkcs8.so* usr/lib/ipsec/plugins/“ \
>>debian/libstrongswan.install
echo “usr/lib/ipsec/plugins/libstrongswan-nonce.so* usr/lib/ipsec/plugins/“ \
>>debian/libstrongswan.install
echo “usr/lib/ipsec/plugins/libstrongswan-tnc-tnccs.so* usr/lib/ipsec/plugins/“ \
>>debian/libstrongswan.install
# 改一个包名,让他看起来不像是 Ubuntu 官方支援的包
sed -i.bak debian/changelog \
-e’s/(5.0.1-0ubuntu1)/(5.0.1-0hackhackbork0’$(lsb_release -cs)’)/g’
# 好啦~大功告成,编译!
# 在 Ubuntu 12.04 中编译可能会有点错误,但是错误是出现在最后的清理阶段
# 所以我们可以无视这些错误,继续下面的内容就行了
dpkg-buildpackage -j2 -b -us -uc -tc -nc
# 切换到root权限
exit
sudo su -
# 作者很确定最新的 network-manager 部件有问题,所以压根就不想着尝试安装它了
cd ~bobbuilder/build/ss5
apt-get -y install ipsec-tools
DEBIAN_FRONTEND=noninteractive dpkg -i \
strongswan_5.0.1-0hackhackbork0*.deb \
strongswan-ikev2_5.0.1-0hackhackbork0*.deb \
strongswan-starter_5.0.1-0hackhackbork0*.deb \
libstrongswan_5.0.1-0hackhackbork0*.deb
# 禁止strongswan的更新
echo “strongswan hold”|dpkg --set-selections
echo “strongswan-ikev2 hold”|dpkg --set-selections
echo “strongswan-starter hold”|dpkg --set-selections
echo “libstrongswan hold”|dpkg --set-selections
ipsec的配置
完全依照这篇教程进行,但是需要注意,在配置防火墙的时候,推荐直接使用iptables而不是ufw。
同时,我在配置
ipsec.conf
文件的时候遇到一点问题,就是按照教程中我设置rightid=*@every.string.you.want
之后,比如我设置rightid=*@aboutfree
后,始终验证无法通过,所以我将every.string.you.want
设置成我ssl证书的域名后,神奇般的验证成功了。Azure端口映射的设置
在所有教程内容搞定之后,我们依旧是无法连接到VPN的,根据教程中的iptables的设置,我尝试在Azure后台开启了UDP 500和UDP 4500的映射,之后连接正常,但是无法访问网络
之后在查阅了下面的文档后,发现了问题所在
strongswan ikev2 server on ubuntu 14.04
How To Set Up a Firewall Using IPTables on Ubuntu 14.04
文章中指出,除了500和4500端口外,还需要放行ESP,于是google之,发现ESP使用TCP 50端口,于是在Azure后台开启TCP 50端口映射,再连接VPN后使用一切正常,至此iOS8 on-demend IKEv2 VPN在Azure平台上架设完成。