centOS 配置IPsecVPN手記--strongswan

最近發現openvpn老不穩定,於是決定使用ipsec的試一下,

折騰了一下,還算可以,也終於在android手機,OS X和WIN7上測試沒問題。

記錄一下,大部分都是網上搜來的,小部分自己試出來的,供參考,有問題歡迎留 言討論,

網上大體有兩種版本,一種是舊版stongswan,基本是六大部,配置也不一樣,我這版是基於5.0以上的,要注意。

測試的機器是cent os 6.5 final

內核版本:

[root@li707-153 etc]# uname -a
Linux li707-153 4.5.0-x86_64-linode65 #2 SMP Mon Mar 14 18:01:58 EDT 2016 x86_64 x86_64 x86_64 GNU/Linux


慮擬機是Xen的,其實不同的慮擬機術區別不大,只是Open VZ的在編譯stongwan時,要加上:enable-kernel-libipsec:

下載最新穩定版strongswan:

wget http://download.strongswan.org/strongswan.tar.gz

我的編譯參數如下:

./configure --enable-eap-identity --enable-eap-md5 --enable-eap-mschapv2 --enable-eap-tls --enable-eap-ttls --enable-eap-peap --enable-eap-tnc --enable-eap-dynamic --enable-eap-radius --enable-xauth-eap --enable-xauth-pam --enable-dhcp --enable-openssl --enable-addrblock --enable-unity --enable-certexpire --enable-radattr --enable-tools --disable-gmp

不過有報錯:

configure: WARNING: unrecognized options: --enable-tools

勿略不管了。

make & make install

安裝一切順利

ipsec version

可以檢測安裝是否成功,如果出現版本號,說明安裝成功

然後就進入製作證書階段:

1.生成CA證書的私鑰

ipsec pki --gen --outform pem > ca.pem

2.使用私鑰,簽名CA證書

ipsec pki --self --in ca.pem --dn "C=com, O=sdmvpn,CN=VPN CA" --ca --outform pem>ca.cert.pem
3.生成服務器證書所需的私鑰:,
ipsec pki --gen --outform pem > server.pem
4.用CA證書籤發服務器證書(把這裏的IP地址換成實際的IP,以後連接時,就用此IP地址連接,改成域名也可以)
ipsec pki --pub --in server.pem | ipsec pki --issue --cacert ca.cert.pem --cakey ca.pem --dn "C=com,O=sdmvpn,CN=1.2.3.4" --san="1.2.3.4" --flag serverAuth --flag ikeIntermediate --outform pem > server.cert.pem
注意以上命令中的”C=”和”O=”的值要與第2步CA中的C,O的值保持一致.

5.生成客戶端證書所需的私鑰:

ipsec pki --gen --outform pem > client.pem

6.用CA簽名客戶端證書(C,O的值要與上面第2步CA的值一致,CN的值隨意):

ipsec pki --pub --in client.pem | ipsec pki --issue --cacert ca.cert.pem --cakey ca.pem --dn "C=com, O=myvpn,CN=VPN Client" --outform pem >client.cert.pem

7.生成pkcs12證書:

openssl pkcs12 -export -inkey client.pem -in client.cert.pem -name "client" -certfile ca.cert.pem -caname "VPN CA" -out client.cert.p12
注意以上命令中的”-caname”後面的引號裏的值必須要與第2步CA中的”CN=”的值保持一致.

生成完證書後,開始安裝證書,

其實 就是把證書拷到對應目錄裏,我本來想不拷,然後在配置裏指定絕對路徑,但連接時總連不上,可能有些證書不光是要在配置文件裏配吧

cp -r ca.cert.pem /usr/local/etc/ipsec.d/cacerts/
cp -r server.cert.pem /usr/local/etc/ipsec.d/certs/
cp -r server.pem /usr/local/etc/ipsec.d/private/
cp -r client.cert.pem /usr/local/etc/ipsec.d/certs/
cp -r client.pem  /usr/local/etc/ipsec.d/private/

證書安裝完成,接下來配置strongswan,編輯/usr/local/etc/ipsec.conf

config setup
    uniqueids=never 

conn iOS_cert
    keyexchange=ikev1
    # strongswan version >= 5.0.2, compatible with iOS 6.0,6.0.1
    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 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

注意:把上面的rightsourceip裏的IP地址換成你想要在客戶端連接後所得到的IP地址段。

編輯/usr/local/etc/strongswan.conf

charon {
	duplicheck.enable = no
	dns1 = 8.8.8.8
        dns2 = 8.8.4.4
        nbns1 = 8.8.8.8
        nbns2 = 8.8.4.4
	filelog {
		/var/log/strongswan.charon.log {
			time_format = %b %e %T
			default=2
			append = no
			flush_line = yes
		}
	}
}
配置日誌和DNS


編輯/usr/local/etc/ipsec.secrets中的用戶名、密碼

: RSA server.pem
: PSK "mykey"
[用戶名] %any : EAP "[密碼]"
<pre name="code" class="plain">[用戶名] %any : XAUTH "[密碼]"

注意,以上配置的意思是指指定RSA的認證證書,PSK方式的認證密鑰(即預共享密鑰)
以使組合認證中的EAP的用戶名和密碼以及XAUTH的用戶名和密碼。

本置完後啓動ipsec:

ipsec start
配置IPTABLES腳本:

iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.31.0.0/24  -j ACCEPT
iptables -A FORWARD -s 10.31.1.0/24  -j ACCEPT
iptables -A FORWARD -s 10.31.2.0/24  -j ACCEPT
iptables -A INPUT -i eth0 -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 -i eth0 -p udp --dport 1701 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 1723 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.31.0.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.31.1.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.31.2.0/24 -o eth0 -j MASQUERADE

編輯/etc/sysctl.conf,將net.ipv4.ip_forward=1一行前面的#號去掉,保存後執行sysctl -p

經過以上配置,使用windows7連接沒有問題,

但用MAC OS X 或手機連後,上不了網,我在

/usr/local/etc/ipsec.conf 又增加了一個conn(這個可以隨便增加,我的理解時,加接時,會根據客戶機請求的類型來匹配最合適的配置)

conn macOSX
       keyexchange=ikev1
    # strongswan version >= 5.0.2, compatible with iOS 6.0,6.0.1
    fragmentation=yes
    left=%defaultroute
    leftauth=psk
    leftsubnet=0.0.0.0/0
    right=%any
    rightauth=psk
    rightauth2=xauth
    rightsourceip=10.8.0.0/24
    auto=add

這樣都可以連接了,


參孝連接:

https://hjc.im/shi-yong-strongswanda-jian-ipsecikev2-vpn/

http://www.centoscn.com/image-text/config/2015/0815/6011.html


https://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan&variant=zh

最後這個參考的文章寫了很多原理的東西,很不錯,也就是看了他的文章,纔有增加macOSX的配置,詳細的原理,大家參考他的文章吧,我在這就不抄了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章