此教程的早期版本是由 Justin Ellingwood和 Namo编写的。
介绍
虚拟私人网络,或VPN,允许您安全地加密流量,因为它通过不受信任的网络,如咖啡店,会议或机场。
Internet Key Exchange v2,或IKEv2,是一个协议,允许服务器和客户端之间的直接IPsec隧道。在IKEv2VPN实现中,IPsec为网络流量提供加密。
在本教程中,您将使用 StrongSwan在Ubuntu 20.04服务器上设置IKEv2 VPN服务器,然后您将学习如何与Windows,macOS,Ubuntu,iOS和Android客户端连接到它。
前提条件
要完成本教程,您将需要:
- 一个 Ubuntu 20.04 服务器配置如下 Ubuntu 20.04 初始服务器设置指南,包括一个非 root 用户和防火墙。
步骤 1 – 安装 StrongSwan
首先,我们将安装 StrongSwan,一个开源的IPsec示威器,我们将其配置为我们的VPN服务器,我们还将安装公共密钥基础设施(PKI)组件,以便我们可以创建一个证书权(CA)来为我们的基础设施提供凭证。
首先,更新本地包缓存:
1sudo apt update
然后通过键入安装软件:
1sudo apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins libstrongswan-extra-plugins
额外的libcharon-extauth-plugins
包用于确保各种客户端可以使用共享的用户名和密码来验证您的服务器。包括了libstrongswan-extra-plugins
包,因此Strongswan支持使用Curve25519
加密套件的曲加密套件。
现在一切已经安装了,让我们继续创建我们的证书。
步骤 2 – 创建证书授权机构
IKEv2 服务器需要一个证书来识别客户端,以帮助创建所需的证书,strongswan-pki
包配有一个名为pki
的实用程序来生成证书权威和服务器证书。
首先,让我们创建几个目录来存储我们将工作的所有资产. 目录结构匹配在 `/etc/ipsec.d 中的一些目录,我们最终将移动我们创建的所有项目:
1mkdir -p ~/pki/{cacerts,certs,private}
然后锁定权限,以便我们的私人文件不能被其他用户看到:
1chmod 700 ~/pki
现在我们有一个目录结构来存储一切,我们可以生成一个根密钥,这将是一个4096位的RSA密钥,将被用来签署我们的根证书权威。
执行这些命令来生成密钥:
1pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem
接下来,我们可以继续创建我们的根证书权限,使用我们刚刚生成的密钥来签署根证书:
1pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem \
2 --type rsa --dn "CN=VPN root CA" --outform pem > ~/pki/cacerts/ca-cert.pem
用于确保证书机构的根证书有效期为10年,通常不会发生任何变化,因为它将不得不重新分配给依赖于其的每个服务器和客户端,因此10年是一个安全的默认到期值。
如果您愿意,您可以将 distinguished name (DN) 值更改为其他东西. 这里的常用名称(CN 字段)只是指标,因此它不必匹配您的基础设施中的任何东西。
现在我们已经获得了我们的根证书权限,我们可以创建一个VPN服务器将使用的证书。
步骤 3 – 生成VPN服务器的证书
我们现在将为VPN服务器创建一个证书和密钥,该证书将允许客户端使用我们刚刚生成的CA证书来验证服务器的真实性。
首先,用以下命令创建VPN服务器的私钥:
1pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem
现在,使用您在上一个步骤中创建的证书权限密钥创建并签署VPN服务器证书,执行以下命令,但将共同名称(CN)和主体替换名称(SAN)字段更改为VPN服务器的DNS名称或IP地址:
1pki --pub --in ~/pki/private/server-key.pem --type rsa \
2 | pki --issue --lifetime 1825 \
3 --cacert ~/pki/cacerts/ca-cert.pem \
4 --cakey ~/pki/private/ca-key.pem \
5 --dn "CN=server_domain_or_IP" --san server_domain_or_IP \
6 --flag serverAuth --flag ikeIntermediate --outform pem \
7 > ~/pki/certs/server-cert.pem
<$>[注意]
注意:如果您使用IP地址而不是DNS名称,则需要指定多个 --san
条目。
1--dn "CN=IP address" --san @IP_address --san IP_address \
此额外的--san @IP_address
条目的原因是,当某些客户端验证其身份时,TLS 证书是否具有服务器的 DNS 条目和 IP 地址条目。
使用--flag serverAuth
选项来表示证书将在加密隧道建立之前明确用于服务器身份验证,而--flag ikeIntermediate
选项用于支持较旧的macOS客户端。
现在我们已经生成了 StrongSwan 需要的所有 TLS/SSL 文件,我们可以通过键入在 /etc/ipsec.d
目录中的位置移动文件:
1sudo cp -r ~/pki/* /etc/ipsec.d/
在此步骤中,我们创建了一对证书对,将用于确保客户端和服务器之间的通信。我们还使用CA密钥签署了证书,因此客户端将能够使用CA证书验证VPN服务器的真实性。
步骤 4 – 配置 StrongSwan
StrongSwan有一个默认配置文件,有一些例子,但我们将不得不自己做大部分的配置。
1sudo mv /etc/ipsec.conf{,.original}
使用您喜爱的文本编辑器创建并打开一个新的空格配置文件. 在这里,我们将使用nano
:
1sudo nano /etc/ipsec.conf
<$>[注意] 注意:当您通过本节来配置 VPN 的服务器部分时,您会遇到指向连接的 left 和 right 侧面的设置。当您使用 IPSec VPN 时,传统的 left 侧指向您配置的本地系统,在这种情况下是服务器。
当您在本教程中晚些时候继续配置客户端时,客户端配置文件将使用各种 left 指令进行引用,服务器将使用 right 侧术语进行引用。
首先,我们会告诉 StrongSwan 登录 DAEMON 状态来调试并允许重复连接。
1[label /etc/ipsec.conf]
2config setup
3 charondebug="ike 1, knl 1, cfg 0"
4 uniqueids=no
我们还会告诉 StrongSwan创建 IKEv2 VPN 隧道,并在启动时自动加载此配置部分。
1[label /etc/ipsec.conf]
2. . .
3conn ikev2-vpn
4 auto=add
5 compress=no
6 type=tunnel
7 keyexchange=ikev2
8 fragmentation=yes
9 forceencaps=yes
我们还将配置死亡对象检测以清除任何危险
连接,如果客户端意外断开连接。
1[label /etc/ipsec.conf]
2. . .
3conn ikev2-vpn
4 . . .
5 dpdaction=clear
6 dpddelay=300s
7 rekey=no
接下来,我们将配置服务器的左
侧 IPSec 参数。下列参数中的每个参数都确保服务器配置为接受客户端的连接并正确识别自己。一旦您熟悉它们是什么以及它们为什么使用,您将将这些设置添加到 /etc/ipsec.conf
文件中:
- " 左起 " " 任何 " 值确保服务器使用它接收到的连接的网络接口,以便随后与客户端通信。 例如,如果您正在通过私人网络连接一个客户端,服务器将使用它接收其余连接流量的私人IP地址.
- 左起子服务器_域名_ IP 此选项控制服务器向客户端呈现的名称 。 " 左 " 选项与下一个选项 " 左Cert " 合并后,将确保服务器配置的名称和公证书中包含的杰出名称。
左证书=服务器-cert.pem
此选项是您在第3步配置的服务器的公用证书路径 。 没有它,服务器将无法与客户端进行认证,或完成IKEv2设置的谈判.左后卫
" 总是 " 的价值确保任何连接到服务器的客户端都会收到服务器公证书的副本,作为初始连接设置的一部分.- 左子网=0.0.0.0/0. 您将添加的最后一个
左
侧选项将告诉客户端服务器后方可到达的子网 。 在这种情况下,`0.0.0.0/0'用于代表IPv4的整个一组地址,这意味着服务器会让客户端默认通过VPN发送其全部流量. (英语)
现在你已经熟悉了每一个相关的左
侧选项,把它们都添加到文件中,就像这样:
1[label /etc/ipsec.conf]
2. . .
3conn ikev2-vpn
4 . . .
5 left=%any
6 leftid=@server_domain_or_IP
7 leftcert=server-cert.pem
8 leftsendcert=always
9 leftsubnet=0.0.0.0/0
<$>[注意]
注意:在配置服务器ID(‘leftid’)时,只需将您的VPN服务器标识为域名时,只需包含@
字符:
1[label /etc/ipsec.conf]
2 . . . [email protected]
3 . . .
如果服务器将被其IP地址识别,只需输入IP地址:
1[label /etc/ipsec.conf]
2 . . .
3 leftid=your_server_ip
4 . . .
美元
接下来,我们可以配置客户端的正确
侧 IPSec 参数。下列参数中的每一个都告诉服务器如何接受客户端的连接,客户端应该如何对服务器进行身份验证,以及客户端将使用的私人 IP 地址范围和 DNS 服务器。
连接的右
侧的%any
选项指示服务器接受来自任何远程客户端的接入连接。
- `rightid=%any’ 此选项确保服务器在加密隧道之前不会拒绝提供身份的客户端的连接。
rightauth=eap-mschapv2
此选项设置了客户端将使用的身份验证方法,以便向服务器进行身份验证。 `eap-mschapv2 用于支持客户端,如 Windows、macOS 和 Android 设备的广泛兼容性。rightsip=10.10.0/24
此选项指示客户端将私人 IP 地址分配给客户端从指定的10.10.10.0/24
IP 池中
现在你已经熟悉了VPN所需的正确
侧选项,请在/etc/ipsec.conf
中添加以下行:
1[label /etc/ipsec.conf]
2. . .
3conn ikev2-vpn
4 . . .
5 right=%any
6 rightid=%any
7 rightauth=eap-mschapv2
8 rightsourceip=10.10.10.0/24
9 rightdns=8.8.8.8,8.8.4.4
10 rightsendcert=never
现在我们会告诉StrongSwan在他们连接时请求客户端提供用户身份证件:
1[label /etc/ipsec.conf]
2. . .
3conn ikev2-vpn
4 . . .
5 eap_identity=%identity
最后,添加以下行以支持 Linux、Windows、macOS、iOS 和 Android 客户端. 这些行指定了 StrongSwan 将允许不同的客户端使用的各种密钥交换、哈希、身份验证和加密算法(通常称为 Cipher Suites):
1[label /etc/ipsec.conf]
2. . .
3conn ikev2-vpn
4 . . .
5 ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
6 esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!
例如,chacha20poly1305-sha512-curve25519-prfsha512
是一个套件,而aes256gcm16-sha384-prfsha384-ecp384
是一个其他套件。
完整的配置文件应该是这样的:
1[label /etc/ipsec.conf]
2config setup
3 charondebug="ike 1, knl 1, cfg 0"
4 uniqueids=no
5
6conn ikev2-vpn
7 auto=add
8 compress=no
9 type=tunnel
10 keyexchange=ikev2
11 fragmentation=yes
12 forceencaps=yes
13 dpdaction=clear
14 dpddelay=300s
15 rekey=no
16 left=%any
17 leftid=@server_domain_or_IP
18 leftcert=server-cert.pem
19 leftsendcert=always
20 leftsubnet=0.0.0.0/0
21 right=%any
22 rightid=%any
23 rightauth=eap-mschapv2
24 rightsourceip=10.10.10.0/24
25 rightdns=8.8.8.8,8.8.4.4
26 rightsendcert=never
27 eap_identity=%identity
28 ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
29 esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!
保存并关闭文件,一旦您确认您已正确添加每个行. 如果您使用了nano
,请按CTRL + X
,Y
,然后按ENTER
。
现在我们已经配置了VPN参数,让我们继续创建一个帐户,以便我们的用户可以连接到服务器。
步骤 5 – 配置 VPN 身份验证
我们的VPN服务器现在已配置为接受客户端连接,但我们还没有配置任何身份证件,我们需要在一个名为ipsec.secrets
的特殊配置文件中配置几件事:
- 我们需要告诉StrongSwan在哪里找到我们的服务器证书的私钥,这样服务器就可以对客户端进行身份验证。
- 我们还需要设置一个允许连接到VPN的用户列表。
让我们打开秘密文件来编辑:
1sudo nano /etc/ipsec.secrets
首先,我们会告诉StrongSwan在哪里找到我们的私钥,以及如何分析它。
1[label /etc/ipsec.secrets]
2: RSA "server-key.pem"
请确保行以 :
字符开始,并在后面有一个空间,以便整个行读取 `: RSA "server-key.pem" 。
然后,我们将定义用户身份证,您可以创建您喜欢的任何用户名或密码组合:
1[label /etc/ipsec.secrets]
2your_username : EAP "your_password"
现在我们已经完成了VPN参数的工作,我们将重新启动VPN服务,以便应用我们的配置:
1sudo systemctl restart strongswan-starter
现在,VPN服务器已经完全配置了服务器选项和用户凭证,现在是时候开始配置最重要的部分了:防火墙。
步骤 6 – 配置防火墙和内核IP转发
随着 StrongSwan 配置完成,我们需要配置防火墙以允许 VPN 流量通过并传输它。
如果您遵循初始服务器设置的先决条件教程,您应该有启用UFW防火墙. 如果您尚未配置UFW,您应该通过添加一个规则开始允许SSH连接通过防火墙,以便您启用UFW时的当前会话不会关闭:
1sudo ufw allow OpenSSH
然后通过键入启用防火墙:
1sudo ufw enable
然后,添加一个规则,允许 UDP 流量到标准的 IPSec 端口,500
和4500
:
1sudo ufw allow 500,4500/udp
接下来,我们将打开UFW的配置文件之一,添加一些向导和转发IPsec包的低级别策略. 然而,在我们能够做到这一点之前,我们需要找到我们服务器上的哪个网络接口用于访问互联网。
1ip route show default
例如,此结果显示了名为「eth0」的界面,该界面在下面的示例中突出显示:
1[secondary_label Output]
2default via your_server_ip dev eth0 proto static
当您有公共网络接口时,请在文本编辑器中打开 /etc/ufw/before.rules
文件. 此文件中的规则在其他常见的输入和输出规则之前添加到防火墙中。
1sudo nano /etc/ufw/before.rules
在文件的顶部(在*过滤器
行之前),添加下列配置块。在上面的配置中,更改每个eth0
实例以匹配您发现的界面名称与ip路线
。*nat
路线创建规则,以便防火墙能够正确地路由和操纵VPN客户端与互联网之间的流量。*mangle
路线调整最大包段大小以防止某些VPN客户端出现潜在问题:
1[label /etc/ufw/before.rules]
2*nat
3-A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
4-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
5COMMIT
6
7*mangle
8-A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
9COMMIT
10
11*filter
12:ufw-before-input - [0:0]
13:ufw-before-output - [0:0]
14:ufw-before-forward - [0:0]
15:ufw-not-local - [0:0]
16. . .
接下来,在*过滤器
和链定义行之后,再添加一个配置块:
1[label /etc/ufw/before.rules]
2. . .
3*filter
4:ufw-before-input - [0:0]
5:ufw-before-output - [0:0]
6:ufw-before-forward - [0:0]
7:ufw-not-local - [0:0]
8
9-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.10.0/24 -j ACCEPT
10-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT
这些线路告诉防火墙传输 ESP (包装安全负载)的流量,以便VPN客户端能够连接。
完成后,在确认您正确添加了每个行后,请关闭文件,如果您使用了nano
,请按CTRL + X
,Y
,然后按ENTER
。
在重新启动防火墙之前,我们将更改一些网络内核参数,以允许从一个接口向另一个路由。控制这些设置的文件名为 `/etc/ufw/sysctl.conf。
首先需要启用 IPv4 包转发,以便流量可以在服务器上的 VPN 和公共面向网络接口之间移动。接下来,我们将禁用 Path MTU 发现,以防止包分裂问题。
使用「nano」或您偏好的文本编辑器打开 UFW 的内核参数配置文件:
1sudo nano /etc/ufw/sysctl.conf
现在,在文件的末尾添加下面的 net/ipv4/ip_forward=1
设置,以允许在接口之间转发数据包:
1[label /etc/ufw/sysctl.conf]
2. . .
3net/ipv4/ip_forward=1
接下来阻止发送和接收 ICMP 重定向包,将下列行添加到文件的末尾:
1[label /etc/ufw/sysctl.conf]
2. . .
3net/ipv4/conf/all/accept_redirects=0
4net/ipv4/conf/all/send_redirects=0
最后,通过将此行添加到文件末尾来关闭 Path MTU 发现:
1[label /etc/ufw/sysctl.conf]
2. . .
3net/ipv4/ip_no_pmtu_disc=1
现在我们可以通过禁用和重新启用防火墙来启用所有更改,因为UFW在重新启动时随时会应用这些设置:
1sudo ufw disable
2sudo ufw enable
您将被要求确认进程. 键入Y
,以在新设置中再次启用 UFW。
步骤 7 – 在 Windows、macOS、Ubuntu、iOS 和 Android 上测试 VPN 连接
现在你已经设置了一切,是时候试试了,首先,你需要复制你创建的CA证书,并将其安装在你的客户端设备(设备)上,这将连接到VPN。
1cat /etc/ipsec.d/cacerts/ca-cert.pem
你会看到类似于此的输出:
1[secondary_label Output]
2-----BEGIN CERTIFICATE-----
3MIIFNDCCAxygAwIBAgIIHCsidG5mXzgwDQYJKoZIhvcNAQEMBQAwODELMAkGA1UE
4
5. . .
6
7H2YUdz8XNHrJHvMQKWFpi0rlEcMs+MSXPFWE3Q7UbaZJ/h8wpSldSUbQRUlphExJ
8dJ4PX+MUJO/vjG1/ie6Kh25xbBAc3qNq8siiJZDwrg6vjEK7eiZ1rA==
9-----END CERTIFICATE-----
将此输出复制到您的计算机,包括 -----BEGIN CERTIFICATE-----
和 -----END CERTIFICATE-----
行,并将其保存到具有可识别的名称的文件中,例如 ca-cert.pem
。
或者,使用 SFTP 将文件传输到您的计算机(https://andsky.com/tech/tutorials/how-to-use-sftp-to-securely-transfer-files-with-a-remote-server)。
一旦您已下载到您的计算机的ca-cert.pem
文件,您可以设置连接到VPN。
从 Windows 连接
有几种方法可以导入根证书并配置 Windows 连接到 VPN. 第一种方法为每个步骤使用图形工具. 第二种方法使用 PowerShell 命令,可以被脚本和修改以适应您的 VPN 配置。
<$>[注] 注: 此说明已在运行版本 1903 和 1909 的 Windows 10 安装程序上进行了测试。
使用图形工具配置 Windows
首先,按照以下步骤导入根证书:
- Press
WINDOWS+R
to bring up the Run dialog, and entermmc.exe
to launch the Windows Management Console. - From the File menu, navigate to Add or Remove Snap-in, select Certificates from the list of available snap-ins, and click Add.
- We want the VPN to work with any user, so select Computer Account and click Next.
- We're configuring things on the local computer, so select Local Computer, then click Finish.
- Under the Console Root node, expand the Certificates (Local Computer) entry, expand Trusted Root Certification Authorities, and then select the Certificates entry:
- From the Action menu, select All Tasks and click Import to display the Certificate Import Wizard. Click Next to move past the introduction.
- On the File to Import screen, press the Browse button, ensure that you change the file type from
X.509 Certificate (_.cer;_.crt)
toAll Files (_._)
, and select theca-cert.pem
file that you've saved. Then click Next. - Ensure that the Certificate Store is set to Trusted Root Certification Authorities, and click Next.
- Click Finish to import the certificate.
然后用这些步骤配置VPN:
- 启动 控制面板,然后导航到 网络和共享中心.
- 点击 设置新连接或网络,然后选择 连接到工作场所.
- 选择 使用我的互联网连接(VPN).
- 输入VPN服务器的详细信息。 输入服务器的域名或IP地址在 互联网地址字段中,然后输入 目的地名称以描述您的VPN连接。
使用 PowerShell 配置 Windows
若要使用 PowerShell 导入根 CA 证书,请先打开具有管理员权限的 PowerShell 提示。 若要这样做,请右击开始菜单图标,然后选择Windows PowerShell (Admin)
。
接下来,我们将使用Import-Certificate
PowerShell cmdlet 导入证书。在下面的命令中,第一个CertStoreLocation
参数将确保该证书被导入计算机的Trusted Root Certification Authorities
存储中,以便所有程序和用户能够验证VPN服务器的证书。FilePath
参数应该指向您复制证书的位置。在下面的示例中,路径是C:\Users\sammy\Documents\ca-cert.pem
。
1[environment local]
2Import-Certificate `
3 -CertStoreLocation cert:\LocalMachine\Root\ `
4 -FilePath C:\users\sammy\Documents\ca-cert.pem
命令将输出如下东西:
1[environment local]
2[secondary_label Output]
3 PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\Root
4
5Thumbprint Subject
6---------- -------
7DB00813B4087E9367861E8463A60CEA0ADC5F002 CN=VPN root CA
现在要使用PowerShell配置VPN,请执行以下命令. 在ServerAddress
行中替换您的服务器的DNS名称或IP地址. 各种旗帜将确保Windows与相应的安全参数正确配置,匹配您在/etc/ipsec.conf
中设置的选项。
1[environment local]
2Add-VpnConnection -Name "VPN Connection" `
3 -ServerAddress "server_domain_or_IP" `
4 -TunnelType "IKEv2" `
5 -AuthenticationMethod "EAP" `
6 -EncryptionLevel "Maximum" `
7 -RememberCredential `
如果命令成功,则不会有任何输出。 若要确认 VPN 配置正确,请使用Get-VPNConnection
cmdlet:
1[environment local]
2Get-VpnConnection -Name "VPN Connection"
您将收到如下的输出:
1[environment local]
2[secondary_label Output]
3Name : VPN Connection
4ServerAddress : your_server_ip
5AllUserConnection : False
6Guid : {B055A1AB-175C-4028-B4A8-D34309A2B20E}
7TunnelType : Ikev2
8AuthenticationMethod : {Eap}
9EncryptionLevel : Maximum
10L2tpIPsecAuth :
11UseWinlogonCredential : False
12EapConfigXmlStream : #document
13ConnectionStatus : Disconnected
14RememberCredential : True
15SplitTunneling : False
16DnsSuffix :
17IdleDisconnectSeconds : 0
默认情况下,Windows 会选择较旧和较慢的算法。运行Set-VpnConnectionIPsecConfiguration
cmdlet,以升级 Windows 将用于 IKEv2 密钥交换的加密参数,并加密包:
1[environment local]
2Set-VpnConnectionIPsecConfiguration -Name "VPN Connection" `
3 -AuthenticationTransformConstants GCMAES256 `
4 -CipherTransformConstants GCMAES256 `
5 -DHGroup ECP384 `
6 -IntegrityCheckMethod SHA384 `
7 -PfsGroup ECP384 `
8 -EncryptionMethod GCMAES256
<$>[注意]
注意:如果您想删除VPN连接并重新配置它与不同的选项,您可以运行删除VpnConnection
的cmdlet。
1[environment local]
2Remove-VpnConnection -Name "VPN Connection" -Force
你必须从VPN中断连接,如果你试图使用此命令删除它。
连接到VPN
一旦您已导入证书并使用两种方法配置了VPN,您的新VPN连接将在网络列表下可见。选择VPN并点击 连接。您将被提示输入您的用户名和密码。
从 macOS 连接
按照以下步骤导入证书:
- 双击证书文件. Keychain Access将出现一个对话框,表示
Keychain Access正在尝试修改系统密钥链。 输入您的密码以允许此项操作
。 - 输入您的密码,然后点击 Modify Keychain
- 双击新进口的VPN证书。 这会带来一个小型属性窗口,您可以指定信任级别。 设置 **IP Security(IPSec)**到 Always Trust,您将被要求再次使用您的密码。 输入密码后,此设置会自动保存。
现在证书已被导入并受信任,请按照以下步骤配置VPN连接:
- 进入 系统偏好选项,选择 网络.
- 点击网络列表的左下角的小
加
按钮。 - 在出现的弹出窗口中,设置 Interface 到 VPN,设置 VPN 类型 到 IKEv2,并给连接一个名称。
- 在 服务器 和 远程 ID 字段中,输入服务器的域名或 IP 地址。 留下 本地 ID 空白。
- 点击 身份验证设置,选择 用户名,然后输入您为您的 VPN 用户配置的用户名和密码。 然后点击 **OK.
最后,点击连接
以连接到VPN,您现在应该连接到VPN。
从 Ubuntu 连接
要从 Ubuntu 机器连接,您可以设置和管理 StrongSwan 作为一个服务,或者每次想要连接时使用一次性命令。
管理 StrongSwan 作为服务
要管理 StrongSwan 作为服务,您需要执行以下配置步骤。
首先,使用apt
更新本地包缓存。
1[environment local]
2 sudo apt update
接下来,安装 StrongSwan 和用于身份验证的必要插件:
1[environment local]
2sudo apt install strongswan libcharon-extra-plugins
现在,您需要在 /etc/ipsec.d/cacerts
目录中复制 CA 证书的副本,以便您的客户端可以验证服务器的身份。
1[environment local]
2sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts
要确保VPN仅按需求运行,请使用systemctl
来禁用StrongSwan自动运行:
1[environment local]
2sudo systemctl disable --now strongswan-starter
接下来配置您将使用的用户名和密码来验证VPN服务器。 使用Nano或您喜爱的编辑器编辑 /etc/ipsec.secrets
:
1[environment local]
2sudo nano /etc/ipsec.secrets
添加以下行,编辑突出的用户名和密码值,以匹配您在服务器上配置的值:
1[environment local]
2[label /etc/ipsec.secrets]
3your_username : EAP "your_password"
最后,编辑 /etc/ipsec.conf
文件来配置您的客户端以匹配服务器的配置:
1[environment local]
2[label /etc/ipsec.conf]
3config setup
4
5conn ikev2-rw
6 right=server_domain_or_IP
7 # This should match the `leftid` value on your server's configuration
8 rightid=server_domain_or_IP
9 rightsubnet=0.0.0.0/0
10 rightauth=pubkey
11 leftsourceip=%config
12 leftid=username
13 leftauth=eap-mschapv2
14 eap_identity=%identity
15 auto=start
要连接到VPN,请键入:
1[environment local]
2sudo systemctl start strongswan-starter
要再次关闭,键入:
1[environment local]
2sudo systemctl stop strongswan-starter
使用charon-cmd
客户端进行单独关闭连接
要管理 StrongSwan 作为服务,您需要执行以下配置步骤。
首先,使用apt
更新本地包缓存。
1[environment local]
2sudo apt update
接下来,安装 StrongSwan 和用于身份验证的必要插件:
1[environment local]
2sudo apt install strongswan libcharon-extra-plugins
现在,您需要在 /etc/ipsec.d/cacerts
目录中复制 CA 证书的副本,以便您的客户端可以验证服务器的身份。
1[environment local]
2sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts
在此时,您可以使用charon-cmd
连接到VPN服务器,使用服务器的CA证书,VPN服务器的IP地址和您配置的用户名。
每次想要连接到VPN时,执行以下命令:
1[environment local]
2sudo charon-cmd --cert ca-cert.pem --host vpn_domain_or_IP --identity your_username
当被提示时,请提供VPN用户的密码,您将连接到VPN. 要切断连接,请在终端中按CTRL+C
,然后等待连接关闭。
从 iOS 连接
要在 iOS 设备上配置 VPN 连接,请遵循以下步骤:
- 发送给自己一封带有根证书的电子邮件.
- 在 iOS 设备上打开电子邮件,然后点击附带的证书文件,然后点击 Install,然后输入您的密码。 安装后,点击 Done.
- 点击 Settings, General, VPN,然后点击 Add VPN Configuration。 这将带来 VPN 连接配置屏幕。
- 点击 Type,选择 IKEv2。
- 在 Description字段中,输入 VPN 连接的简称。 这可能是任何你喜欢的。
- 在 **服务器和 远程 ID字段中,输入
从 Android 连接
按照以下步骤导入证书:
- 给自己发送一封带有 CA 证书的电子邮件. 将 CA 证书保存到您的下载文件夹.
- 从 Play 商店下载 StrongSwan VPN 客户端。
- 打开应用程序. 在右上角点击
更多
图标(...)并选择 CA 证书. - 在右上角再次点击
更多
图标(..). 选择 ** 导入证书**. - 在下载文件夹中浏览 CA 证书文件并选择导入应用程序。
现在证书已被导入到 StrongSwan 应用程序中,您可以通过以下步骤配置 VPN 连接:
- 在应用程序中,点击 ADD VPN PROFILE在顶部。
- 填写您的 VPN 服务器的域名或公共 IP 地址的 服务器。
- 确保 **IKEv2 EAP (用户名/密码)**被选为 VPN 类型。
- 填写您在服务器上定义的 用户名和 密码的凭证。
- 在 CA 证书部分中删除 自动选择,然后点击 选择 CA 证书。
- 点击屏幕顶部的 IMPORTED卡并选择您进口的 CA(如果您没有更早更改
DN
的话,它将被命名为VPN root CA
。 _M
当你想连接到VPN时,点击你刚刚在StrongSwan应用程序中创建的个人资料。
连接故障
如果无法导入证书,请确保文件具有.pem
扩展,而不是.pem.txt
。
如果您无法连接到VPN,请检查您所使用的服务器名称或IP地址。服务器的域名或IP地址必须与您在创建证书时配置为通用名称(CN)的内容相匹配。如果它们不匹配,VPN连接将不起作用。例如,如果您设置了具有vpn.example.com
CN的证书,您必须在输入VPN服务器详细信息时使用vpn.example.com
。
最后,双重检查VPN配置,以确保您使用域名时配置lefttid
值与@
符号:
1[label /etc/ipsec.conf]
2 [email protected]
如果您正在使用 IP 地址,请确保@
符号被省略,并确保在生成server-cert.pem
文件时,您包括了--san @IP_address
和--san IP_address
的旗帜。
结论
在本教程中,您已经构建了一个使用IKEv2协议的VPN服务器,您了解了控制服务器和客户端连接的左
和右
侧的指令,您还配置了Windows,macOS,iOS,Android或Linux客户端连接到VPN。
若要添加或删除用户,请再次跳过步骤 5。 /etc/ipsec.secrets
中的每个行为一个用户,因此添加或删除用户或更改密码只需要编辑文件。
现在,您可以放心,您的在线活动将保持安全,无论您去哪里,以及您使用的任何设备访问互联网。