在搬瓦工的CentOS7下搭建Strongswan实现在iOS上按需连接VPN
转载自 http://jannerchang.tumblr.com
亲们我又来了,上次介绍了在搬瓦工CentOS7下配置Cisco Anyconnect和Shadowsocks了,其实还有很高级的玩法我没琢磨明白,比如Anyconnect可以分组来实现不同账号是否需要全局翻墙,还可以用证书登录免去输入密码的麻烦,下次介绍Anyconnect如何用LCP(Launch Center Pro)来快速开关Anyconnect😄
今天来介绍下还是在CentOS下搭建Cisco IPsec VPN并且用Apple Configurator来配置Ondemand方式使用VPN,断线切换网络都会自动连接的✌️
为什么要使用IPsec VPN?因为我在我们的Lifehacker群(178170151)里看到一人转发的文章,大概意思是,在iOS8里,Anyconnect变的很慢了,而且Strongswan支持IKEv1和2了,这就可以用Apple Configurator来配置iOS,达成按需访问的需求了。看到这个我又蠢蠢欲动了,我就赶紧去鼓动Allenforrest去研究,结果这货每次见我叫他都选择性逃避,装作没看到!干!又得自力更生!
经过无数个日日夜夜,查到的全是在Debian和Ubuntu下的教程,各种命令语法跟CentOS还有出入,Allen还是各种躲避。。。经历重新安装Debian后又重新装回CentOS的折腾后,终于搞定了。主要还是参考了iOS8 不越狱翻墙方案和iOS Ondemand IPSec VPN Setup,这两篇都是Debian和Ubuntu,只要稍作改动即可安装到CentOS上,简易教程来🐦。
首先我们来编译Strongswan,因为直接用yum install 的不能用,不解中😖 下载源码和依赖包
wget http://download.strongswan.org/strongswan-5.2.2.tar.bz2
tar xjvf strongswan-5.2.2.tar.bz2; cd strongswan-5.2.2
yum install make gcc gmp-devel
搬瓦工是OpenVZ的所以用下面的命令来配置
./configure --sysconfdir=/etc --disable-sql --disable-mysql --disable-ldap --enable-dhcp --enable-eap-identity --enable-eap-mschapv2 --enable-md4 --enable-xauth-eap --enable-eap-peap --enable-eap-md5 --enable-openssl --enable-shared --enable-unity --enable-eap-tls --enable-eap-ttls --enable-eap-tnc --enable-eap-dynamic --enable-addrblock --enable-radattr --enable-nat-transport --enable-kernel-netlink --enable-kernel-libipsec
开始编译
make && sudo make install
完全没有错误出现✌️
生成证书
开始生成证书想要ssl证书的可以看文章里的链接,有列出哦 建立个临时目录来生成证书,然后复制到/etc/ipsec.d/里
mkdir ~/ipsec_cert && cd ~/ipsec_cert
生成服务器证书
用的是iOS8 不越狱翻墙方案他创建的脚本。SERVER换成泥自己的域名或IP都行
wget https://gist.githubusercontent.com/songchenwen/14c1c663ea65d5d4a28b/raw/cef8d8bafe6168388b105f780c442412e6f8ede7/server_key.sh
sh server_key.sh SERVER
生成客户端证书
同样是他的脚本,这个脚本还会生成一个p12证书,这个证书需要导入到iOS里,USER换成你自己的用户名 EMAIL换成你自己的email。
wget https://gist.githubusercontent.com/songchenwen/14c1c663ea65d5d4a28b/raw/54843ae2e5e6d1159134cd9a90a08c31ff5a253d/client_key.sh
sh client_key.sh USER EMAIL
执行完后把.p12证书和cacerts/strongswanCert.pem 下载到本地来备用
我是在~目录里生成的证书,所以在本地端命令如下:
scp -P ssh端口 root@服务器ip:~/ipsec_cert/janner.p12 ~/
scp -P ssh端口 root@服务器ip:~/ipsec_cert/cacerts strongswanCert.pem ~/
配置Strongswan
编辑 /etc/ipsec.conf
sudo vi /etc/ipsec.conf
config setup
# strictcrlpolicy=yes
# uniqueids = replace
# charondebug="cfg 2, dmn 2, ike 2, net 0" #要看Log时,取消注释本行
conn %default
keyexchange=ikev1
dpdaction=hold
dpddelay=600s
dpdtimeout=5s
lifetime=24h
ikelifetime=240h
rekey=no
left=emptyzone.github.io #这里换成你登录 VPN 用的域名或 IP,与生成证书时相同
leftsubnet=0.0.0.0/0
leftcert=vpnHostCert.pem
leftsendcert=always
right=%any
rightdns=8.8.8.8
rightsourceip=10.0.0.0/8
conn CiscoIPSec
rightauth=pubkey
rightauth2=xauth
auto=add
编辑/etc/ipsec.secrets
sudo vi /etc/ipsec.secrets
#验证用户所需的信息
#用户名 : EAP "密码"
: RSA vpnHostKey.pem
你的用户名 : EAP "你的密码"
配置防火墙
如果你看过我上一篇blog,防火墙就简单配置下,用firewalld很简单 主要就是开放4500、500端口和esp协议
编辑/usr/lib/firewalld/services/ipsec.xml如下:
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>IPsec</short>
<description>Internet Protocol Security (IPsec) incorporates security for network transmissions directly into the Internet Protocol (IP). IPsec provides methods for both encrypting data and authentication for the host or network it sends to. If you plan to use a vpnc server or FreeS/WAN, do not disable this option.</description>
<port protocol="ah" port=""/>
<port protocol="esp" port=""/>
<port protocol="udp" port="500"/>
<port protocol="udp" port="4500"/>
</service>
然后依次输入如下命令就OK了✌️
firewall-cmd --permanent --add-service=ipsec
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload
其他的就是配置分流路由器和开机启动啥的,我都没怎么配置,到此服务器端配置结束😄
你可以把下载的两个证书用email发送到你的iOS上,安装后建立个VPN连接,选IPsec,使用证书,选择你的用户名的证书即可,登录下试试吧。成功后就可以按照我上文所引用的两篇文章来使用Apple Configurator来配置你的描述文件,通用用email发送到iOS上安装即可,断线切换网络都会自动连接,给力吧,可以暂时抛弃Anyconnect了吧,哇咔咔,高级配置如只有特定域名才会连VPN的也能设置,自己可以琢磨了😄
这一切都感谢Allen的逃避!