如何在 Ubuntu 22.04 上使用 StrongSwan 设置 IKEv2 VPN 服务器

介绍

虚拟私人网络,或VPN,允许您安全地加密流量,因为它通过不受信任的网络,如咖啡店,会议或机场。

Internet Key Exchange v2,或IKEv2,是一个协议,允许服务器和客户端之间的直接IPsec隧道。在IKEv2VPN实现中,IPsec为网络流量提供加密。

在本教程中,您将使用 StrongSwan在 Ubuntu 22.04 服务器上设置 IKEv2 VPN 服务器,然后您将学习如何与其连接到 Windows、macOS、Ubuntu、iOS 和 Android 客户端。

前提条件

要完成本教程,您将需要:

步骤 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 字段)只是指标,因此它不必匹配您的基础设施中的任何东西。

现在你已经启动了 root 证书权限,你可以创建一个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 的服务器部分时,您会遇到指向连接的 leftright 侧面的设置。当您使用 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 端口,5004500:

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

首先,按照以下步骤导入根证书:

  1. Press WINDOWS+R to bring up the Run dialog, and enter mmc.exe to launch the Windows Management Console.
  2. From the File menu, navigate to Add or Remove Snap-in, select Certificates from the list of available snap-ins, and click Add.
  3. We want the VPN to work with any user, so select Computer Account and click Next.
  4. We're configuring things on the local computer, so select Local Computer, then click Finish.
  5. Under the Console Root node, expand the Certificates (Local Computer) entry, expand Trusted Root Certification Authorities, and then select the Certificates entry: Certificates view
  6. From the Action menu, select All Tasks and click Import to display the Certificate Import Wizard. Click Next to move past the introduction.
  7. On the File to Import screen, press the Browse button, ensure that you change the file type from X.509 Certificate (_.cer;_.crt) to All Files (_._), and select the ca-cert.pem file that you've saved. Then click Next.
  8. Ensure that the Certificate Store is set to Trusted Root Certification Authorities, and click Next.
  9. Click Finish to import the certificate.

然后用这些步骤配置VPN:

  1. 启动 控制面板,然后导航到 网络和共享中心.
  2. 点击 设置新连接或网络,然后选择 连接到工作场所.
  3. 选择 使用我的互联网连接(VPN).
  4. 输入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 连接

按照以下步骤导入证书:

  1. 双击证书文件. Keychain Access将出现一个对话框,表示Keychain Access正在尝试修改系统密钥链。 输入您的密码以允许此项操作
  2. 输入您的密码,然后点击 Modify Keychain
  3. 双击新进口的VPN证书。 这会带来一个小型属性窗口,您可以指定信任级别。 设置 **IP Security(IPSec)**到 Always Trust,您将被要求再次使用您的密码。 输入密码后,此设置会自动保存。

现在证书已被导入并受信任,请按照以下步骤配置VPN连接:

  1. 进入 系统偏好选项,选择 网络.
  2. 点击网络列表的左下角的小按钮。
  3. 在出现的弹出窗口中,设置 InterfaceVPN,设置 VPN 类型IKEv2,并给连接一个名称。
  4. 服务器远程 ID 字段中,输入服务器的域名或 IP 地址。 留下 本地 ID 空白。
  5. 点击 身份验证设置,选择 用户名,然后输入您为您的 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 连接,请遵循以下步骤:

  1. 发送给自己一封带有根证书的电子邮件.
  2. 在 iOS 设备上打开电子邮件,然后点击附带的证书文件,然后点击 Install,然后输入您的密码。 安装后,点击 Done.
  3. 点击 Settings, General, VPN,然后点击 Add VPN Configuration。 这将带来 VPN 连接配置屏幕。
  4. 点击 Type,选择 IKEv2
  5. Description字段中,输入 VPN 连接的简称。 这可能是任何你喜欢的。
  6. 在 **服务器和 远程 ID字段中,输入

从 Android 连接

按照以下步骤导入证书:

  1. 给自己发送一封带有 CA 证书的电子邮件. 将 CA 证书保存到您的下载文件夹.
  2. 从 Play 商店下载 StrongSwan VPN 客户端
  3. 打开应用程序. 在右上角点击更多图标(...)并选择 CA 证书.
  4. 在右上角再次点击更多图标(..). 选择 ** 导入证书**.
  5. 在下载文件夹中浏览 CA 证书文件并选择导入应用程序。

现在证书已被导入到 StrongSwan 应用程序中,您可以通过以下步骤配置 VPN 连接:

  1. 在应用程序中,点击 ADD VPN PROFILE在顶部。
  2. 填写您的 VPN 服务器的域名或公共 IP 地址的 服务器
  3. 确保 **IKEv2 EAP (用户名/密码)**被选为 VPN 类型。
  4. 填写您在服务器上定义的 用户名密码的凭证。
  5. CA 证书部分中删除 自动选择,然后点击 选择 CA 证书
  6. 点击屏幕顶部的 IMPORTED卡并选择您进口的 CA(如果您没有更早更改DN的话,它将被命名为VPN root CA。 _M

当你想连接到VPN时,点击你刚刚在StrongSwan应用程序中创建的个人资料。

连接故障

如果无法导入证书,请确保文件具有.pem扩展,而不是.pem.txt

如果您无法连接到VPN,请检查您所使用的服务器名称或IP地址。服务器的域名或IP地址必须与您在创建证书时配置为通用名称(CN)的内容相匹配。如果它们不匹配,VPN连接将不起作用。例如,如果您设置了具有vpn.example.comCN的证书,您必须在输入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 中的每个行为一个用户,因此添加或删除用户或更改密码只需要编辑文件。

现在,您可以放心,您的在线活动将保持安全,无论您去哪里,以及您使用的任何设备访问互联网。

Published At
Categories with 技术
comments powered by Disqus