Skip to content

Instantly share code, notes, and snippets.

@losisli
Last active February 28, 2023 22:57
Show Gist options
  • Save losisli/11081793 to your computer and use it in GitHub Desktop.
Save losisli/11081793 to your computer and use it in GitHub Desktop.

测试平台: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

参考链接:

@coolicer
Copy link

不错,有时间要试一下。

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

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

@aguegu
Copy link

aguegu commented Sep 27, 2014

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

@lhxhanson
Copy link

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

@javasboy
Copy link

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

@FiveYellowMice
Copy link

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

@shuangzhijinghua
Copy link

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

@jackyshan
Copy link

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

这个受用了

@minwe
Copy link

minwe commented Sep 15, 2015

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

@xinli-wu
Copy link

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

@bowenliang123
Copy link

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

@dosoos
Copy link

dosoos commented Oct 21, 2015

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

@patrick-bercow
Copy link

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

请叫我雷锋

@hicaoc
Copy link

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
Copy link

gembin commented Feb 26, 2016

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

@softwind0214
Copy link

softwind0214 commented May 17, 2016

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

received ESP_TFC_PADDING_NOT_SUPPORTED, not using ESPv3 TFC padding

不知道有谁碰到过吗?

@meng1999
Copy link

meng1999 commented Jul 8, 2016

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

@minaisland
Copy link

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

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

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

用这段就好了

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

@hanleilei
Copy link

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

@perqin
Copy link

perqin commented Oct 9, 2016

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

@jiavictor
Copy link

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

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