strongSwan是一個開源、跨平台、功能齊全且廣泛使用的基於IPsec的VPN(虛擬私人網路)實現,能夠在Linux、FreeBSD、OS X、Windows、Android和iOS上運行。它主要是一個金鑰守護程序,支援網際網路金鑰交換協定(IKEv1和IKEv2),以在兩個對等方之間建立安全關聯(SA)。
本文將介紹如何在Ubuntu和Debian伺服器上使用strongSwan設定網站到網站的IPSec VPN閘道。這裡的站點到站點意味著每個安全網關後面都有一個子網路。此外,對等方將使用預先共用金鑰(PSK)相互認證。
測試環境
請記得用您實際的IP位址取代以下IP,以設定您的環境。
站點1網關(tecmint-devgateway)
作業系統:Debian或Ubuntu
公共IP:10.20.20.1
私有IP:192.168.0.101/24
私有子網路:192.168.0.0/24
站點2網關(tecmint-prodgateway)
作業系統:Debian或Ubuntu
公共IP:10.20.20.3
私有IP:10.0.2.15/24
私有子網路:10.0.2.0/24
第一步:啟用內核資料包轉發
-
首先,您需要透過在兩個安全網關的
/etc/sysctl.conf
設定檔中新增適當的系統變數來啟用封包轉送。bash sudo vim /etc/sysctl.conf
找到以下行,取消註釋並設定其值,如下所示(有關更多信息,請閱讀文件中的註釋)。plaintext net.ipv4.ip_forward = 1 net.ipv6.conf.all.forwarding = 1 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0
-
接下來,透過執行以下命令載入新設定。
bash sudo sysctl -p
-
如果您啟用了UFW防火牆服務,您需要在任一安全閘道的
/etc/ufw/before.rules
設定檔中,在過濾規則之前新增下列規則。
站點1網關(tecmint-devgateway)
plaintext
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.0.2.0/24 -d 192.168.0.0/24 -j MASQUERADE
COMMIT
站點2網關(tecmint-prodgateway)
plaintext
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.0.0/24 -d 10.0.2.0/24 -j MASQUERADE
COMMIT
- 新增防火牆規則後,透過以下命令重新啟動UFW以套用新變更。
bash sudo ufw disable sudo ufw enable
第二步:在Debian和Ubuntu安裝strongSwan
-
在兩個安全網關上更新您的軟體包緩存,並使用APT套件管理器安裝strongswan套件。
bash sudo apt update sudo apt install strongswan
-
安裝完成後,安裝程式腳本將啟動strongswan服務,並使其在系統啟動時自動啟動。您可以使用以下命令檢查其狀態及是否已啟用。
bash sudo systemctl status strongswan.service sudo systemctl is-enabled strongswan.service
第三步:設定安全網關
- 接下來,您需要使用
/etc/ipsec.conf
設定檔來設定安全閘道。
站點1網關(tecmint-devgateway)
bash
sudo cp /etc/ipsec.conf /etc/ipsec.conf.orig
sudo nano /etc/ipsec.conf
將以下配置複製並貼上到文件中。
plaintext
config setup
charondebug="all"
uniqueids=yes
conn devgateway-to-prodgateway
type=tunnel
auto=start
keyexchange=ikev2
authby=secret
left=10.20.20.1
leftsubnet=192.168.0.101/24
right=10.20.20.3
rightsubnet=10.0.2.15/24
ike=aes256-sha1-modp1024!
esp=aes256-sha1!
aggressive=no
keyingtries=%forever
ikelifetime=28800s
lifetime=3600s
dpddelay=30s
dpdtimeout=120s
dpdaction=restart
站點2網關(tecmint-prodgateway)
bash
sudo cp /etc/ipsec.conf /etc/ipsec.conf.orig
sudo nano /etc/ipsec.conf
將以下配置複製並貼上到文件中。
plaintext
config setup
charondebug="all"
uniqueids=yes
conn prodgateway-to-devgateway
type=tunnel
auto=start
keyexchange=ikev2
authby=secret
left=10.20.20.3
leftsubnet=10.0.2.15/24
right=10.20.20.1
rightsubnet=192.168.0.101/24
ike=aes256-sha1-modp1024!
esp=aes256-sha1!
aggressive=no
keyingtries=%forever
ikelifetime=28800s
lifetime=3600s
dpddelay=30s
dpdtimeout=120s
dpdaction=restart
- 這裡是每個配置參數的意思:
- config setup – 指定適用於所有連線的IPSec通用配置。
- charondebug – 定義應記錄多少偵錯輸出。
- uniqueids – 指定特定參與者ID是否應保持唯一。
- conn prodgateway-to-devgateway – 定義連線名稱。
- type – 定義連線類型。
- auto – 在IPSec啟動或重新啟動時如何處理連線。
- keyexchange – 定義要使用的IKE協定版本。
- authby – 定義對等方如何相互認證。
- left – 定義左側參與者的公共網路介面IP位址。
- leftsubnet – 說明左側參與者後方的私有子網路。
- right – 指定右側參與者的公用網路介面IP位址。
- rightsubnet – 說明右側參與者後面的私有子網路。
- ike – 定義要使用的IKE/ISAKMP SA加密/認證演算法清單。
- esp – 定義要用於連線的ESP加密/認證演算法清單。
- aggressive – 指定是否使用攻擊模式或主模式。
- keyingtries – 指定應嘗試協商連線的次數。
- ikelifetime – 指定連線的金鑰通道在重新協商之前應持續多久。
- lifetime – 定義連線的特定實例應持續多長時間,從成功協商到過期。
- dpddelay – 指定發送R_U_THERE訊息/訊息交換的時間間隔。
- dpdtimeout – 指定逾時間隔,在此期間如果沒有活動,則刪除與對等方的所有連線。
- dpdaction – 定義如何使用死對等偵測(DPD)協定來管理連線。
第四步:配置PSK以進行對等認證
-
配置兩個安全閘道後,使用下列指令產生用於對等方的安全PSK。
bash head -c 24 /dev/urandom | base64
-
接下來,在兩個網關的
/etc/ipsec.secrets
檔案中加入PSK。bash sudo vim /etc/ipsec.secrets
複製並貼上以下行。 ```plaintext ------- 站點1網關(tecmint-devgateway) -------10.20.20.1 10.20.20.3 : PSK "qLGLTVQOfqvGLsWP75FEtLGtwN3Hu0ku6C5HItKo6ac="
------- 站點2網關(tecmint-prodgateway) -------
10.20.20.3 10.20.20.1 : PSK "qLGLTVQOfqvGLsWP75FEtLGtwN3Hu0ku6C5HItKo6ac=" ```
-
重新啟動IPSec程式並檢查其狀態以查看連線。
bash sudo ipsec restart sudo ipsec status
-
最後,透過執行ping指令驗證您是否可以從任一安全閘道存取私有子網路。
bash ping 192.168.0.101 ping 10.0.2.15
-
此外,您可以透過以下方式停止和啟動IPSec。
bash sudo ipsec stop sudo ipsec start
-
要了解更多有關IPSec命令的信息,請手動啟動連接等,請查看IPSec幫助頁面。
bash ipsec --help
總結
本文介紹如何在Ubuntu和Debian伺服器上使用strongSwan設定站點到站點的IPSec VPN,兩個安全網關配置為使用PSK相互認證。如果您有任何問題或想法,請透過下面的回饋表與我們聯絡。
希望這篇文章對您有幫助!如果您有其他問題,歡迎隨時提問。