IKEv2 VPN 部署教程
# 前言
IKEv2 是目前最推荐的 VPN 协议之一,相比其他协议具有以下优势:
- 无需安装客户端:iOS、macOS、Windows 原生支持
- 连接速度快:IKEv2 握手比 IKEv1 更高效
- 稳定性好:支持 MOBIKE,网络切换时自动重连
- 安全性高:使用强加密算法
本文记录在 Ubuntu 22.04 服务器上部署 IKEv2 VPN 的完整过程,以及踩坑经验。
# 环境信息
| 项目 | 详情 |
|---|---|
| 操作系统 | Ubuntu 22.04 LTS |
| VPN 域名 | vpn.example.com(替换为你的域名) |
| 服务器 IP | YOUR_SERVER_IP(替换为你的服务器 IP) |
| VPN 软件 | strongSwan |
| 证书 | Let's Encrypt |
# 一、域名解析
首先确保域名已解析到服务器 IP:
dig +short vpn.example.com
# 应返回服务器 IP
1
2
2
# 二、安装 strongSwan
# 安装必要软件
apt-get update
apt-get install -y strongswan libstrongswan-standard-plugins \
strongswan-libcharon libcharon-extra-plugins \
certbot iptables-persistent
1
2
3
4
5
2
3
4
5
# 三、申请 SSL 证书
IKEv2 需要证书认证,使用 Let's Encrypt 申请:
# 临时停止 Web 服务器(如果占用 80 端口)
systemctl stop caddy
# 申请证书(替换为你的域名和邮箱)
certbot certonly --standalone \
-d vpn.example.com \
--non-interactive \
--agree-tos \
--email your@email.com \
--key-type rsa
# 重启 Web 服务器
systemctl start caddy
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
证书位置:
- 证书:
/etc/letsencrypt/live/vpn.example.com/cert.pem - 私钥:
/etc/letsencrypt/live/vpn.example.com/privkey.pem - CA链:
/etc/letsencrypt/live/vpn.example.com/chain.pem
# 四、配置 strongSwan
# 4.1 复制证书到 strongSwan 目录
# 复制证书和私钥(替换域名)
cp /etc/letsencrypt/archive/vpn.example.com/cert1.pem /etc/ipsec.d/certs/cert.pem
cp /etc/letsencrypt/archive/vpn.example.com/privkey1.pem /etc/ipsec.d/private/privkey.pem
# 设置权限
chmod 600 /etc/ipsec.d/private/privkey.pem
chmod 644 /etc/ipsec.d/certs/cert.pem
1
2
3
4
5
6
7
2
3
4
5
6
7
# 4.2 配置 ipsec.conf
编辑 /etc/ipsec.conf:
# IKEv2 VPN Configuration
config setup
charondebug="ike 2, knl 2, cfg 2"
conn ikev2-vpn
auto=add
compress=no
type=tunnel
keyexchange=ikev2
fragmentation=yes
rekey=no
# 加密算法(兼容 iOS 和 Windows)
ike=aes256-sha256-modp1024,aes256-sha1-modp1024,aes128-sha256-modp1024,aes128-sha1-modp1024,aes256-sha256-modp2048,aes128-sha256-modp2048,aes256gcm16-prfsha256-modp2048!
esp=aes256-sha256,aes128-sha256,aes256-sha1,aes128-sha1,aes256gcm16!
# Server (left) side
left=%any
leftid=@vpn.example.com # 替换为你的域名
leftcert=cert.pem
leftsendcert=always
leftsubnet=0.0.0.0/0
# Client (right) side
right=%any
rightid=%any
rightauth=eap-mschapv2
rightdns=1.1.1.1,1.0.0.1
rightsourceip=10.101.0.0/16
eap_identity=%identity
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 4.3 配置 ipsec.secrets
编辑 /etc/ipsec.secrets:
# RSA private key
: RSA /etc/ipsec.d/private/privkey.pem
# EAP credentials(替换为你的用户名和密码)
your_username : EAP "your_password"
1
2
3
4
5
2
3
4
5
chmod 600 /etc/ipsec.secrets
1
# 五、配置防火墙
# 5.1 开放端口
# IPSec 端口
iptables -A INPUT -p udp --dport 500 -j ACCEPT
iptables -A INPUT -p udp --dport 4500 -j ACCEPT
# 保存规则
netfilter-persistent save
1
2
3
4
5
6
2
3
4
5
6
# 5.2 配置 NAT 和转发
# 启用 IP 转发
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
# 清空并重新配置 FORWARD 链
iptables -F FORWARD
# 允许 VPN 客户端流量
iptables -A FORWARD -s 10.101.0.0/16 -j ACCEPT
iptables -A FORWARD -d 10.101.0.0/16 -j ACCEPT
# 允许已建立的连接
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# NAT 规则
iptables -t nat -A POSTROUTING -s 10.101.0.0/16 -o eth0 -j MASQUERADE
# 保存规则
netfilter-persistent save
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 六、启动服务
systemctl restart strongswan-starter
systemctl enable strongswan-starter
1
2
2
# 七、客户端配置
# 7.1 iOS / macOS
- 下载
.mobileconfig配置文件(可由脚本生成) - 设置 → 已下载描述文件 → 安装
- 设置 → VPN → 连接
# 7.2 Windows
- 设置 → 网络和 Internet → VPN → 添加 VPN
- 配置:
- VPN 类型:IKEv2
- 服务器地址:
vpn.example.com(替换为你的域名) - 用户名:你的用户名
- 密码:你的密码
# 7.3 Android
- 设置 → 网络 → VPN → 添加 VPN
- 类型:IKEv2/EAP
- 填写服务器地址、用户名、密码
# 八、踩坑经验
# 问题 1:私钥加载失败
现象:日志显示 no private key found for 'vpn.example.com'
原因:符号链接权限问题
解决:直接复制证书文件而非使用符号链接
cp /etc/letsencrypt/archive/vpn.example.com/privkey1.pem /etc/ipsec.d/private/privkey.pem
chmod 600 /etc/ipsec.d/private/privkey.pem
1
2
2
# 问题 2:Windows 策略匹配错误
现象:Windows 连接失败,日志显示 received proposals unacceptable
原因:Windows 默认使用 MODP_1024(DH Group 2),服务器未支持
解决:在 ike 配置中添加 MODP_1024 算法:
ike=aes256-sha256-modp1024,aes256-sha1-modp1024,...
1
# 问题 3:连接成功但无法上网
现象:VPN 已连接,但无法访问网络
原因:防火墙 FORWARD 规则只匹配 ESP 协议,未处理 NAT-T(UDP 封装)
解决:放宽 FORWARD 规则:
iptables -F FORWARD
iptables -A FORWARD -s 10.101.0.0/16 -j ACCEPT
iptables -A FORWARD -d 10.101.0.0/16 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
1
2
3
4
2
3
4
# 九、验证连接
查看连接日志:
journalctl -u strongswan-starter -f
1
成功连接的标志:
CHILD_SA ikev2-vpn{1} established with SPIs xxx_i xxx_o and TS 0.0.0.0/0 === 10.101.0.1/32
1
# 十、证书续期
Let's Encrypt 证书有效期 90 天,certbot 会自动续期。
续期后需要重启 strongSwan:
systemctl reload strongswan-starter
1
# 总结
IKEv2 VPN 部署的核心要点:
- 域名必须解析到服务器:Let's Encrypt 证书申请需要
- 证书权限正确:私钥 600,证书 644
- 加密算法兼容:同时支持 MODP_1024(Windows)和 MODP_2048(iOS)
- 防火墙规则完整:开放 500/4500 端口,正确配置 NAT 和转发
完成以上配置后,iOS 和 Windows 均可原生连接,无需安装额外客户端。
# 相关链接
上次更新: 2026/4/28 13:46:21