本页内容
- 前提条件
- 第 1 步 - 配置网络与防火墙
- 第 2 步 - 安装 SSL
- 第 3 步 - 安装 strongSwan
- 第 4 步 - 通过 Windows 连接
- 第 5 步 - 通过 macOS 连接
- 第 6 步 - 通过 Android 连接
- 第 7 步 - 通过 iOS 连接
- 结语
如果你正在寻找客户端到站点的 VPN 方案,那么你可能会更倾向于选择 IKEv2 EAP 方案,而非 OpenVPN 或 Wireguard。如果你经常在外奔波,且需要一种无需下载客户端或密钥便能轻松连接的 VPN 方案,这种方案会非常有用。strongSwan 是一款开源的跨平台基于 IPsec 的 VPN,在此类场景下能派上用场。它可以提供基于 X.509 证书的身份验证,或是安全的 IKEv2 EAP 用户身份验证。
在本教程中,你将学习如何在 Rocky Linux 9 服务器上,使用 strongSwan 配合 EAP-MSCHAPv2 身份验证以及 Let's Encrypt SSL 证书来搭建 IKEv2 IPSec VPN。你还将学习如何使用 Windows、macOS、Linux 和 Android 客户端连接到该 VPN。
前提条件
- 一台运行 Rocky Linux 9 的服务器。根据你连接的用户数量,你可能需要升级服务器的配置。
- 一个具有 sudo 权限的非 root 用户。
- 一个完整的域名(FQDN),例如 vpn.example.com。
- 确保所有内容都已更新。$ sudo dnf update
- 系统需要安装的一些软件包。$ sudo dnf install wget curl nano unzip yum-utils -y 其中部分软件包可能已安装在你的系统中。
一台运行 Rocky Linux 9 的服务器。根据你连接的用户数量,你可能需要升级服务器的配置。
一个具有 sudo 权限的非 root 用户。
一个完整的域名(FQDN),例如 vpn.example.com。
确保所有内容都已更新。
$ sudo dnf update
系统需要安装的一些软件包。
$ sudo dnf install wget curl nano unzip yum-utils -y
其中部分软件包可能已安装在你的系统中。
第 1 步 - 配置网络与防火墙
在内核选项中启用 IP 数据包转发。
$ echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.conf
$ sudo sysctl -p
将 IPsec 服务添加到 Firewalld 防火墙。
$ sudo firewall-cmd --permanent --add-service=ipsec
我们还需要 HTTP 和 HTTPS 端口正常工作,将其开放。
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
允许 NAT 数据包转发,即 IP 伪装(IP masquerade)。
$ sudo firewall-cmd --permanent --add-masquerade
重新加载防火墙以使更改生效。
$ sudo firewall-cmd --reload
第 2 步 - 安装 SSL
我们需要安装 Certbot 来生成 SSL 证书。
我们将使用 Snapd 软件包安装器来完成。由于 Rocky Linux 默认未附带它,因此需要安装 Snapd 安装器。它需要 EPEL 软件仓库才能正常工作。
$ sudo dnf install -y epel-release
安装 Snapd。
$ sudo dnf install -y snapd
启用并启动 Snap 服务。
$ sudo systemctl enable snapd --now
安装 Snap core 软件包,并确保你的 Snapd 版本是最新的。
$ sudo snap install core && sudo snap refresh core
为 Snapd 创建必要的链接。
$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh
执行以下命令来安装 Certbot。
$ sudo snap install --classic certbot
使用以下命令,通过创建到 /usr/bin 目录的符号链接,确保 Certbot 命令可以运行。
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
验证安装。
$ certbot --version
certbot 2.3.0
运行以下命令来生成 SSL 证书。
$ sudo certbot --key-type rsa certonly --standalone --agree-tos --no-eff-email --preferred-challenges http -m
[email protected]
-d vpn.example.com
上述命令会将证书下载到服务器上的 /etc/letsencrypt/live/vpn.example.com 目录。
要检查 SSL 续期是否正常工作,请对该流程进行一次试运行(dry run)。
$ sudo certbot renew --dry-run
如果没有看到任何错误,说明一切就绪。你的证书将自动续期。
第 3 步 - 安装 strongSwan
strongSwan 的安装需要 EPEL 软件仓库,但由于我们已在之前的步骤中安装过,因此可以跳过。使用以下命令安装 strongSwan。
$ sudo dnf install strongswan
在 /etc/strongswan/swanctl 目录中为证书创建符号链接。
$ sudo ln -s /etc/letsencrypt/live/vpn.example.com/fullchain.pem /etc/strongswan/swanctl/x509
$ sudo ln -s /etc/letsencrypt/live/vpn.example.com/privkey.pem /etc/strongswan/swanctl/private
$ sudo ln -s /etc/letsencrypt/live/vpn.example.com/chain.pem /etc/strongswan/swanctl/x509ca
创建一个 strongSwan 配置文件并打开以进行编辑。
$ sudo nano /etc/strongswan/swanctl/conf.d/my_vpn.conf
将以下代码粘贴其中。
connections {
ikev2-eap-mschapv2 {
version = 2
proposals = aes256-sha256-modp4096,aes256-sha256-modp2048,aes256gcm16-sha256-modp1024
rekey_time = 0s
pools = pool-ipv4
fragmentation = yes
dpd_delay = 30s
send_cert=always
unique = never
local {
id = vpn.example.com
certs = fullchain.pem
}
remote {
auth = eap-mschapv2
eap_id = %any
}
children {
ikev2-eap-mschapv2 {
local_ts = 0.0.0.0/0
rekey_time = 0s
dpd_action = clear
esp_proposals = aes256-sha256-sha1
}
}
}
}
pools {
pool-ipv4 {
addrs = 10.1.1.0/24
dns = 1.1.1.1, 8.8.8.8
}
}
secrets {
eap-User1 {
id = username1
secret = "password1"
}
}
完成后,按 Ctrl + X,并在提示时输入 Y 以保存文件。
如果你希望同时通过 VPN 隧道传输 IPv4 和 IPv6,则需要分配一个 IPv6 地址池、DNS 以及本地子网。请将变量 local_ts、addrs 和 dns 的值替换为以下数值。
local_ts = 0.0.0.0/0,::/0
....
addrs = 10.1.1.0/24,2a00:1450:400c:c05::/112
dns = 8.8.8.8,2001:4860:4860::8888
禁用 OpenSSL 插件,因为 Rocky Linux 9 上的 OpenSSL 不允许使用 SHA-1 的 RSA 签名,这会导致身份验证失败。
$ sudo sed -i "s/load = yes/load = no/" /etc/strongswan/strongswan.d/charon/openssl.conf
启用并启动 strongSwan 服务。
$ sudo systemctl enable strongswan
$ sudo systemctl start strongswan
第 4 步 - 通过 Windows 连接
打开“设置”应用,选择“网络和 Internet”菜单项。选择“VPN”菜单,然后点击“添加 VPN 连接”按钮。

