IPSec/IKEv2 ×××搭建和使用 (最下面有一鍵安裝腳本)html
本次操做系統環境爲centos6,其餘系統也有介紹linux
1、編譯安裝Strongswanandroid
1,安裝必須的庫
Ubuntu:ios
1git |
apt-get install libpam0g-dev libssl-dev make gcc gmp-devel github |
CentOS:apache
1 |
yum install pam-devel openssl-devel make gcc gmp-devel wget -ywindows |
2,下載strongswan並解壓(*表明當前Strongswan版本號,當前最新版本是5.5.1)centos
1 |
wget http://download.strongswan.org/strongswan.tar.gz |
3,編譯Strongswan:
Xen、KVM(實體機、虛擬機)使用如下參數: (如果想自定義路徑則加上 --prefix=/data/server/strongswan)
1 |
./configure --enable-eap-identity --enable-eap-md5 \ |
OpenVZ(vps雲主機)需額外增長一個 enable-kernel-libipsec:
1 |
./configure --enable-eap-identity --enable-eap-md5 \ |
4,編譯並安裝:
1 |
make && make install |
編譯完成後若是沒有報錯,且使用ipsec version指令能出現版本信息,則表示安裝成功
1 |
創建軟連接: ln ipsec /sbin/ipsec |
2、配置證書
1,生成CA證書的私鑰(添加自定義安裝路徑後,這些命令都在自定義的路徑下面)
1 |
ipsec pki --gen --outform pem > ca.pem |
2,自建私鑰,簽名CA證書
1 |
ipsec pki --self --in ca.pem --dn "C=com, O=my***, CN=××× CA" \ |
提示:多個vps使用同個CA根證書(客戶端使用一個證書登錄不一樣***):
若是須要多個vps使用同一個CA根證書,則以上兩步只執行一次,以後全部vps都使用上面生成的這兩個ca.pem和ca.cert.pem文件進行後續的操做.
而後把多臺vps解析到同一個域名的不一樣二級域名下.
這樣客戶端鏈接各個服務器時,只須要客戶端安裝一次根證書ca.cert.pem(ca.cert.cer)便可.
3,生成服務器證書所需的私鑰:
1 |
ipsec pki --gen --outform pem > server.pem |
4,用CA證書籤發服務器證書
先肯定你的服務器的IP地址或域名,之後客戶端鏈接時只能使用證書中的IP地址或域名鏈接(多服務器使用相同根證書CA的,請先作好服務器的域名解析),
而後將下面命令中的111.111.111.111替換爲本身服務器的IP地址或域名,一共須要替換兩處:
1 |
ipsec pki --pub --in server.pem | ipsec pki --issue --cacert ca.cert.pem \ |
注意以上命令中的」C=」和」O=」的值要與第2步CA中的C,O的值保持一致.
5,生成客戶端證書所需的私鑰:
1 |
ipsec pki --gen --outform pem > client.pem |
6,用CA簽名客戶端證書(將ca.cert.pem改爲ca.cert.cer後供手機客戶端安裝使用)(C,O的值要與上面第2步CA的值一致,CN的值隨意)
1 |
ipsec pki --pub --in client.pem | ipsec pki --issue --cacert ca.cert.pem \ --cakey ca.pem --dn "C=com, O=my***, CN=××× Client" \ --outform pem > client.cert.pem |
7,生成pkcs12證書(供電腦端安裝使用,輸入的密碼供導入證書時候使用):
1 |
openssl pkcs12 -export -inkey client.pem -in client.cert.pem \ -name "client" -certfile ca.cert.pem -caname "××× CA" \ -out client.cert.p12 |
注意以上命令中的」-caname」後面的引號裏的值必需要與第2步CA中的」CN=」的值保持一致.
8,服務端安裝證書:(添加自定義安裝路徑後,這些都在自定義的路徑下面-->/usr/local/改成/data/server/strongswan/)
1 |
cp -r ca.cert.pem /usr/local/etc/ipsec.d/cacerts/ |
3、配置Strongswan
1,編輯/usr/local/etc/ipsec.conf文件: (注意下面的ios_ikev2配置項 leftid改成當前實際的服務器的IP地址或域名111.111.111.111)
1 |
vim /usr/local/etc/ipsec.conf |
修改成如下內容:
config setup
uniqueids=never #多臺設備同時在線
conn iOS_cert
keyexchange=ikev1
fragmentation=yes
left=%defaultroute
leftauth=pubkey
leftsubnet=0.0.0.0/0
leftcert=server.cert.pem
right=%any
rightauth=pubkey
rightauth2=xauth
rightsourceip=10.31.2.0/24
rightcert=client.cert.pem
auto=add
conn android_xauth_psk
keyexchange=ikev1
left=%defaultroute
leftauth=psk
leftsubnet=0.0.0.0/0
right=%any
rightauth=psk
rightauth2=xauth
rightsourceip=10.31.2.0/24
auto=add
conn networkmanager-strongswan
keyexchange=ikev2
left=%defaultroute
leftauth=pubkey
leftsubnet=0.0.0.0/0
leftcert=server.cert.pem
right=%any
rightauth=pubkey
rightsourceip=10.31.2.0/24
rightcert=client.cert.pem
auto=add
conn ios_ikev2
keyexchange=ikev2
ike=aes256-sha256-modp2048,3des-sha1-modp2048,aes256-sha1-modp2048!
esp=aes256-sha256,3des-sha1,aes256-sha1!
rekey=no
left=%defaultroute
leftid="服務器的IP地址或域名"
leftsendcert=always
leftsubnet=0.0.0.0/0
leftcert=server.cert.pem
right=%any
rightauth=eap-mschapv2
rightsourceip=10.31.2.0/24
rightsendcert=never
eap_identity=%any
dpdaction=clear
fragmentation=yes
auto=add
conn windows7
keyexchange=ikev2
ike=aes256-sha1-modp1024!
rekey=no
left=%defaultroute
leftauth=pubkey
leftsubnet=0.0.0.0/0
leftcert=server.cert.pem
right=%any
rightauth=eap-mschapv2
rightsourceip=10.31.2.0/24
rightsendcert=never
eap_identity=%any
auto=add
2,使用vim編輯/usr/local/etc/strongswan.conf文件:
charon {
load_modular = yes
duplicheck.enable = no
compress = yes
plugins {
include strongswan.d/charon/*.conf
}
dns1 = 8.8.8.8
dns2 = 8.8.4.4
nbns1 = 8.8.8.8
nbns2 = 8.8.4.4
#下面是配置日誌選項,可不要
filelog {
/tmp/charon.log {
# add a timestamp prefix
time_format = %b %e %T
# prepend connection name, simplifies grepping
ike_name = yes
# overwrite existing files
append = no
# increase default loglevel for all daemon subsystems
default = 1
# flush each line to disk
flush_line = yes
}
}
}
include strongswan.d/*.conf
3,配置賬號文件添加帳號,使用vim編輯/usr/local/etc/ipsec.secrets文件(%any表示任意):
: RSA server.pem
: PSK "1234"
: XAUTH "myXAUTHPass"
myUserName %any : EAP "myUserPass"
zhanghao %any : EAP "mima"
將上面的myPSKkey單詞更改成你須要的PSK認證方式的密鑰;
將上面的myXAUTHPass單詞更改成你須要的XAUTH認證方式的密碼,該認證方式的用戶名是隨意的;
將上面的zhanghao改成本身想要的登陸名,mima改成本身想要的密碼,能夠添加多行,獲得多個用戶,這便是使用IKEv2的用戶名+密碼認證方式的登陸憑據.
(添加完用戶後可使用ipsec reload從新加載配置)
提示:wp8.1客戶端鏈接的用戶名問題
因爲wp8.1鏈接IKEv2的***時,默認會加上與手機名稱相同的域,因而鏈接時會顯示用戶名或密碼錯誤.這裏有兩種解決方法:
方法1:將上面/usr/local/etc/ipsec.secrets文件的最後一行改成%any %any : EAP 「mima」 ,這樣就可使用任意用戶名登陸,帶上域也不會出錯.
方法2:用FreeRADIUS過濾掉登陸名的域,搜索參考:讓FreeRADIUS去掉登錄用戶名中的Windows登陸域
4、配置防火牆---須要打開udp 4500 500 1701端口
1,編輯/etc/sysctl.conf,將net.ipv4.ip_forward=1一行前面的#號去掉或添加這一行(不然Ikev2 ***鏈接上後將沒法訪問外網),保存後執行sysctl -p(若是執行後有報錯的,從新打開sysctl.conf將報錯的部分#註釋掉保存,直到執行sysctl -p再也不報錯爲止)。
2,配置iptables:(注意網卡名)
OpenVZ(vps雲主機)執行:
1 |
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT |
PS:若是VPS有 static IP (固定ip),將上述防火牆規則的最後3條NAT規則替換爲如下3條來提高處理效率:
1 |
iptables -t nat -A POSTROUTING -s 10.31.0.0/24 -o venet0 -j SNAT --to-source固定ip |
注意將上述3條規則的ELASTIC_IP替換爲vps的靜態ip地址.
Xen、KVM(實體機、虛擬主機)則執行:
1 |
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT |
3,開機自動載入iptables和***:
Ubuntu:
1 |
iptables-save > /etc/iptables.rules |
CentOS:
1 2 3 |
service iptables save chkconfig iptables on echo "/usr/local/sbin/ipsec start" >> /etc/rc.local |
至此,IPSec/IKEv2 ×××便搭建好了,啓用服務就可使用:
1 |
ipsec start |
ipsec經常使用指令:
ipsec start #啓動服務
ipsec stop #關閉服務
ipsec restart 重啓服務
ipsec reload #從新讀取
ipsec status #查看狀態
ipsec --help #查看幫助
4,搭建httpd便於客戶端下載證書
安裝apache:
yum install httpd –y
配置apache登陸用戶:
htpasswd -c -b /etc/httpd/htpasdb zhanghao mima
在apache配置文件/etc/httpd/conf/httpd.conf最後追加:
<directory />
options indexes
AuthType Basic
AuthName "!!!"
AuthBasicProvider file
AuthUserFile /etc/httpd/htpasdb
Require user zhanghao
</directory>
拷貝客戶端證書:
mkdir /var/www/html/key
cp -p ca.cert.pem /var/www/html/key/
cp -p client.cert.p12 /var/www/html/key/
重啓服務,service httpd restart
而後就能夠在客戶端訪問:http://ip/key 下載證書。
使用教程
Iphone:
1.打開Safari訪問http://ip/key下載安裝證書:
2.安裝:
3.配置***:
打開設置-通用-×××,點擊添加×××配置
而後:
描述填隨意、服務器填搭建的***服務器ip、遠程ip填搭建的***服務器ip、鑑定裏用戶鑑定選擇用戶名、填上/usr/local/etc/ipsec.secrets下面的zhanghao mima
完成後就能夠鏈接了。
Android
1.安裝證書,點擊下載證書:
2. 配置***,打開設置-更多-×××,點擊添加,注意類型選擇IPsec Xauth PSK
名稱自取,服務器地址填***的ip,IPsec標識符不填,IPSec域共享密鑰填寫/usr/local/etc/ipsec.secrets配置文件裏的PSK值,其餘的不填
保存後,點擊鏈接時輸入/usr/local/etc/ipsec.secrets 最下方配置的zhanghao mima
Windows:
1.下載安裝證書:
點擊下載client.cert.p12 (下載ca.cert.cer也能夠而且不用輸入證書密碼)
2.導入證書:
打開運行,輸入mmc打開
點擊文件,選擇「添加/刪除管理單元」,選擇證書,添加,選擇「計算機用戶」,下一步,肯定;
打開證書-受信任的根證書頒發機構-證書,郵件證書,選擇全部任務-導入,選擇下載的證書client.cert.p12,輸入證書密碼。
3.創建鏈接
打開「網絡和共享中心」,點擊設置新的鏈接或網絡,選擇鏈接到工做區,建立新的鏈接,使用個人Internet鏈接(×××),輸入***服務器ip,建立:
4.鏈接:
打開「網絡和共享中心」,點擊更改適配器設置,右鍵剛創建的***鏈接,打開屬性,打開安全,選擇IKEv2,身份驗證選擇可擴展。。,點擊肯定保存,右鍵***鏈接選擇鏈接即可以連上***了。
MAC
1. 下載安裝證書,同上面幾個客戶端同樣下載安裝證書(雙擊證書,選擇裝到系統)
注意:添加完證書後,須要打開密鑰管理將剛纔添加的證書加到信任:
雙擊打開,改成始終信任:
2.建立***網絡:
打開網絡偏好設置
添加網絡,選擇IKEv2:
服務器地址填***服務器地址,帳戶名稱和密碼填寫/usr/local/etc/ipsec.secrets 下方加的zhanghao mima
或者添加網絡,選擇cisco IPSec:
服務器地址填***服務器地址,帳戶名稱和密碼填寫/usr/local/etc/ipsec.secrets 下方加的zhanghao mima,打開鑑定設置共享密鑰填寫PSK。其餘不填:
這樣就能夠鏈接了。
一鍵安裝腳本:
1. 上傳腳本和安裝包到服務器同目錄
2. 修改權限,運行腳本:
chmod +x one-key-ikev2.sh
bash one-key-ikev2.sh
3.根據圖片內容選擇:
注意:
1./etc/issue文件內容要正確腳本是經過此文件判斷linux版本
2.如果服務器在國外,能夠不用上傳安裝包到服務器,打開腳本219-223行(因爲國內網絡差因此提早下載好安裝包上傳至服務器)
3.最後的證書在my_key目錄下
strongswan安裝包和一鍵安裝腳本下載連接:http://down.51cto.com/data/2269048
文章參考:
https://zh.opensuse.org/SDB:Setup_Ipsec_×××_with_Strongswan
https://github.com/quericy/one-key-ikev2-***