https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/ikev2-howto-zh.md#android-4x-to-9x 使用这个辅助脚本来自动地在 VPN 服务器上配置 IKEv2: sudo bash /opt/src/ikev2.sh --auto 该 脚本 必须使用 bash 而不是 sh 运行。 以上命令使用自动模式和默认选项运行辅助脚本。 如果你想要自定义 IKEv2 安装选项, 请在运行脚本时去掉 --auto 参数。 在完成之后,请转到 配置 IKEv2 VPN 客户端。 错误:"bash: /opt/src/ikev2.sh: No such file or directory". 你可以指定一个域名,客户端名称和/或另外的 DNS 服务器。 这是可选的。点这里查看详情。 单击此处以查看 IKEv2 辅助脚本的使用信息。 手动在 VPN 服务器上配置 IKEv2 除了使用 辅助脚本 之外,高级用户也可以手动配置 IKEv2。在继续之前,推荐 升级 Libreswan 到最新版本。 下面举例说明如何手动在 Libreswan 上配置 IKEv2。以下命令必须用 root 账户运行。 获取 VPN 服务器的公共 IP 地址,将它保存到变量并检查。 PUBLIC_IP=$(dig @resolver1.opendns.com -t A -4 myip.opendns.com +short) [ -z "$PUBLIC_IP" ] && PUBLIC_IP=$(wget -t 3 -T 15 -qO- http://ipv4.icanhazip.com) printf '%s\n' "$PUBLIC_IP" 检查并确保以上命令的输出与服务器的公共 IP 一致。该变量将在以下步骤中使用。 注: 另外,在这里你也可以指定 VPN 服务器的域名。例如: PUBLIC_IP=myvpn.example.com。 添加一个新的 IKEv2 连接: if ! grep -qs '^include /etc/ipsec\.d/\*\.conf$' /etc/ipsec.conf; then echo >> /etc/ipsec.conf echo 'include /etc/ipsec.d/*.conf' >> /etc/ipsec.conf fi 注: 如果你在上面的第一步指定了服务器的域名(而不是 IP 地址),则必须将以下命令中的 leftid=$PUBLIC_IP 换成 leftid=@$PUBLIC_IP。 cat > /etc/ipsec.d/ikev2.conf <> /etc/ipsec.d/ikev2.conf <> /etc/ipsec.d/ikev2.conf <> /etc/ipsec.d/ikev2.conf < Is this a critical extension [y/N]? N 生成 VPN 服务器证书: 注: 如果你在上面的第一步指定了服务器的域名(而不是 IP 地址), 则必须将以下命令中的 --extSAN "ip:$PUBLIC_IP,dns:$PUBLIC_IP" 换成 --extSAN "dns:$PUBLIC_IP"。 certutil -z <(head -c 1024 /dev/urandom) \ -S -c "IKEv2 VPN CA" -n "$PUBLIC_IP" \ -s "O=IKEv2 VPN,CN=$PUBLIC_IP" \ -k rsa -g 3072 -v 120 \ -d sql:/etc/ipsec.d -t ",," \ --keyUsage digitalSignature,keyEncipherment \ --extKeyUsage serverAuth \ --extSAN "ip:$PUBLIC_IP,dns:$PUBLIC_IP" Generating key. This may take a few moments... 生成客户端证书,然后导出 .p12 文件,该文件包含客户端证书,私钥以及 CA 证书。 注: 你可以重复本步骤来为更多的客户端生成证书,但必须将所有的 vpnclient 换成比如 vpnclient2,等等。 如需同时连接多个客户端,则必须为每个客户端生成唯一的证书。 生成客户端证书: certutil -z <(head -c 1024 /dev/urandom) \ -S -c "IKEv2 VPN CA" -n "vpnclient" \ -s "O=IKEv2 VPN,CN=vpnclient" \ -k rsa -g 3072 -v 120 \ -d sql:/etc/ipsec.d -t ",," \ --keyUsage digitalSignature,keyEncipherment \ --extKeyUsage serverAuth,clientAuth -8 "vpnclient" Generating key. This may take a few moments... 导出 .p12 文件: pk12util -d sql:/etc/ipsec.d -n "vpnclient" -o vpnclient.p12 Enter password for PKCS12 file: Re-enter password: pk12util: PKCS12 EXPORT SUCCESSFUL 指定一个安全的密码以保护导出的 .p12 文件(在导入到 iOS 或 macOS 设备时,该密码不能为空)。 (适用于 iOS 客户端) 导出 CA 证书到 ikev2vpnca.cer: certutil -L -d sql:/etc/ipsec.d -n "IKEv2 VPN CA" -a -o ikev2vpnca.cer 证书数据库现在应该包含以下内容: certutil -L -d sql:/etc/ipsec.d Certificate Nickname Trust Attributes SSL,S/MIME,JAR/XPI IKEv2 VPN CA CTu,u,u ($PUBLIC_IP) u,u,u vpnclient u,u,u 注: 如需显示证书内容,可使用 certutil -L -d sql:/etc/ipsec.d -n "Nickname"。 要吊销一个客户端证书,请转到这一节。关于 certutil 的其它用法参见 这里。 (重要)重启 IPsec 服务: service ipsec restart 在继续之前,你必须重启 IPsec 服务。VPN 服务器上的 IKEv2 配置到此已完成。下一步:配置 VPN 客户端。