介紹
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 客戶端連接到它。
先決條件
完成本教程,您需要:
- 按照 Ubuntu 22.04 初始伺服器設置指南 配置的一個 Ubuntu 22.04 伺服器,其中包括一個
sudo
非 root 用戶和一個防火牆。
步驟1 — 安裝 StrongSwan
首先,您將安裝 StrongSwan,這是一個開源的 IPSec 守護程序,您將配置為 VPN 伺服器。您還將安裝公開金鑰基礎設施(PKI)組件,以便可以建立證書授權機構(CA)來為您的基礎設施提供憑證。
首先更新本地套件快取:
然後輸入以下命令來安裝軟件:
額外的libcharon-extauth-plugins
套件用於確保各種客戶端可以使用共享的用戶名和密碼驗證到您的伺服器。libstrongswan-extra-plugins
套件包括在內,以便 Strongswan 支援使用Curve25519
密碼套件的橢圓曲線密碼套件。
現在一切都安裝好了,接下來開始創建您的證書。
步驟2 — 建立證書授權機構
一個 IKEv2 伺服器需要一個證書來識別自己給客戶端。為了幫助創建所需的證書,strongswan-pki
套件附帶了一個稱為pki
的實用工具,用於生成證書授權機構和伺服器證書。
開始時,建立一些目錄以存儲你將要工作的所有資源。目錄結構與/etc/ipsec.d
中的一些目錄匹配,最終你將移動所有創建的項目到那裡:
然後,鎖定權限,以防止其他用戶查看我們的私有文件:
現在你有了一個存儲所有東西的目錄結構,你可以生成一個根密鑰。這將是一個4096位的RSA密鑰,將用於簽署你的根證書授權證書:
執行這些命令來生成密鑰:
之後,你可以繼續創建你的根證書授權,使用你剛剛生成的密鑰來簽署根證書:
使用--lifetime 3650
標誌來確保證書授權機構的根證書在10年內有效。證書授權機構的根證書通常不會更改,因為它必須重新分發給依賴它的每個服務器和客戶端,所以10年是一個安全的默認到期值:
如果需要,可以更改區別名稱(DN)值。這裡的通用名稱(CN字段)只是指示符,因此不必與基礎設施中的任何內容匹配:
現在你已經有了你的根證書授權運行起來,你可以創建一個VPN服務器將使用的證書。
步驟 3 — 生成 VPN 伺服器的憑證
現在您將為 VPN 伺服器創建一個憑證和金鑰。此憑證將允許客戶端使用我們剛剛生成的 CA 憑證來驗證服務器的真實性。
首先,使用以下命令為 VPN 伺服器創建一個私鑰:
現在,使用您在上一步中創建的 CA 金鑰來創建並簽署 VPN 伺服器憑證。執行以下命令,但將通用名稱(CN)和主題替代名稱(SAN)字段更改為您的 VPN 伺服器的 DNS 名稱或 IP 地址:
注意:如果您使用的是 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
目录中:
在这一步中,您已经创建了一个证书对,用于保护客户端和服务器之间的通信。您还使用 CA 密钥对证书进行了签名,因此客户端将能够使用 CA 证书验证 VPN 服务器的真实性。准备好所有这些证书后,您可以继续配置 StrongSwan。
第 4 步 — 配置 StrongSwan
StrongSwan 有一个默认的配置文件,其中包含一些示例,但我们需要自己进行大部分配置。让我们先备份该文件以供参考,然后从头开始:
使用您喜欢的文本编辑器创建并打开一个新的空白配置文件。这里,您可以使用nano
:
注意:在設置 VPN 伺服器部分時,您將遇到涉及連接的 left 和 right 兩側的設置。在處理 IPSec VPN 時,按照慣例,left 一側指的是您正在配置的本地系統,即伺服器。這些設置中的右側指令將指的是遠端客戶端,如手機和其他電腦。
當您稍後在本教程中配置客戶端時,客戶端配置文件將使用各種 left 指令來引用自身,而伺服器將使用 right 側術語來引用。
首先,我們會告訴 StrongSwan 將守護進程狀態記錄為除錯信息並允許重複連接。將以下行添加到文件中:
config setup
charondebug="ike 1, knl 1, cfg 0"
uniqueids=no
然後,我們會為我們的 VPN 創建一個配置部分。我們還會告訴 StrongSwan 創建 IKEv2 VPN 隧道,並在啟動時自動加載此配置部分。將以下行添加到文件中:
. . .
conn ikev2-vpn
auto=add
compress=no
type=tunnel
keyexchange=ikev2
fragmentation=yes
forceencaps=yes
我們還會配置死對等檢測以清除任何“懸掛”的連接,以防客戶端意外斷開連接。添加以下行:
. . .
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”端選項,將它們全部添加到文件中,就像這樣:
. . .
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服务器将通过域名标识时才包含@
字符:
. . . leftid=@vpn.example.com
. . .
如果服务器将通过其IP地址标识,只需在其中放置IP地址:
. . .
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
:
. . .
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在客戶端連接時要求用戶憑據:
. . .
conn ikev2-vpn
. . .
eap_identity=%identity
最後,添加以下行以支持Linux、Windows、macOS、iOS和Android客戶端。這些行指定StrongSwan將允許不同客戶端使用的各種金鑰交換、哈希、身份驗證和加密算法(通常稱為密碼套件):
. . .
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客戶端之間寬泛的兼容性。
完整的配置文件應該是這樣的:
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 + X
,Y
,然後ENTER
。
現在您已經配置了VPN參數,可以繼續創建帳戶,以便用戶可以連接到伺服器。
步驟5 — 配置VPN驗證
您的VPN伺服器現在已配置為接受客戶端連接,但尚未配置任何憑據。您需要在一個名為ipsec.secrets
的特殊配置文件中配置一些事情:
- 您需要告訴StrongSwan在哪裡找到伺服器證書的私鑰,這樣伺服器就能夠對客戶端進行身份驗證。
- 您還需要設置一個允許連接到VPN的用戶列表。
讓我們打開用於編輯的密鑰文件:
首先,告訴StrongSwan在哪裡找到私鑰以及如何解析它。
: RSA "server-key.pem"
確保該行以:
字符開頭,並在其後有一個空格,使整行讀取: RSA "server-key.pem"
。
然後,您將定義用戶憑證。您可以使用任何您喜歡的用戶名或密碼組合:
your_username : EAP "your_password"
保存並關閉文件。現在您已經完成了與VPN參數的工作,請重新啟動VPN服務,以應用我們的配置:
現在VPN伺服器已經完全配置好了,包括伺服器選項和用戶憑證,是時候繼續配置最重要的部分了:防火牆。
步驟6 — 配置防火牆和核心IP轉發
StrongSwan配置完成後,您需要配置防火牆以允許VPN流量通過並轉發它。
如果您遵循了先決的初始伺服器設置教程,應該已經啟用了UFW防火牆。如果您還沒有配置UFW,您應該首先添加一條規則,允許SSH連接通過防火牆,這樣您的當前會話在啟用UFW時不會關閉:
然後輸入以下命令啟用防火牆:
然後,添加一個規則,允許UDP流量通過標準的IPSec端口,500
和4500
:
接下來,您將打開UFW的一個配置文件,添加一些低級策略以路由和轉發IPSec封包。但是,在這之前,您需要找出我們伺服器上用於網際網路訪問的網絡接口。通過查詢與默認路由相關聯的設備來找到這個接口:
您的公共接口應該跟在“dev”一詞後面。例如,此結果顯示了名為eth0
的接口,在下面的示例中突出顯示:
Outputdefault via your_server_ip dev eth0 proto static
當您有您的公共網絡接口時,打開您的文本編輯器中的/etc/ufw/before.rules
文件。此文件中的規則將在防火牆的其他常規輸入和輸出規則之前添加。它們用於配置網絡地址轉換(NAT),以便服務器可以正確地將連接路由到客戶端和互聯網。
在文件頂部(在*filter
行之前),添加以下配置塊。將上面配置中的每個eth0
的實例更改為與ip route
找到的接口名稱匹配。*nat
行創建規則,以便防火牆可以正確地在VPN客戶端和互聯網之間路由和操作流量。*mangle
行調整最大分段大小,以防止某些VPN客戶端可能出現的問題:
*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
和鏈定義行之後,添加另一個配置塊:
. . .
*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 的核心參數配置文件:
現在在文件末尾添加以下net/ipv4/ip_forward=1
設置,以啟用在接口之間轉發封包:
. . .
net/ipv4/ip_forward=1
接下來,通過將以下行添加到文件末尾來阻止發送和接收 ICMP 重定向封包:
. . .
net/ipv4/conf/all/accept_redirects=0
net/ipv4/conf/all/send_redirects=0
最後,通過將此行添加到文件末尾來關閉路徑 MTU 發現:
. . .
net/ipv4/ip_no_pmtu_disc=1
完成後保存文件。現在,您可以通過禁用並重新啟用防火牆來啟用所有更改,因為 UFW 在重新啟動時應用這些設置:
系統將提示您確認此過程。輸入Y
以使用新的設置重新啟用 UFW。
第7步 — 在Windows、macOS、Ubuntu、iOS和Android上测试VPN连接
現在您已經設置好了一切,是時候試試看了。首先,您需要複製您創建的CA證書並將其安裝在將連接到VPN的客戶端設備上。最簡單的方法是登錄到您的服務器並輸出證書文件的內容:
您會看到類似於以下的輸出:
Output-----BEGIN CERTIFICATE-----
MIIFNDCCAxygAwIBAgIIHCsidG5mXzgwDQYJKoZIhvcNAQEMBQAwODELMAkGA1UE
. . .
H2YUdz8XNHrJHvMQKWFpi0rlEcMs+MSXPFWE3Q7UbaZJ/h8wpSldSUbQRUlphExJ
dJ4PX+MUJO/vjG1/ie6Kh25xbBAc3qNq8siiJZDwrg6vjEK7eiZ1rA==
-----END CERTIFICATE-----
將此輸出複製到您的計算機上,包括 -----BEGIN CERTIFICATE-----
和 -----END CERTIFICATE-----
行,然後將其保存到具有可識別名稱的文件中,例如 ca-cert.pem
。確保您創建的文件具有 .pem
擴展名。
將 ca-cert.pem
文件下載到您的計算機後,您可以設置VPN的連接。
從Windows連接
有多種方法可以導入根憑證並配置Windows以連接VPN。第一種方法使用每個步驟的圖形工具。第二種方法使用PowerShell命令,可以編寫腳本並修改以適應您的VPN配置。
注意:這些說明已在運行版本1903和1909的Windows 10安裝上進行過測試。
使用圖形工具配置Windows
首先,按照以下步驟導入根憑證:
-
按
WINDOWS+R
鍵以打開執行對話框,輸入mmc.exe
以啟動Windows管理控制台。 -
從文件菜單中,導航到添加或移除快捷方式,從可用快捷方式列表中選擇證書,然後點擊添加。
-
我們希望VPN能夠與任何用戶一起工作,因此選擇計算機帳戶,然後點擊下一步。
-
我們正在本地計算機上配置事物,因此選擇本地計算機,然後點擊完成。
-
在控制台根節點下,展開證書(本地計算機)項目,展開受信任的根證書授權,然後選擇證書項目:
-
從操作菜單中選擇所有任務,並點擊導入以顯示證書導入精靈。點擊下一步以跳過介紹。
-
在要導入的文件屏幕上,按下瀏覽按鈕,確保將文件類型從“X.509證書(.cer;.crt)”更改為“所有文件(.)”,然後選擇你保存的
ca-cert.pem
文件。然後點擊下一步。 -
確保憑證存儲設置為受信任的根憑證授權機構,然後點擊下一步。
-
點擊完成以匯入憑證。
然後按以下步驟配置VPN:
- 啟動控制面板,然後導航到網絡和共享中心。
- 點擊設置新的連接或網絡,然後選擇連接到工作場所。
- 選擇使用我的網際網路連接(VPN)。
- 輸入VPN伺服器詳細信息。在網際網路地址欄位中輸入伺服器的域名或IP地址,然後在目的地名稱中填入描述您的VPN連接的內容。然後點擊完成。
使用PowerShell配置Windows
要使用 PowerShell 导入根 CA 证书,首先以管理员权限打开 PowerShell 提示符。要这样做,请右键单击开始菜单图标,然后选择 Windows PowerShell(管理员)
。您也可以以管理员身份打开命令提示符,然后键入 powershell
。
接下来,我们将使用 Import-Certificate
PowerShell 命令来导入证书。在以下命令中,第一个 -CertStoreLocation
参数将确保证书被导入到计算机的 受信任的根证书颁发机构 存储中,以便所有程序和用户都能够验证 VPN 服务器的证书。-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
中设置的选项匹配的适当安全参数。
如果命令成功执行,则不会有任何输出。要确认 VPN 已正确配置,请使用 Get-VPNConnection
命令:
您将收到以下输出:
OutputName : 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 金鑰交換的加密參數,並加密封包:
注意:如果您想刪除 VPN 連接並使用不同的選項重新配置它,您可以運行 Remove-VpnConnection
命令。
使用 -Force
標誌將跳過提示您確認刪除。如果您嘗試使用此命令刪除 VPN,您必須從 VPN 斷開連接。
連接到 VPN
一旦導入證書並使用任一方法配置了 VPN,您的新 VPN 連接將顯示在網絡列表中。選擇 VPN,然後點擊連接。將提示您輸入用戶名和密碼。輸入它們,然後點擊確定,您將連接成功。
從 macOS 連接
按照以下步驟導入證書:
- 雙擊證書文件。 鑰匙串訪問 將彈出一個對話框,上面寫著“鑰匙串訪問正在嘗試修改系統鑰匙串。輸入密碼以允許此操作。”
- 輸入您的密碼,然後點擊修改鑰匙串
- 將新匯入的VPN憑證進行雙擊。這將彈出一個小屬性窗口,您可以在其中指定信任級別。將IP安全(IPSec)設置為始終信任,然後您將再次提示輸入密碼。輸入密碼後,此設置將自動保存。
現在,憑證已匯入並受信任,請按照以下步驟配置VPN連接:
- 進入系統偏好設置,選擇網絡。
- 點擊位於網絡列表左下角的小“加號”按鈕。
- 在彈出的窗口中,將介面設置為VPN,將VPN類型設置為IKEv2,並給連接命名。
- 在伺服器和遠端ID字段中,輸入伺服器的域名或IP地址。將本地ID留空。
- 點擊“驗證設置”,選擇“用戶名”,然後輸入您為VPN用戶配置的用戶名和密碼。然後點擊“確定”。
最後,點擊“連接”以連接到VPN。您現在應該已連接到VPN。
從Ubuntu連接
要從Ubuntu機器連接,您可以設置並管理StrongSwan作為服務,或者每次想要連接時都使用一個命令。提供了兩種方法的說明。
管理StrongSwan作為服務
要將StrongSwan作為服務管理,您需要執行以下配置步驟。
首先,使用apt
更新您的本地套件緩存。
接下來,安裝StrongSwan和所需的身份驗證插件:
現在,您需要將CA證書的副本放入/etc/ipsec.d/cacerts
目錄,以便您的客戶端可以驗證服務器的身份。運行以下命令將ca-cert.pem
文件複製到指定位置:
為了確保VPN僅在需要時運行,使用systemctl
禁用StrongSwan的自動運行:
接下來,配置您將用於驗證到VPN服務器的用戶名和密碼。使用nano或您偏好的編輯器編輯/etc/ipsec.secrets
:
添加以下行,將突出顯示的用戶名和密碼值編輯為與您在服務器上配置的值匹配:
your_username : EAP "your_password"
最後,編輯/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,輸入:
要再次斷開,輸入:
使用charon-cmd
客戶端進行一次性連接
管理StrongSwan作為服務,您需要執行以下配置步驟。
首先,使用apt
更新本地套件緩存
接下來,安裝StrongSwan和所需的身份驗證插件:
現在,您需要將CA證書的副本放入/etc/ipsec.d/cacerts
目錄中,以便您的客戶端可以驗證服務器的身份。運行以下命令將ca-cert.pem
文件複製到指定位置:
在這一點上,您可以使用服務器的CA證書、VPN服務器的IP地址和您配置的用戶名使用charon-cmd
連接到VPN服務器。
每次想要連接到VPN時運行以下命令:
在提示時,輸入VPN用戶的密碼,您將連接到VPN。要斷開連接,在終端中按CTRL+C
並等待連接關閉。
從iOS連接
要在iOS設備上配置VPN連接,請按照以下步驟操作:
- 將帶有根證書附件的電子郵件發送給自己。
- 在iOS設備上打開郵件,點擊附件的證書文件,然後點擊安裝並輸入您的密碼。安裝完成後,點擊完成。
- 前往設置,常規,VPN,然後點擊添加VPN配置。這將顯示VPN連接配置屏幕。
- 點擊類型,然後選擇IKEv2。
- 在描述字段中,輸入VPN連接的簡短名稱。這可以是您喜歡的任何內容。
- 在服務器和遠程ID字段中,輸入服務器的域名或IP地址。本地ID字段可以留空。
- 在身份驗證部分輸入您的用戶名和密碼,然後點擊完成。
- 選擇剛剛創建的VPN連接,點擊頁面頂部的開關,您將連接。
從Android連接
按照以下步驟導入證書:
- 發送包含CA證書附件的電子郵件給自己。 將CA證書保存到下載文件夾中。
- 從Play商店下載StrongSwan VPN客戶端。
- 打開應用程序。 點擊右上角的“更多”圖標(…),然後選擇CA證書。
- 再次點擊右上角的“更多”圖標(. . .)。選擇導入證書。
- 瀏覽到您下載文件夾中的CA證書文件,並選擇將其導入應用程序。
現在證書已導入到StrongSwan應用程序中,您可以按照以下步驟配置VPN連接:
- 在應用程序中,點擊頂部的添加VPN配置文件。
- 填寫服務器,填入您的VPN服務器的域名或公共IP地址。
- 確保選擇了IKEv2 EAP(用戶名/密碼)作為VPN類型。
- 填寫用戶名和密碼,填入您在服務器上定義的憑證。
- 在CA證書部分取消選擇自動選擇,並點擊選擇CA證書。
- 點擊屏幕頂部的已導入選項卡,並選擇您導入的CA(如果您之前沒有更改“DN”,則將命名為“VPN根CA”)。
- 如果需要,填寫配置文件名稱(可選)以便更好地描述。
當您希望連接到VPN時,點擊您在StrongSwan應用程序中剛建立的配置文件。
故障排除連接
如果您無法導入證書,請確保檔案具有.pem
擴展名,而不是.pem.txt
。
如果無法連接到VPN,請檢查您使用的伺服器名稱或IP位址。伺服器的域名或IP位址必須與您在建立證書時配置為通用名稱(CN)的內容相匹配。如果它們不匹配,VPN連線將無法工作。例如,如果您設置了具有CN為vpn.example.com
的證書,請在輸入VPN伺服器詳細資訊時使用vpn.example.com
。請仔細檢查生成證書時使用的命令以及建立VPN連線時使用的值。
最後,請仔細檢查VPN配置,確保leftid
值在使用域名時已配置為@
符號:
leftid=@vpn.example.com
如果您使用IP位址,請確保省略@
符號。同樣,請確保在生成server-cert.pem
檔案時,包括--san @IP地址
和--san IP地址
標誌。
結論
在本教程中,您已搭建了一個使用IKEv2協議的VPN伺服器。您了解了在伺服器和客戶端上控制連接的left
和right
指令。您還配置了Windows、macOS、iOS、Android或Linux客戶端以連接到VPN。
要添加或移除用戶,請再次跳至第 5 步。在 /etc/ipsec.secrets
中的每一行都是為一個用戶而設,因此添加或移除用戶,或更改密碼只需編輯該文件。
現在,您可以放心,在您訪問互聯網的任何地方和使用的任何設備上,您的在線活動都將保持安全。