本文由 Trusty Wolf 发表于 V2EX, 通过 CC BY-SA 3.0 协议授权, 转载请注明出处。
IKEv2 作为最新的 IPsec 秘钥交换协议,大幅增强了对移动设备等经常变化的网络环境的支持(MOBIKE)。 其对于 NAT traversal 的功能支持也较 IKEv1 大幅改观。 但是由于相关软件的学习路线较为陡峭,且中文资料较少,对新手并不太友好。 小狼也是经过长时间的入门和摸索,逐步积累出了以下一些资料和配置文件。 重要的部分都加以中文注释,以降低大家理解的难度。
随着 SSL 证书的廉价化 /免费化,获得一个 SSL 证书也并不是什么复杂的事情。 但是 SSL 证书除了 HTTPS 之外其实还有一个非常实用的功能,进行 IKEv2 身份认证。 当然,由于 SSL 证书的 CA 都是公共的,虽然可以通过 ID 来限制客户端, 但客户端也有可能因为域名被盗等原因有被冒充的风险,所以如果是企业的生产环境, 还是使用自签名的 CA 和证书比较保险。
有人可能会说,用 EAP-MSCHAPv2 多方便,无需客户端证书,设置账号密码即可。 但请注意, MSCHAPv2 是一个非常老的协议,在现时基于 RSA 证书的认证无疑是更优选择。
关于域名的购入(可以使用免费的 eu.org 域名), DNS 的设置以及 SSL 证书的申请这里不再叙述。
请先开启 EPEL 源(不再叙述)
# sudo yum -y install strongswan && sudo systemctl enable strongswan
HQ 端
# sudo vi /etc/strongswan/ipsec.conf
在最后添加一行
include ikev2.conf
然后修改 ikev2.conf 配置文件
# sudo vi /etc/strongswan/ikev2.conf
# ikev2.conf
# 默认连接设置
conn %default
# General Connection Parameters
# IKEv2
keyexchange=ikev2
# 指定加密算法, ESP 包为了兼容 WIN7 添加了 SHA1 支持
# 请参考: http://wiki.strongswan.org/projects/strongswan/wiki/SecurityRecommendations
# 加密算法的选择会对传输性能产生较大影响
# 一般情况下建议注释掉以下两行,在 Branch 端路由器中调整相关设置
ike=aes128-sha256-modp2048,aes256-sha256-modp2048!
esp=aes128-sha256-modp2048,aes128-sha256,aes128-sha1!
# strongSwan 启动时该连接的行为(自动添加连接)
auto=add
# RFC2393 IP 有效载荷压缩协议(IPComp)
compress=yes
# 当意外断开后清除连接, 开启 Dead Peer Detection (DPD)
dpdaction=clear
# 调高 DPD 延时, 让 MOBIKE(IKEv2 Mobility and Multihoming) 起作用
#dpdtimeout=360s
# 关闭服务端的 re-key, 兼容 Windows
rekey=no
# 支持 IKEv2 数据包分片 RFC 7383
# 客户端可能会出现兼容性问题, 请务必测试一下
fragmentation=yes
# 服务器端接口为本机默认路由
left=%defaultroute
# HQ 端虚拟地址
leftsourceip=1.2.3.1
# HQ 端下发默认路由给 Branch 端
leftsubnet=0.0.0.0/0
# 服务器证书
leftcert=server.crt
# 服务器 ID(IOSBranch 端需要输入)
leftid=@server.test.v2ex
# 总是向 Branch 端发送证书(解决 IOSBranch 端兼容问题)
leftsendcert=always
# Branch 端不限制 IP 地址
right=%any
# Branch 端 CA 与 HQ 端一致
rightca=%same
# Branch 端 DNS
rightdns=8.8.8.8
# Windows IKEv2 Machine Certificate
conn IKEv2_WIN
# Branch 端虚拟地址
rightsourceip=1.2.3.2/28
# 指定 Branch 端证书的 ID(SAN 字段), 增强安全性, 适用于使用公共 CA 的场合
# 如果使用自签 CA 和证书, 则无需指定 ID, 注释掉即可
rightid="CN=win.test.v2ex"
# iOS IKEv2 EAP-TLS Certificate
conn IKEv2_iOS
#指定认证模式为 EAP-TLS
rightauth=eap-tls
eap_identity=%identity
# Branch 端虚拟地址
rightsourceip=1.2.3.16/28
# 指定 Branch 端 ID, 增强安全性
rightid=@ios.test.v2ex
接下来申请 SSL 证书,示例里用到了三个,分别是: server.test.v2ex win.test.v2ex ios.test.v2ex 申请完毕之后会得到相应的证书.crt 文件和秘钥.key 文件, 然后为了补全证书链我们还需要 CA.crt 和 ROOT.crt 文件, 这些相信稍微配置过 HTTPS 服务器的各位都应该了解。 在 IKEv2 的服务端,我们只需要 server.test.v2ex 的证书,秘钥以及链证书。
# sudo cp server.crt /etc/strongswan/ipsec.d/certs/
# sudo cp ca.crt /etc/strongswan/ipsec.d/cacerts/
# sudo cp root.crt /etc/strongswan/ipsec.d/cacerts/
# sudo chmod 640 /etc/strongswan/ipsec.d/certs/server.crt
# sudo chmod 640 /etc/strongswan/ipsec.d/cacerts/*.crt
# sudo cp server.key /etc/strongswan/ipsec.d/private/
# sudo chmod 600 /etc/strongswan/ipsec.d/private/server.key
接下来编辑 ipsec.secrets 文件
# sudo vi /etc/strongswan/ipsec.secrets
增加一行
: RSA server.key
接下来进行 Firewalld 防火墙的设置 注意, Firewalld 在设置 MASQUERADE 之后会自动添加 net.ipv4.ip_forward=1, 所以无需修改 /etc/sysctl.conf 文件
# sudo firewall-cmd --permanent --add-service=ipsec
# sudo firewall-cmd --permanent --add-masquerade
# sudo firewall-cmd --reload
最后启动 strongSwan, HQ 端就设置完成了
# sudo systemctl start strongswan
首先我们需要将 win.test.v2ex 和 ios.test.v2ex 的 SSL 证书转换成可导入的 pkcs12 格式
为了安全起见, 最好设置一下导入导出的密码
# openssl pkcs12 -export -out client.pfx -inkey client.key -in client.crt
这样我们就得到了 client.pfx 文件,将其导入至相应客户端中即可。 详情请参考:
iOS 只需要通过邮件和浏览器下载 client.pfx 文件, 打开之后输入密码导入即可。
配置 IKEv2 时注意选择相应的证书配置文件,已经别忘记输入服务器和客户端 ID(即为相应域名)。
Enjoy!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.