安裝 StrongSwan
yum install -y strongswan
證書
# strongswan pki --gen --outform pem > ca.key.pem
# strongswan pki --self --in ca.key.pem --dn "C=CN, O=PZYME, CN=PZY VPN CA" --ca --lifetime 3650 --outform pem >ca.cert.pem
# strongswan pki --gen --outform pem > server.key.pem
# strongswan pki --pub --in server.key.pem | strongswan pki --issue --lifetime 1200 --cacert ca.cert.pem --cakey ca.key.pem --dn "C=CN, O=PZYME, CN=YOUR_SERVER_NAME" --san="YOUR_SERVER_IP" --san="YOUR_SERVER_NAME" --flag serverAuth --flag ikeIntermediate --outform pem > server.cert.pem
# strongswan pki --gen --outform pem > client.pem
# strongswan pki --pub --in client.pem | strongswan pki --issue --cacert ca.cert.pem --cakey ca.key.pem --dn "C=CN, O=PZYME, CN=PZY VPN CA" --outform pem > client.cert.pem
# openssl pkcs12 -export -inkey client.pem -in client.cert.pem -name "PZYME VPN Client" -certfile ca.cert.pem -caname "YOUR_SERVER_NAME" -out client.cert.p12
相關說明
C 表示國家名,同樣還有 ST 州/省名,L 地區名,STREET(全大寫) 街道名。O 表示組織名。CN 為通用名
- iOS 客戶端要求 CN 也就是通用名必須是你的服務器的 URL 或 IP 地址;
- Windows 7 不但要求了上面,還要求必須顯式說明這個服務器證書的用途(用於與服務器進行認證),–flag serverAuth;
- 非 iOS 的 Mac OS X 要求了“IP 安全網絡密鑰互換居間(IP Security IKE Intermediate)”這種增強型密鑰用法(EKU),–flag ikdeIntermediate;
- android 和 iOS 都要求服務器別名(serverAltName)就是服務器的 URL 或 IP 地址,–san。
安裝證書
cp -rf ca.cert.pem /etc/strongswan/ipsec.d/cacerts/
cp -rf server.cert.pem /etc/strongswan/ipsec.d/certs/
cp -rf server.key.pem /etc/strongswan/ipsec.d/private/
cp -rf client.cert.pem /etc/strongswan/ipsec.d/certs/
cp -rf client.pem /etc/strongswan/ipsec.d/private/
配置StrongSwan
vim /etc/strongswan/ipsec.conf
# ipsec.conf - strongSwan IPsec configuration file
# basic configuration
config setup
uniqueids=never #允許多個客戶端使用同一個證書,多設備同時在線
#所有項目共用的配置項
conn %default
keyexchange=ike #ikev1 或 ikev2 都用這個
left=%any #服務器端標識,%any表示任意
leftsubnet=0.0.0.0/0 #服務器端虛擬ip, 0.0.0.0/0表示通配.
right=%any #客戶端標識,%any表示任意
conn IKE-BASE
ikelifetime=60m
keylife=20m
rekeymargin=3m
keyingtries=1
leftcert=server.cert.pem #服務器端證書
rightsourceip=10.0.0.0/24 #分配給客戶端的虛擬 ip 段
# for IOS9 and Win 7 or later
conn ike2-eap
also=IKE-BASE
keyexchange=ikev2
ike=aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
esp=aes256-sha256,aes256-sha1,3des-sha1!
leftsendcert=always
leftid=vpn.linsir.org
leftauth=pubkey
leftfirewall=yes
rightauth=eap-mschapv2
rightsendcert=never
eap_identity=%any
rekey=no
dpdaction=clear
fragmentation=yes
auto=add
# for IOS, use PSK key
conn IPSec-IKEv1-PSK
also=IKE-BASE
keyexchange=ikev1
fragmentation=yes
leftauth=psk
rightauth=psk
rightauth2=xauth
auto=add
# for andriod
conn IPSec-xauth
also=IKE-BASE
leftauth=psk
leftfirewall=yes
right=%any
rightauth=psk
rightauth2=xauth
auto=add
# for win xp l2tp,use psk
conn L2TP-PSK
keyexchange=ikev1
authby=secret
leftprotoport=17/1701 #l2tp端口
leftfirewall=no
rightprotoport=17/%any
type=transport
auto=add
設備/操作系統使用的 ike 版本
* linux: 命令行客戶端就是 strongswan 本身,因此完美兼容,支持 ikev1/ikev2 和所有加密方法的連接。
* Android: 只支持 ikev1(沒有最新andriod手機,可能已經支持ikev2)。
* iOS/Mac OS X: IPsec 客戶端為自己修改的racoon。它只支持 ikev1,最新的IOS 9 Mac OS X 支持ikev2.
* Windows: 只在 Windows 7 以後支持ikev2, Win XP需要用l2tp方式。
vim /etc/strongswan/strongswan.conf
vim /etc/strongswan/strongswan.conf
# strongswan.conf - strongSwan configuration file
#
# Refer to the strongswan.conf(5) manpage for details
#
# Configuration changes should be made in the included files
charon {
load_modular = yes
duplicheck.enable = no #是為了你能同時連接多個設備,所以要把冗余檢查關閉
compress = yes
plugins {
include strongswan.d/charon/*.conf
}
dns1 = 223.5.5.5
dns2 = 8.8.8.8
nbns1 = 223.6.6.6
nbns2 = 8.8.4.4
}
include strongswan.d/*.conf
/etc/strongswan/ipsec.secrets
: RSA server.key.pem
: PSK "YOUR_SECRET_PSK"
: XAUTH "YOUR_PASSWORD"
test : EAP "123456"
啟動Strongswan
service strongswan start
配置轉發及防火墻
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.0.0.0/24 -j ACCEPT
iptables -A INPUT -p esp -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 500 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 500 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 4500 -j ACCEPT
iptables -A INPUT -p udp --dport 500 -j ACCEPT
iptables -A INPUT -p udp --dport 4500 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o enp7s0f0 -j MASQUERADE
CentOS 網卡名稱eth0,具體根據實際情況來,另外有多網卡的,需要自己根據實際情況來設置iptables轉發規則。
客戶端配置
說明:
-
如果你希望用戶通過用戶名 + 密碼連接 IKEv2,請將 ca.cert.pem 發送 給客戶並要求客戶安裝證書
-
如果你希望用戶直接通過證書登陸,請將 client.cert.p12 發送給客戶並要求客戶安裝證書
-
如果是 iOS,用戶還需要安裝 ca.cert.pem
- 如果是 OS X,用戶需要設置 CA 根證書為可信
win7+
(1)安裝 CA 根證書,設置為可信
(2)在“安全”中選擇“Microsoft: 安全密碼(EAP-MSCHAP v2)(啟用加密)
(3)嘗試輸入賬號密碼進行 VPN 連接即可。
錯誤提示為 IKE 身份驗證憑證不可接受,該問題通常是由於 CA 根證書未安裝導致,但 CA 根實際上已經安裝。
如果連接成功提示無網絡訪問權限,編輯當前用戶配置 %AppData%\Microsoft\Network\Connections\Pbk\rasphone.pbk, 修改IpPrioritizeRemote=1
OS X
IKEv1
配置位置:系統偏好設置 -> 網絡 -> 新建 -> VPN -> cisco IPsec
服務器地址:在這裏輸入您的服務器地址
賬戶名稱:在這裏輸入用戶名
密碼:在這裏輸入密碼
在鑒定設置 -> 共享的密鑰中輸入在 ipsec.secrets 中設置的 PSK 預共享密碼
IKEv2
配置位置:系統偏好設置 -> 網絡 -> 新建 -> VPN -> IKEv2
服務器地址:在這裏輸入您的服務器地址
遠程地址:在這裏輸入您的服務器地址
在鑒定設置 -> 用戶名中輸入在 ipsec.secrets 中設置的用戶名和密碼(通過用戶名密碼登陸)
在鑒定設置 -> 證書中選擇安裝的客戶端證書(通過客戶端證書登陸)
iOS
首先是導入服務器ca.cert.pem證書,在設置-通用-描述文件中可以查看
類型 IKEv2
服務器是 IP 或都是 URL
遠程ID是 IP 或都是 URL
賬戶和密碼填 ipsec.secrets 裏 EAP 前後的那兩個
Android
配置位置:設置 -> 其它連接方式 -> VPN -> 添加 VPN
名稱:在這裏填寫任意名稱
類型:IPSec Xauth PSK
IPsec 標識符:不更改此項內容
預共享密鑰:在這裏輸入在 ipsec.secrets 中設置的 PSK 預共享密碼
相關資料
https://zh.opensuse.org/index.php?title=SDB:Setup Ipsec VPN with Strongswan&variant=zh
Tags: Windows 服務器 export 客戶端 通用
文章來源: