Debian + StrongSwan 配置 IKEv2 VPN 科学上网
Step 1. 安装 StrongSwan
Debian 8 使用直接 apt-get 就可以了
1 | apt-get install strongswan libcharon-extra-plugins |
经过实验,Debian 7 也是完美支持的不过要加一个 repo
1 | echo "deb http://ftp.debian.org/debian wheezy-backports main" > /etc/apt/sources.list.d/wheezy-backports.list |
Step 2. 生成根证书
生成证书的过程都是类似的:先生成一个私钥,再签一个证书
1 | cd /etc/ipsec.d/ |
--self
表示自签证书,'--dn'为判别名,解释一下:
- C 表示国家名,同样还有 ST 州/省名,L 地区名,STREET(全大写) 街道名。
- O 表示组织名。
- CN 为通用名。
Step 3. 生成服务器证书
替换下面的vpn.ericfu.me
为自己服务器的域名或IP,如果域名不一致会造成无法连接。(这里写域名,则客户端连接的时候也用域名;这里写IP,则客户端连接的时候也用IP)
1 | cd /etc/ipsec.d/ |
解释一下:
ipsec pki --pub --in server.pem
是从我们刚生成的私钥里把公钥提取出来,然后用公钥去参与后面的服务器证书签发(这个是
VPN 连接时候要用的,你不想把私钥也给它吧?那样跟没签证书一样...)。
--issue
, --cacert
和 --cakey
就是表明要用刚才自签的 CA 证书来签这个服务器证书。
--dn
, --san
,--flag
是一些客户端方面的特殊要求:
iOS 客户端要求
CN
也就是通用名必须是你的服务器的 URL 或 IP 地址;
Windows 7 不但要求了上面,还要求必须显式说明这个服务器证书的用途(用于与服务器进行认证)
--flag serverAuth
;
非 iOS 的 Mac OS X 要求了“IP 安全网络密钥互换居间(IP Security IKE Intermediate)”这种增强型密钥用法(EKU)
--flag ikdeIntermediate
;
Android 和 iOS 都要求服务器别名(Server Alt Name)就是服务器的 URL 或 IP 地址,
--san
。
Step 4. 生成客户端证书
和上面服务器的类似
1 | cd /etc/ipsec.d/ |
导出为 P12 格式,方便使用
1 | cd /etc/ipsec.d/ |
Step 5. 配置 IPSec
修改 IPSec 的配置文件 /etc/ipsec.conf
1 | # ipsec.conf - strongSwan IPsec configuration file |
接着修改密码文件,替换中间 topsecretpassword1
,
topsecretpassword2
,evenmoretopsecretpassword
到自己设定的密码就可以了。
每行对应一种鉴别方式,冒号前面是用户名
1 | # /etc/ipsec.secrets |
重新加载 secrets 文件
1 | ipsec rereadsecrets |
Step 6. 配置转发和防火墙
开启 IPv4 转发
1 | echo 1 > /proc/sys/net/ipv4/ip_forward |
这个是临时性的,如果想永久更改,则修改/etc/sysctl.conf
1 | net.ipv4.ip_forward = 1 |
允许 IPSec 端口监听
1 | iptables -A INPUT -p udp --dport 500 --j ACCEPT |
line 1: for ISAKMP (handling of security associations)
line 2: for NAT-T (handling of IPsec between natted devices)
line 3: for ESP payload (the encrypted data packets)
允许 VPN 到外网的流量
1 | iptables -t nat -A POSTROUTING -o eth0 ! -p esp -j SNAT --to-source <Your VPN host IP> |
StrongSwan 配置
配置文件在 /etc/strongswan.conf
1 | # strongswan.conf - strongSwan configuration file |
大功告成
1 | service strongswan restart |
连上去试试吧!
奇奇怪怪的问题
客户端在验证一步卡住,但是服务器上的 Log 显示已经发送了
IKE_AUTH response
这个 response 包发不过来,换个网络环境试试?多半是GFW干的好事。
证书验证失败(Windows)
不能直接导入证书,一定要用 Google 出来的方法,把证书安装为系统全局的证书。
其他问题
多半是 IPSec 的问题,ipsec stop
再用
ipsec start --nofork
启动可以看到 debug 日志。
如果怎么都不 Work……
请试试编译安装 StrongSwan
Ref. 1. strongSwan 5: How to create your own private VPN | Zeitgeist 2. SDB:Setup Ipsec VPN with Strongswan - openSUSE
附两个自动安装脚本(GitHub):