Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?

测试平台:DigitalOcean VPS ubuntu14.04 x64, strongswan5.2.2

运行以下命令请使用root权限

一:安装strongswan

由于ubuntu软件仓库中strongswan版本较低,因此从官网源码编译安装

apt-get install build-essential     #编译环境
aptitude install libgmp10 libgmp3-dev libssl-dev pkg-config libpcsclite-dev libpam0g-dev     #编译所需要的软件

strongswan官网 http://www.strongswan.org/

5.2.2版本地址 http://download.strongswan.org/strongswan-5.2.2.tar.bz2

注:对于更新的版本,不排除该教程某些地方有失效的可能,请灵活处理

wget http://download.strongswan.org/strongswan-5.2.2.tar.bz2
tar -jxvf strongswan-5.2.2.tar.bz2 && cd strongswan-5.2.2
./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
make && make install

二:生成、安装证书

win7+和Android、wp8.1等平台的VPN客户端走ikev2协议,需要制作相应的证书

1.先生成根证书

ipsec pki --gen --outform pem > caKey.pem
ipsec pki --self --in caKey.pem --dn "C=CN, O=strongSwan, CN=strongSwan CA" --ca --outform pem > caCert.pem

2.然后是服务器端的证书

ipsec pki --gen --outform pem > serverKey.pem
ipsec pki --pub --in serverKey.pem | ipsec pki --issue --cacert caCert.pem --cakey caKey.pem --dn "C=CN, O=strongSwan, CN=VPS的公网ip或域名" --san="VPS的公网ip或域名" --flag serverAuth --flag ikeIntermediate --outform pem > serverCert.pem

3.客户端的证书

ipsec pki --gen --outform pem > clientKey.pem
ipsec pki --pub --in clientKey.pem | ipsec pki --issue --cacert caCert.pem --cakey caKey.pem --dn "C=CN, O=strongSwan, CN=client" --outform pem > clientCert.pem

生成的客户端证书 clientCert.pem 不能直接导入到win7+或Anroid设备中,需先转换为.p12格式。执行后会提示要设置证书使用密码,可以设置一下密码也可以直接回车(密码为空)。

openssl pkcs12 -export -inkey clientKey.pem -in clientCert.pem -name "client" -certfile caCert.pem -caname "strongSwan CA" -out clientCert.p12

4.安装证书

cp caCert.pem /etc/ipsec.d/cacerts/
cp serverCert.pem /etc/ipsec.d/certs/
cp serverKey.pem /etc/ipsec.d/private/

客户端安装caCert.pem与clientCert.pem(clientCert.p12),下载文件可使用ftp软件,或使用cat caCert.pemcat clientCert.pem命令,将打印出的内容直接复制到本地即可。

三:配置strongswan

1: /etc/ipsec.conf

config setup
    strictcrlpolicy=no
    uniqueids=no #允许多设备同时在线
conn windowsphone
    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="C=CN, O=strongSwan, CN=X.X.X.X" #C=国家,CN=自己vps的公网ip
    right=%any
    rightsourceip=10.11.1.0/24 #为客户端分配的虚拟地址池
    rightauth=eap-mschapv2
    rightsendcert=never
    eap_identity=%any
    auto=add

2: /etc/ipsec.secrets

: RSA serverKey.pem
用户名1 : EAP "密码1" #win7+
wp设备名称\用户名2 : EAP "密码2"  #仅对windowsphone8.1设备

对于windowsphone8.1,在客户端输入的用户名发送到服务器显示为设备名称\用户名的形式,故认证需加上设备名称,设备名称在设置-关于-手机信息 中查看

3: /etc/strongswan.conf

#加入分配的dns
charon {
    dns1 = 8.8.8.8
    dns2 = 208.67.222.222
}

四:配置 Iptables 转发

iptables -A INPUT -p udp --dport 500 -j ACCEPT
iptables -A INPUT -p udp --dport 4500 -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  #地址与上面地址池对应
iptables -A FORWARD -s 10.11.1.0/24 -j ACCEPT     #同上
#为避免VPS重启后NAT功能失效,可以把如上5行命令添加到 /etc/rc.local 文件中,添加在exit那一行之前即可。

五:启动strongswan:

后台运行:

ipsec start 

滚动日志:

ipsec start --nofork

参考链接:

不错,有时间要试一下。

我也是DO的VPS, 不过是ubuntu 12.04 32bit

我已经配置好了,可以用了。请问你说要加的8行命令,是哪8条。
还是只是“四:配置 Iptables 转发”的这几条?

aguegu commented Sep 27, 2014

正准备写博客,看到你的教程,感觉不用写了,我vps是 东京 linode 的 archlinux 。不过感觉性能方面还有待优化。

你好,请问 “wp设备名称\用户名2 : EAP "密码2" #仅对windowsphone8.1设备” 这里是什么意思?
设备名称的格式是什么?还是随便写?

tar -jxvf strongswan-5.2.2.tar.bz2 & cd strongswan-5.2.2 少了个 &,应该是
tar -jxvf strongswan-5.2.2.tar.bz2 && cd strongswan-5.2.2

Fedora没有找到ipsec命令怎么办……

如果是IPV6,让程序分配IPV6公网地址而不经过NAT,怎么写?

uniqueids=no #允许多设备同时在线

这个受用了

minwe commented Sep 15, 2015

EI Capitan 原生支持 IKEv2 了,但试了一下没有成功。
不知道楼主有没有实现过过兼容 IE Capitan 的配置?
谢谢。

请问LZ知不知道EI Capitan 和iOS 9 上的ikev2 里面remote id 和 local id 怎么填写?

同问,iOS 9 上的ikev2 里面remote id是必填项,应该填写什么内容?

dosoos commented Oct 21, 2015

客户端上怎么配置能说下嘛小白表示还是很难用

leftid 和 rightid 分别对应 ios中的remoteid 和localid

请叫我雷锋

hicaoc commented Jan 5, 2016

我在ios9和OS X EI上的ikev2

https://v2ex.com/t/247611

conn %default
left=%defaultroute
leftfirewall=yes
leftsubnet=0.0.0.0/0
leftcert=xxx.cert.pem
right=%any
rightsourceip=10.0.1.0/24
auto=add

conn osx10-ios9-ikev2
keyexchange=ikev2
leftid="xxx.org"
rightid="*@xxx.org"
leftsendcert=always

conn win8-win10-ikev2
keyexchange=ikev2
leftsendcert=always

gembin commented Feb 26, 2016

请教如何配置用mysql 或者sqllite 存用户名密码?

softwind0214 commented May 17, 2016

iOS9 连接之后服务端日志显示

received ESP_TFC_PADDING_NOT_SUPPORTED, not using ESPv3 TFC padding

不知道有谁碰到过吗?

meng1999 commented Jul 8, 2016

http://task.zbj.com/7770338 付费搞strongswan

chawler commented Jul 13, 2016

关于无法访问外部网络的问题

因为下面设置端口转发的代码无效

echo 1 > /proc/sys/net/ipv4/ip_forward

用这段就好了

vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
/sbin/sysctl -p

没有小伙伴遇到过:找不到pki参数的问题么?

perqin commented Oct 9, 2016

你好,我使用Windows 10连接的时候提示IKE authentication credentials are unacceptable是怎么回事?两个客户端证书都安装了。

Windows 10上需要导入的是caCert.pem,而不是Client或者User的。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment