搭建支持iOS8 on-demend IKEv2 的 VPN (Azure + Ubuntu12.04) - All About Free

大部分搭建过程都是根据这篇教程进行的,但是由于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的映射,之后连接正常,但是无法访问网络

    之后在查阅了下面的文档后,发现了问题所在

    linux上用strongswan搭建ikev2协议vpn

    strongswan ikev2 server on ubuntu 14.04

    How To Set Up a Firewall Using IPTables on Ubuntu 14.04

    IPsec-based VPN Server (简体中文)

    文章中指出,除了500和4500端口外,还需要放行ESP,于是google之,发现ESP使用TCP 50端口,于是在Azure后台开启TCP 50端口映射,再连接VPN后使用一切正常,至此iOS8 on-demend IKEv2 VPN在Azure平台上架设完成。

Free /
Published under (CC) BY-NC-SA in categories technology