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

介紹

A virtual private network, or VPN, allows you to securely encrypt traffic as it travels through untrusted networks, such as those at the coffee shop, a conference, or an airport.

Internet 金鑰交換 v2,簡稱 IKEv2,是一種協議,允許伺服器和客戶端之間直接進行 IPSec 隧道連接。在 IKEv2 VPN 實現中,IPSec 為網絡流量提供加密。在一些平台上(如 OS X 10.11+、iOS 9.1+ 和 Windows 10),原生支援 IKEv2,無需額外的應用程式,而且它能夠相當順利地處理客戶端的問題。

在本教程中,您將使用 StrongSwan 在 Ubuntu 22.04 伺服器上設置一個 IKEv2 VPN 伺服器。然後,您將學會如何使用 Windows、macOS、Ubuntu、iOS 和 Android 客戶端連接到它。

先決條件

完成本教程,您需要:

步驟1 — 安裝 StrongSwan

首先,您將安裝 StrongSwan,這是一個開源的 IPSec 守護程序,您將配置為 VPN 伺服器。您還將安裝公開金鑰基礎設施(PKI)組件,以便可以建立證書授權機構(CA)來為您的基礎設施提供憑證。

首先更新本地套件快取:

  1. sudo apt update

然後輸入以下命令來安裝軟件:

  1. sudo 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中的一些目錄匹配,最終你將移動所有創建的項目到那裡:

  1. mkdir -p ~/pki/{cacerts,certs,private}

然後,鎖定權限,以防止其他用戶查看我們的私有文件:

  1. chmod 700 ~/pki

現在你有了一個存儲所有東西的目錄結構,你可以生成一個根密鑰。這將是一個4096位的RSA密鑰,將用於簽署你的根證書授權證書:

執行這些命令來生成密鑰:

  1. pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem

之後,你可以繼續創建你的根證書授權,使用你剛剛生成的密鑰來簽署根證書:

  1. pki --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

使用--lifetime 3650標誌來確保證書授權機構的根證書在10年內有效。證書授權機構的根證書通常不會更改,因為它必須重新分發給依賴它的每個服務器和客戶端,所以10年是一個安全的默認到期值:

如果需要,可以更改區別名稱(DN)值。這裡的通用名稱(CN字段)只是指示符,因此不必與基礎設施中的任何內容匹配:

現在你已經有了你的根證書授權運行起來,你可以創建一個VPN服務器將使用的證書。

步驟 3 — 生成 VPN 伺服器的憑證

現在您將為 VPN 伺服器創建一個憑證和金鑰。此憑證將允許客戶端使用我們剛剛生成的 CA 憑證來驗證服務器的真實性。

首先,使用以下命令為 VPN 伺服器創建一個私鑰:

  1. pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem

現在,使用您在上一步中創建的 CA 金鑰來創建並簽署 VPN 伺服器憑證。執行以下命令,但將通用名稱(CN)和主題替代名稱(SAN)字段更改為您的 VPN 伺服器的 DNS 名稱或 IP 地址:

  1. pki --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 條目。在上一個命令塊中指定區分名稱(--dn ...)的行需要修改,如以下摘錄的行:

--dn "CN=IP 地址" --san @IP_地址 --san IP_地址 \

之所以需要這個額外的 --san @IP_地址 條目是因為某些客戶端在驗證服務器的身份時會檢查 TLS 憑證是否具有該服務器的 DNS 項目和 IP 地址項目。

使用--flag serverAuth选项表示证书将在加密隧道建立之前用于服务器身份验证。使用--flag ikeIntermediate选项来支持较旧的 macOS 客户端。