点击“保存”按钮,然后选择你添加的 VPN,并点击“连接”按钮以启动 VPN。

第 5 步 - 通过 macOS 连接
打开“系统偏好设置”>>“网络”,点击右上角的加号(+)以添加新服务。

选择 VPN 作为接口(Interface),IKEv2 作为 VPN 类型,并为你的服务命名。点击“创建”按钮继续。

输入你的域名作为“服务器地址”(Server Address)和“远程 ID”(Remote ID)。将“本地 ID”(Local ID)字段留空。点击“身份验证设置”按钮以打开一个新弹窗。

选择“用户名”作为身份验证设置,然后输入之前创建的凭据。点击“好”按钮保存设置。点击底部的“应用”按钮保存设置,然后点击“连接”按钮以连接到 VPN。

添加完成后,macOS 会在菜单栏为 VPN 创建一个快捷方式。你可以直接从那里连接到 VPN。
第 6 步 - 通过 Android 连接
打开 Android“设置”>>“网络和 Internet”>>“VPN”菜单。点击屏幕右上角的加号(+)以添加 VPN 配置。

为连接命名。选择 IKEv2/IPSec MSCHAPv2 作为 VPN 类型。输入你的域名作为服务器地址。任意填写一个字符串作为 IPSec 标识符(IPSec Identifier)。输入你之前设置的用户名和密码。点击“保存”按钮完成。
选择该连接名称并点击“连接”以开始使用 VPN。
第 7 步 - 通过 iOS 连接
打开 iOS 设置,点击“通用”菜单。点击“VPN”菜单,你将看到如下类似的界面。选择 IKEv2 作为 VPN 类型。

为你的 VPN 填写描述。输入你的域名作为“服务器”(Server)和“远程 ID”(Remote ID)字段的值。将“本地 ID”(Local ID)字段留空。选择“用户身份验证”为“用户名”,并输入你的凭据。完成后选择“完成”,然后点击开关以连接到 VPN。
结语
到这里,我们在 Rocky Linux 9 服务器上使用 strongSwan 和 Let's Encrypt SSL 搭建 IKEv2 VPN 的教程就结束了。你还使用多种客户端连接到了该 VPN。如果你有任何问题,请在下方评论中留言。