在Amazon EC2(Linxu AMI)上搭建IKEv1/IKEv2 VPN

=====update20140421
两篇相关文章我觉得不错,贴上
http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan&variant=zh
http://bao3.blogspot.com/2013/05/racoonstrongswanvpn.html
=====
这里主要参考了http://blog.ltns.info/linux/pure_ipsec_multi-platform_vpn_client_debian_vps/
这个博主好像还是hp的好基友啊。
之前弄了l2tp,感觉不是特别有意思,断线了就断了。IKEv2的VPN一个是号称可以断线重连,另一个看起来非常高级(也不能说加密水平就更高,我觉得好像ipsec这几种vpn只要选择足够保密的加密算法好像也差不多,但是从流程上好像有一些安全的改进)。
用Strongswan,我弄了好久终于整明白了,是不是说明我太二了。
之前标出来的博客弄得非常明白,不过还是有一些细节要说一下。
一个是我之前习惯了用apt的包管理,yum不太会用,整了好久才磕磕绊绊的把那些编译用的基础包安装上了。还有一些包是怎么也安不上的,自己编译了两天各种依赖包自己手动编译都没整明白果断放弃的,不过只是对应编译的时候的一个非常生僻的功能,所以果断放弃。这个参数是“–enable-eap-sim-pcsc”,从这个角度我也要吐槽,亚马逊的那个LinuxAMI(也就是CentOS)太保守了……某些软件版本太旧了。所以那个蛋疼啊。怎么就不学debian多整几个源有的选也好啊。
我用的是strongswan最新的5.11开发版本,和4版本的有一些不一样。
第5版本的一些变动就是取消了–enable-cisco-quirks等参数,所以不要加,当然加了也没事,到时候编译的时候会提示你的。其实里面有很多用不到的,目测把里面带“sim”的参数去掉都是可以的。
我自己改过之后的参数如下,

./configure --prefix=/usr --sysconfdir=/etc  --enable-openssl --enable-nat-transport --disable-mysql --disable-ldap --disable-static --enable-shared --enable-md4 --enable-eap-mschapv2 --enable-eap-aka --enable-eap-aka-3gpp2 --enable-eap-gtc --enable-eap-identity --enable-eap-md5 --enable-eap-peap --enable-eap-radius --enable-eap-sim --enable-eap-sim-file --enable-eap-simaka-pseudonym --enable-eap-simaka-reauth --enable-eap-simaka-sql --enable-eap-tls --enable-eap-tnc --enable-eap-ttls --enable-kernel-libipsec


=====
update Mar04, 2014
openvz的vps 要加入–enable-kernel-libipsec参数
=====
update Apr19,2014
先安装编译依赖包

 yum install gcc gcc-c++ gcc-g77 flex bison autoconf automake bzip2-devel zlib-devel ncurses-devel libjpeg-devel libpng-devel libtiff-devel freetype-devel pam-devel openssl-devel libxml2-devel gettext-devel pcre-devel
//可以加上下面的试试
yum groupinstall "Development tools"

最后参数使用

 ./configure --prefix=/usr --sysconfdir=/etc  --enable-openssl --enable-nat-transport --disable-mysql --disable-ldap --disable-static --enable-shared --enable-md4 --enable-eap-mschapv2 --enable-eap-aka --enable-eap-aka-3gpp2 --enable-eap-gtc --enable-eap-identity --enable-eap-md5 --enable-eap-peap --enable-eap-radius --enable-eap-sim --enable-eap-sim-file --enable-eap-simaka-pseudonym --enable-eap-simaka-reauth --enable-eap-simaka-sql --enable-eap-tls --enable-eap-tnc --enable-eap-ttls --enable-kernel-libipsec  --enable-eap-identity --enable-eap-md5 --enable-eap-mschapv2  --enable-eap-tls   --enable-eap-ttls    --enable-eap-peap    --enable-eap-tnc    --enable-eap-dynamic  --enable-eap-radius   --enable-xauth-eap   --enable-xauth-pam    --enable-dhcp    --enable-openssl  --enable-addrblock --enable-unity --enable-certexpire --enable-radattr --enable-tools --enable-openssl --disable-gmp

=====
然后就是make和make install,此处不细表了。
然后配置配置文件,我参考了上面提到的博客和另一个博客http://bao3.blogspot.com/2013/05/racoonstrongswanvpn.html
首先是/etc/ipsec.conf #注意原来的内容全部删掉,否则可能因为空格的原因,启动ipsec的时候报错。

config setup
        uniqueids=never
        strictcrlpolicy=no
conn ikev1
        keyexchange=ikev1
        authby=xauthpsk
        xauth=server
        left=%defaultroute
        leftsubnet=0.0.0.0/0
        leftfirewall=yes
        right=%any
        rightsubnet=10.11.0.0/24
        rightsourceip=10.11.0.0/24
        auto=add
conn ikev2
        keyexchange=ikev2
        ike=aes256-sha1-modp1024!
        esp=aes256-sha1!
        dpdaction=clear
        dpddelay=300s
        rekey=no
        left=%defaultroute
        leftsubnet=0.0.0.0/0
        leftauth=pubkey
        leftcert=serverCert.pem
        leftid=ikev2
        right=%any
        rightsourceip=10.11.1.0/24
        rightauth=eap-mschapv2
        rightsendcert=never
        eap_identity=%any
        auto=add

下面是/etc/ipsec.secrets
XAUTH就是IKEv1加密,EAP用的是IKEv2。

# /etc/ipsec.secrets - strongSwan IPsec secrets file
: PSK "your secrets"
username1 : XAUTH "password1"
: RSA xxxx.pem
username2 : EAP "password2"

然后是/etc/strongswan.conf就在原有的加上dns选项就行,别的不用管,反正是自己用,粗放一点没什么。

charon {
        dns1 = 8.8.8.8
        dns2 = 208.67.222.222
}
pluto {
        dns1 = 8.8.8.8
        dns2 = 208.67.222.222
}

然后设置防火墙规则iptables,这一段我完全引用ltns.info的文章了。
添加iptables命令,修改ip_forward以实现NAT,然后重启ipsec

iptables -A INPUT -p udp --dport 500 -j ACCEPT
iptables -A INPUT -p udp --dport 4500 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.11.0.0/24 -o eth0 -j MASQUERADE
iptables -A FORWARD -s 10.11.0.0/24 -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 10.11.1.0/24 -o eth0 -j MASQUERADE  #win7和android vpn客户端用
iptables -A FORWARD -s 10.11.1.0/24 -j ACCEPT      #win7和android vpn客户端用
ipsec restart

注:为避免VPS重启后NAT功能失效,可以把如上8行命令添加到 /etc/rc.local 文件中,添加在exit那一行之前即可。
下面证书问题我也不写了,这一段写的足够了。
然后就大功告成了。

3 Replies to “在Amazon EC2(Linxu AMI)上搭建IKEv1/IKEv2 VPN”

  1. 看起来有点儿复杂和凌乱,有木有清晰的思路和方法教程?谢谢指导。微软的云服务器,centos的。

    1. 是有点凌乱,可是我觉得你就按着这个步骤做就好了啊。
      你有什么具体问题可以大家探讨啊。
      要么你看开头那个openSUSE的教程,简单明了。

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.