现在您已经生成了 StrongSwan 需要的所有 TLS/SSL 文件,您可以通过输入以下命令将文件移动到/etc/ipsec.d目录中:

  1. sudo cp -r ~/pki/* /etc/ipsec.d/

在这一步中,您已经创建了一个证书对,用于保护客户端和服务器之间的通信。您还使用 CA 密钥对证书进行了签名,因此客户端将能够使用 CA 证书验证 VPN 服务器的真实性。准备好所有这些证书后,您可以继续配置 StrongSwan。

第 4 步 — 配置 StrongSwan

StrongSwan 有一个默认的配置文件,其中包含一些示例,但我们需要自己进行大部分配置。让我们先备份该文件以供参考,然后从头开始:

  1. sudo mv /etc/ipsec.conf{,.original}

使用您喜欢的文本编辑器创建并打开一个新的空白配置文件。这里,您可以使用nano

  1. sudo nano /etc/ipsec.conf

注意:在設置 VPN 伺服器部分時,您將遇到涉及連接的 leftright 兩側的設置。在處理 IPSec VPN 時,按照慣例,left 一側指的是您正在配置的本地系統,即伺服器。這些設置中的右側指令將指的是遠端客戶端,如手機和其他電腦。

當您稍後在本教程中配置客戶端時,客戶端配置文件將使用各種 left 指令來引用自身,而伺服器將使用 right 側術語來引用。

首先,我們會告訴 StrongSwan 將守護進程狀態記錄為除錯信息並允許重複連接。將以下行添加到文件中:

/etc/ipsec.conf
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

然後,我們會為我們的 VPN 創建一個配置部分。我們還會告訴 StrongSwan 創建 IKEv2 VPN 隧道,並在啟動時自動加載此配置部分。將以下行添加到文件中:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes

我們還會配置死對等檢測以清除任何“懸掛”的連接,以防客戶端意外斷開連接。添加以下行:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    dpdaction=clear
    dpddelay=300s
    rekey=no

接下來,我們將配置伺服器的“left”側 IPSec 參數。以下每個參數都確保伺服器已配置為接受來自客戶端的連接並正確識別自身。一旦您熟悉了它們是什麼以及它們的用途,您將把這些設置添加到 /etc/ipsec.conf 文件中:

  • left=%any %any 值確保伺服器將使用接收傳入連線的網路介面來與客戶端進行後續通訊。例如,如果您正在通過私有網路連接客戶端,則伺服器將使用接收流量的私有 IP 地址進行其餘連線的通訊。
  • leftid=@server_domain_or_IP 此選項控制伺服器向客戶端呈現的名稱。當與下一個選項 leftcert 結合使用時,leftid 選項確保伺服器配置的名稱與公共憑證中包含的識別名稱 (DN) 相匹配。
  • leftcert=server-cert.pem 此選項是您在步驟 3 中配置的伺服器的公共憑證的路徑。如果沒有此憑證,伺服器將無法與客戶端進行身份驗證,或完成 IKEv2 設置的協商。
  • leftsendcert=always always 值確保連接到伺服器的任何客戶端都將始終在初始連線設置的一部分中收到伺服器的公共憑證的副本。
  • leftsubnet=0.0.0.0/0 您將添加的最後一個“left”端選項告訴客戶端關於伺服器後面可到達的子網。在這種情況下,0.0.0.0/0 用於表示整個 IPv4 地址集,這意味著伺服器將告訴客戶端默認將所有流量發送到 VPN 上。

現在您已經熟悉每個相關的“left”端選項,將它們全部添加到文件中,就像這樣:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    left=%any
    leftid=@server_domain_or_IP
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0

注意:在配置服务器ID(leftid)时,只有在您的VPN服务器将通过域名标识时才包含@字符:

/etc/ipsec.conf
    . . .    leftid=@vpn.example.com
    . . .

如果服务器将通过其IP地址标识,只需在其中放置IP地址:

/etc/ipsec.conf
    . . .
    leftid=your_server_ip
    . . .

接下来,我们可以配置客户端的“right”端IPSec参数。以下每个参数告诉服务器如何接受来自客户端的连接,客户端应如何对服务器进行身份验证,以及客户端将使用的私有IP地址范围和DNS服务器。一旦您熟悉了它们的作用以及为何使用它们,将每个设置添加到/etc/ipsec.conf文件中:

  • right=%any连接的right端使用%any选项指示服务器接受来自任何远程客户端的传入连接。
  • rightid=%any此选项确保服务器在建立加密隧道之前不会拒绝提供标识的客户端的连接。
  • rightauth=eap-mschapv2此选项配置客户端将用于向服务器进行身份验证的身份验证方法。这里使用eap-mschapv2以支持Windows、macOS和Android等设备的广泛兼容性。
  • rightsourceip=10.10.10.0/24此选项指示服务器从指定的10.10.10.0/24 IP地址池为客户端分配私有IP地址。
  • rightdns=8.8.8.8,8.8.4.4 這些IP地址是Google的公共DNS解析器。它們可以更改為使用其他公共解析器、VPN伺服器的解析器,或者客戶端可以訪問的任何其他解析器。
  • rightsendcert=never 此選項指示伺服器客戶端無需發送證書來驗證自己。

現在您已經熟悉了VPN所需的“right”端選項,請將以下行添加到/etc/ipsec.conf:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never

現在我們將告訴StrongSwan在客戶端連接時要求用戶憑據:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    eap_identity=%identity

最後,添加以下行以支持Linux、Windows、macOS、iOS和Android客戶端。這些行指定StrongSwan將允許不同客戶端使用的各種金鑰交換、哈希、身份驗證和加密算法(通常稱為密碼套件):

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!

每個支持的密碼套件之間由逗號分隔。例如chacha20poly1305-sha512-curve25519-prfsha512是一個套件,aes256gcm16-sha384-prfsha384-ecp384是另一個。這裡列出的密碼套件被選擇以確保在Windows、macOS、iOS、Android和Linux客戶端之間寬泛的兼容性。

完整的配置文件應該是這樣的:

/etc/ipsec.conf
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%any
    leftid=@server_domain_or_IP
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never
    eap_identity=%identity
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!

一旦您驗證了每行都已正確添加,請保存並關閉文件。如果您使用了nano,請按CTRL + XY,然後ENTER

現在您已經配置了VPN參數,可以繼續創建帳戶,以便用戶可以連接到伺服器。

步驟5 — 配置VPN驗證

您的VPN伺服器現在已配置為接受客戶端連接,但尚未配置任何憑據。您需要在一個名為ipsec.secrets的特殊配置文件中配置一些事情:

  • 您需要告訴StrongSwan在哪裡找到伺服器證書的私鑰,這樣伺服器就能夠對客戶端進行身份驗證。
  • 您還需要設置一個允許連接到VPN的用戶列表。

讓我們打開用於編輯的密鑰文件:

  1. sudo nano /etc/ipsec.secrets

首先,告訴StrongSwan在哪裡找到私鑰以及如何解析它。

/etc/ipsec.secrets
: RSA "server-key.pem"

確保該行以:字符開頭,並在其後有一個空格,使整行讀取: RSA "server-key.pem"

然後,您將定義用戶憑證。您可以使用任何您喜歡的用戶名或密碼組合:

/etc/ipsec.secrets
your_username : EAP "your_password"

保存並關閉文件。現在您已經完成了與VPN參數的工作,請重新啟動VPN服務,以應用我們的配置:

  1. sudo systemctl restart strongswan-starter

現在VPN伺服器已經完全配置好了,包括伺服器選項和用戶憑證,是時候繼續配置最重要的部分了:防火牆。

步驟6 — 配置防火牆和核心IP轉發

StrongSwan配置完成後,您需要配置防火牆以允許VPN流量通過並轉發它。

如果您遵循了先決的初始伺服器設置教程,應該已經啟用了UFW防火牆。如果您還沒有配置UFW,您應該首先添加一條規則,允許SSH連接通過防火牆,這樣您的當前會話在啟用UFW時不會關閉:

  1. sudo ufw allow OpenSSH

然後輸入以下命令啟用防火牆:

  1. sudo ufw enable

然後,添加一個規則,允許UDP流量通過標準的IPSec端口,5004500

  1. sudo ufw allow 500,4500/udp

接下來,您將打開UFW的一個配置文件,添加一些低級策略以路由和轉發IPSec封包。但是,在這之前,您需要找出我們伺服器上用於網際網路訪問的網絡接口。通過查詢與默認路由相關聯的設備來找到這個接口:

  1. ip route show default

您的公共接口應該跟在“dev”一詞後面。例如,此結果顯示了名為eth0的接口,在下面的示例中突出顯示:

Output
default via your_server_ip dev eth0 proto static

當您有您的公共網絡接口時,打開您的文本編輯器中的/etc/ufw/before.rules文件。此文件中的規則將在防火牆的其他常規輸入和輸出規則之前添加。它們用於配置網絡地址轉換(NAT),以便服務器可以正確地將連接路由到客戶端和互聯網。

  1. sudo nano /etc/ufw/before.rules

在文件頂部(在*filter行之前),添加以下配置塊。將上面配置中的每個eth0的實例更改為與ip route找到的接口名稱匹配。*nat行創建規則,以便防火牆可以正確地在VPN客戶端和互聯網之間路由和操作流量。*mangle行調整最大分段大小,以防止某些VPN客戶端可能出現的問題:

/etc/ufw/before.rules
*nat
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
COMMIT

*mangle
-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
COMMIT

*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
. . .

接下來,在*filter和鏈定義行之後,添加另一個配置塊:

/etc/ufw/before.rules
. . .
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]

-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT

這些行告訴防火牆轉發ESP(封裝安全有效載荷)流量,以便VPN客戶端能夠連接。 ESP為我們的VPN封包在穿越不受信任的網絡時提供了額外的安全性。

完成後,確認每行添加正確後,保存並關閉文件。如果您使用nano,請按CTRL + X,然後按Y,最後按ENTER

重新啟動防火牆之前,您還需要更改一些網絡核心參數,以允許從一個接口到另一個接口的路由。控制這些設置的文件稱為/etc/ufw/sysctl.conf。您需要在文件中配置一些內容。

首先,需要打開 IPv4 包轉發,以便流量可以在伺服器的 VPN 和公共面向網絡接口之間移動。接下來,您將禁用路徑 MTU 發現以防止封包分段問題。最後,我們不會接受 ICMP 重定向,也不會發送 ICMP 重定向以防止中間人攻擊。

使用nano或您喜歡的文本編輯器打開 UFW 的核心參數配置文件:

  1. sudo nano /etc/ufw/sysctl.conf

現在在文件末尾添加以下net/ipv4/ip_forward=1設置,以啟用在接口之間轉發封包:

/etc/ufw/sysctl.conf
. . .
net/ipv4/ip_forward=1

接下來,通過將以下行添加到文件末尾來阻止發送和接收 ICMP 重定向封包:

/etc/ufw/sysctl.conf
. . .
net/ipv4/conf/all/accept_redirects=0
net/ipv4/conf/all/send_redirects=0

最後,通過將此行添加到文件末尾來關閉路徑 MTU 發現:

/etc/ufw/sysctl.conf
. . .
net/ipv4/ip_no_pmtu_disc=1

完成後保存文件。現在,您可以通過禁用並重新啟用防火牆來啟用所有更改,因為 UFW 在重新啟動時應用這些設置:

  1. sudo ufw disable
  2. sudo ufw enable

系統將提示您確認此過程。輸入Y以使用新的設置重新啟用 UFW。

第7步 — 在Windows、macOS、Ubuntu、iOS和Android上测试VPN连接

現在您已經設置好了一切,是時候試試看了。首先,您需要複製您創建的CA證書並將其安裝在將連接到VPN的客戶端設備上。最簡單的方法是登錄到您的服務器並輸出證書文件的內容:

  1. cat /etc/ipsec.d/cacerts/ca-cert.pem

您會看到類似於以下的輸出:

Output
-----BEGIN CERTIFICATE----- MIIFNDCCAxygAwIBAgIIHCsidG5mXzgwDQYJKoZIhvcNAQEMBQAwODELMAkGA1UE . . . H2YUdz8XNHrJHvMQKWFpi0rlEcMs+MSXPFWE3Q7UbaZJ/h8wpSldSUbQRUlphExJ dJ4PX+MUJO/vjG1/ie6Kh25xbBAc3qNq8siiJZDwrg6vjEK7eiZ1rA== -----END CERTIFICATE-----

將此輸出複製到您的計算機上,包括 -----BEGIN CERTIFICATE----------END CERTIFICATE----- 行,然後將其保存到具有可識別名稱的文件中,例如 ca-cert.pem。確保您創建的文件具有 .pem 擴展名。

或者,使用SFTP將文件傳輸到您的計算機上

ca-cert.pem 文件下載到您的計算機後,您可以設置VPN的連接。

從Windows連接

有多種方法可以導入根憑證並配置Windows以連接VPN。第一種方法使用每個步驟的圖形工具。第二種方法使用PowerShell命令,可以編寫腳本並修改以適應您的VPN配置。

注意:這些說明已在運行版本1903和1909的Windows 10安裝上進行過測試。

使用圖形工具配置Windows

首先,按照以下步驟導入根憑證:

  1. WINDOWS+R鍵以打開執行對話框,輸入mmc.exe以啟動Windows管理控制台。

  2. 文件菜單中,導航到添加或移除快捷方式,從可用快捷方式列表中選擇證書,然後點擊添加

  3. 我們希望VPN能夠與任何用戶一起工作,因此選擇計算機帳戶,然後點擊下一步

  4. 我們正在本地計算機上配置事物,因此選擇本地計算機,然後點擊完成

  5. 控制台根節點下,展開證書(本地計算機)項目,展開受信任的根證書授權,然後選擇證書項目:

  6. 操作菜單中選擇所有任務,並點擊導入以顯示證書導入精靈。點擊下一步以跳過介紹。

  7. 要導入的文件屏幕上,按下瀏覽按鈕,確保將文件類型從“X.509證書(.cer;.crt)”更改為“所有文件(.)”,然後選擇你保存的ca-cert.pem文件。然後點擊下一步

  8. 確保憑證存儲設置為受信任的根憑證授權機構,然後點擊下一步

  9. 點擊完成以匯入憑證。

然後按以下步驟配置VPN:

  1. 啟動控制面板,然後導航到網絡和共享中心
  2. 點擊設置新的連接或網絡,然後選擇連接到工作場所
  3. 選擇使用我的網際網路連接(VPN)
  4. 輸入VPN伺服器詳細信息。在網際網路地址欄位中輸入伺服器的域名或IP地址,然後在目的地名稱中填入描述您的VPN連接的內容。然後點擊完成

使用PowerShell配置Windows

要使用 PowerShell 导入根 CA 证书,首先以管理员权限打开 PowerShell 提示符。要这样做,请右键单击开始菜单图标,然后选择 Windows PowerShell(管理员)。您也可以以管理员身份打开命令提示符,然后键入 powershell

接下来,我们将使用 Import-Certificate PowerShell 命令来导入证书。在以下命令中,第一个 -CertStoreLocation 参数将确保证书被导入到计算机的 受信任的根证书颁发机构 存储中,以便所有程序和用户都能够验证 VPN 服务器的证书。-FilePath 参数应指向您复制证书的位置。在以下示例中,路径是 C:\Users\sammy\Documents\ca-cert.pem。确保您编辑命令以匹配您使用的位置。

  1. Import-Certificate `
  2. -CertStoreLocation cert:\LocalMachine\Root\ `
  3. -FilePath C:\users\sammy\Documents\ca-cert.pem

该命令将输出类似以下内容:

Output
PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\Root Thumbprint Subject ---------- ------- DB00813B4087E9367861E8463A60CEA0ADC5F002 CN=VPN root CA

现在,要使用 PowerShell 配置 VPN,请运行以下命令。在 -ServerAddress 行上替换您服务器的 DNS 名称或 IP 地址。各种标志将确保 Windows 正确配置了与您在 /etc/ipsec.conf 中设置的选项匹配的适当安全参数。

  1. Add-VpnConnection -Name "VPN Connection" `
  2. -ServerAddress "server_domain_or_IP" `
  3. -TunnelType "IKEv2" `
  4. -AuthenticationMethod "EAP" `
  5. -EncryptionLevel "Maximum" `
  6. -RememberCredential `

如果命令成功执行,则不会有任何输出。要确认 VPN 已正确配置,请使用 Get-VPNConnection 命令:

  1. Get-VpnConnection -Name "VPN Connection"

您将收到以下输出:

Output
Name : VPN Connection ServerAddress : your_server_ip AllUserConnection : False Guid : {B055A1AB-175C-4028-B4A8-D34309A2B20E} TunnelType : Ikev2 AuthenticationMethod : {Eap} EncryptionLevel : Maximum L2tpIPsecAuth : UseWinlogonCredential : False EapConfigXmlStream : #document ConnectionStatus : Disconnected RememberCredential : True SplitTunneling : False DnsSuffix : IdleDisconnectSeconds : 0

默認情況下,Windows 選擇較舊且速度較慢的算法。運行 Set-VpnConnectionIPsecConfiguration 命令,以升級 Windows 將用於 IKEv2 金鑰交換的加密參數,並加密封包:

  1. Set-VpnConnectionIPsecConfiguration -Name "VPN Connection" `
  2. -AuthenticationTransformConstants GCMAES256 `
  3. -CipherTransformConstants GCMAES256 `
  4. -DHGroup ECP384 `
  5. -IntegrityCheckMethod SHA384 `
  6. -PfsGroup ECP384 `
  7. -EncryptionMethod GCMAES256

注意:如果您想刪除 VPN 連接並使用不同的選項重新配置它,您可以運行 Remove-VpnConnection 命令。

  1. Remove-VpnConnection -Name "VPN Connection" -Force

使用 -Force 標誌將跳過提示您確認刪除。如果您嘗試使用此命令刪除 VPN,您必須從 VPN 斷開連接。

連接到 VPN

一旦導入證書並使用任一方法配置了 VPN,您的新 VPN 連接將顯示在網絡列表中。選擇 VPN,然後點擊連接。將提示您輸入用戶名和密碼。輸入它們,然後點擊確定,您將連接成功。

從 macOS 連接

按照以下步驟導入證書:

  1. 雙擊證書文件。 鑰匙串訪問 將彈出一個對話框,上面寫著“鑰匙串訪問正在嘗試修改系統鑰匙串。輸入密碼以允許此操作。”
  2. 輸入您的密碼,然後點擊修改鑰匙串
  3. 將新匯入的VPN憑證進行雙擊。這將彈出一個小屬性窗口,您可以在其中指定信任級別。將IP安全(IPSec)設置為始終信任,然後您將再次提示輸入密碼。輸入密碼後,此設置將自動保存。

現在,憑證已匯入並受信任,請按照以下步驟配置VPN連接:

  1. 進入系統偏好設置,選擇網絡。
  2. 點擊位於網絡列表左下角的小“加號”按鈕。
  3. 在彈出的窗口中,將介面設置為VPN,將VPN類型設置為IKEv2,並給連接命名。
  4. 在伺服器和遠端ID字段中,輸入伺服器的域名或IP地址。將本地ID留空。
  5. 點擊“驗證設置”,選擇“用戶名”,然後輸入您為VPN用戶配置的用戶名和密碼。然後點擊“確定”。

最後,點擊“連接”以連接到VPN。您現在應該已連接到VPN。

從Ubuntu連接

要從Ubuntu機器連接,您可以設置並管理StrongSwan作為服務,或者每次想要連接時都使用一個命令。提供了兩種方法的說明。

管理StrongSwan作為服務

要將StrongSwan作為服務管理,您需要執行以下配置步驟。

首先,使用apt更新您的本地套件緩存。

  1. sudo apt update

接下來,安裝StrongSwan和所需的身份驗證插件:

  1. sudo apt install strongswan libcharon-extra-plugins

現在,您需要將CA證書的副本放入/etc/ipsec.d/cacerts目錄,以便您的客戶端可以驗證服務器的身份。運行以下命令將ca-cert.pem文件複製到指定位置:

  1. sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

為了確保VPN僅在需要時運行,使用systemctl禁用StrongSwan的自動運行:

  1. sudo systemctl disable --now strongswan-starter

接下來,配置您將用於驗證到VPN服務器的用戶名和密碼。使用nano或您偏好的編輯器編輯/etc/ipsec.secrets

  1. sudo nano /etc/ipsec.secrets

添加以下行,將突出顯示的用戶名和密碼值編輯為與您在服務器上配置的值匹配:

/etc/ipsec.secrets
your_username : EAP "your_password"

最後,編輯/etc/ipsec.conf文件以配置您的客戶端以匹配服務器的配置:

/etc/ipsec.conf
config setup

conn ikev2-rw
    right=server_domain_or_IP
    # 這應該與您服務器配置中的`leftid`值匹配
    rightid=server_domain_or_IP
    rightsubnet=0.0.0.0/0
    rightauth=pubkey
    leftsourceip=%config
    leftid=username
    leftauth=eap-mschapv2
    eap_identity=%identity
    auto=start

要連接到VPN,輸入:

  1. sudo systemctl start strongswan-starter

要再次斷開,輸入:

  1. sudo systemctl stop strongswan-starter

使用charon-cmd客戶端進行一次性連接

管理StrongSwan作為服務,您需要執行以下配置步驟。

首先,使用apt更新本地套件緩存

  1. sudo apt update

接下來,安裝StrongSwan和所需的身份驗證插件:

  1. sudo apt install strongswan libcharon-extra-plugins

現在,您需要將CA證書的副本放入/etc/ipsec.d/cacerts目錄中,以便您的客戶端可以驗證服務器的身份。運行以下命令將ca-cert.pem文件複製到指定位置:

  1. sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

在這一點上,您可以使用服務器的CA證書、VPN服務器的IP地址和您配置的用戶名使用charon-cmd連接到VPN服務器。

每次想要連接到VPN時運行以下命令:

  1. sudo charon-cmd --cert ca-cert.pem --host vpn_domain_or_IP --identity your_username

在提示時,輸入VPN用戶的密碼,您將連接到VPN。要斷開連接,在終端中按CTRL+C並等待連接關閉。

從iOS連接

要在iOS設備上配置VPN連接,請按照以下步驟操作:

  1. 將帶有根證書附件的電子郵件發送給自己。
  2. 在iOS設備上打開郵件,點擊附件的證書文件,然後點擊安裝並輸入您的密碼。安裝完成後,點擊完成
  3. 前往設置常規VPN,然後點擊添加VPN配置。這將顯示VPN連接配置屏幕。
  4. 點擊類型,然後選擇IKEv2
  5. 描述字段中,輸入VPN連接的簡短名稱。這可以是您喜歡的任何內容。
  6. 服務器遠程ID字段中,輸入服務器的域名或IP地址。本地ID字段可以留空。
  7. 身份驗證部分輸入您的用戶名和密碼,然後點擊完成
  8. 選擇剛剛創建的VPN連接,點擊頁面頂部的開關,您將連接。

從Android連接

按照以下步驟導入證書:

  1. 發送包含CA證書附件的電子郵件給自己。 將CA證書保存到下載文件夾中。
  2. 從Play商店下載StrongSwan VPN客戶端
  3. 打開應用程序。 點擊右上角的“更多”圖標(),然後選擇CA證書
  4. 再次點擊右上角的“更多”圖標(. . .)。選擇導入證書
  5. 瀏覽到您下載文件夾中的CA證書文件,並選擇將其導入應用程序。

現在證書已導入到StrongSwan應用程序中,您可以按照以下步驟配置VPN連接:

  1. 在應用程序中,點擊頂部的添加VPN配置文件
  2. 填寫服務器,填入您的VPN服務器的域名或公共IP地址。
  3. 確保選擇了IKEv2 EAP(用戶名/密碼)作為VPN類型。
  4. 填寫用戶名密碼,填入您在服務器上定義的憑證。
  5. CA證書部分取消選擇自動選擇,並點擊選擇CA證書
  6. 點擊屏幕頂部的已導入選項卡,並選擇您導入的CA(如果您之前沒有更改“DN”,則將命名為“VPN根CA”)。
  7. 如果需要,填寫配置文件名稱(可選)以便更好地描述。

當您希望連接到VPN時,點擊您在StrongSwan應用程序中剛建立的配置文件。

故障排除連接

如果您無法導入證書,請確保檔案具有.pem擴展名,而不是.pem.txt

如果無法連接到VPN,請檢查您使用的伺服器名稱或IP位址。伺服器的域名或IP位址必須與您在建立證書時配置為通用名稱(CN)的內容相匹配。如果它們不匹配,VPN連線將無法工作。例如,如果您設置了具有CN為vpn.example.com的證書,請在輸入VPN伺服器詳細資訊時使用vpn.example.com。請仔細檢查生成證書時使用的命令以及建立VPN連線時使用的值。

最後,請仔細檢查VPN配置,確保leftid值在使用域名時已配置為@符號:

/etc/ipsec.conf
    leftid=@vpn.example.com

如果您使用IP位址,請確保省略@符號。同樣,請確保在生成server-cert.pem檔案時,包括--san @IP地址--san IP地址標誌。

結論

在本教程中,您已搭建了一個使用IKEv2協議的VPN伺服器。您了解了在伺服器和客戶端上控制連接的leftright指令。您還配置了Windows、macOS、iOS、Android或Linux客戶端以連接到VPN。

要添加或移除用戶,請再次跳至第 5 步。在 /etc/ipsec.secrets 中的每一行都是為一個用戶而設,因此添加或移除用戶,或更改密碼只需編輯該文件。

現在,您可以放心,在您訪問互聯網的任何地方和使用的任何設備上,您的在線活動都將保持安全。

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-ikev2-vpn-server-with-strongswan-on-ubuntu-22-04