前言
之前写过一遍博客,用 strongSwan 搭建免证书的 IKEv2 VPN,之所以不想用证书,主要是因为买证书需要钱,而生成证书的手续又过于繁琐。需要创建个 CA,然后签发证书,客户端还得手动信任 CA,中间过程很容易出错。
现在有了 Let‘s Encrypt,问题简单多了。它不仅可以提供免费的受信证书,而且用起来很简单。另外,用了证书认证之后,在 iOS 上就免除了安装配置文件的步骤。
简直 “完美”👈👩👉
服务器端配置
1. 安装 strongSwan
请参考: 用 strongSwan 搭建免证书的 IKEv2 VPN。
2. 申请 Let's Encrypt 证书
这步超级简单:
user@webserver:~$ git clone https://github.com/letsencrypt/letsencrypt
user@webserver:~$ cd letsencrypt
user@webserver:~/letsencrypt$ ./letsencrypt-auto certonly --standalone
注意:填写的域名必须跟 VPN 服务器地址一致。
生成的证书位于 /etc/letsencrypt/archive/your.domain/ 目录下,需要拷贝到 strongSwan 目录:
cp /etc/letsencrypt/live/your.domain/fullchain.pem /etc/ipsec.d/certs
cp /etc/letsencrypt/live/your.domain/privkey.pem /etc/ipsec.d/private
3. 修改 /etc/ipsec.conf 配置
如下:
# ipsec.conf - strongSwan IPsec configuration file
# basic configuration
config setup
strictcrlpolicy=no
uniqueids = no
# Default
conn %default
keyexchange=ikev2
auto=add
dpdaction=clear
leftsubnet=0.0.0.0/0
right=%any
rightsourceip=10.99.1.0/24
# With certificate
conn iOS-IKEv2-cert
leftid=your.domain
leftcert=fullchain.pem
leftsendcert=always
rightauth=eap-mschapv2
eap_identity=%identity
注意:leftid 需要跟你的域名一致。
4. 修改 /etc/ipsec.secret 文件
: RSA privkey.pem
u1 : EAP "password"
u2 : EAP "password"
5. 配置 IP Table
#!/bin/bash
# Add ip tables
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.99.1.0/24 -o eth0 -j MASQUERADE
iptables -A FORWARD -s 10.99.1.0/24 -j ACCEPT
6. 启动 ipsec
ipsec start
客户端配置
1. 添加 VPN 配置
进入“设置” -> “VPN” -> “添加 VPN 配置”,选择 “IKEv2” 类型,填好参数保存。
2. 安装 Let‘s Encrypt 中间证书
用 Safari 访问 https://letsencrypt.org,点击 PEM 格式的 Let’s Encrypt Authority X1 证书并安装。
至此,就可以连接 VPN 了。