Centos7部署strongswan IKEv1 VPN 和Cisco路由器點對點連接

2020年7月10日23:11:05 3 11,921 ℃

對于VPN開源工具,以前用過不少,也部署過幾次,比如OpenVPN、Libreswan、Windows server自帶的VPN,基于用戶名和密碼認(rèn)證登錄的,都比較簡單,測試也方便。

如果你不缺錢,建議直接買阿里云、騰訊云、華為云等現(xiàn)成的VPN,減少很多不必要的麻煩,會少踩很多坑。如果想節(jié)約成本,繼續(xù)往下看,阿湯博客把這一周踩的坑全部分享給你,覺得有用,記得好評一個。服務(wù)器是阿里云1H2G的低配服務(wù)器,一年幾百塊,比阿里云的低配VPN 3825一年還是便宜了3100左右。

最近項目和銀行對接,需要使用ipsec ikev1 vpn 通信,第一次接觸這個協(xié)議,不是很了解,網(wǎng)上各種軟件找了一通,發(fā)現(xiàn)也有幾款開源工具支持這個協(xié)議,比如:Openswan、Libreswan、StrongSwan。但是支持路由器的好像只有StrongSwan,思科官網(wǎng)也是用StrongSwan做的配置示例,具體參考思科官網(wǎng)文檔:在Cisco IOS和strongSwan配置示例之間的IKEv1/IKEv2 。

既然選定了工具,就去網(wǎng)上找部署文檔,真的是五花八門,只好隨便用一個看著還行的文檔測試,部署倒是簡單,centos7 一條命令:yum install -y strongSwan 。

然后就是參數(shù)的配置,先看參數(shù)說明,光這些參數(shù)的坑,我就花了幾天。

config setup
    # 是否緩存證書吊銷列表
    # <em>cachecrls = yes</em>
    # 是否嚴(yán)格執(zhí)行證書吊銷規(guī)則
    # strictcrlpolicy=yes
    # 如果同一個用戶在不同的設(shè)備上重復(fù)登錄,yes 斷開舊連接,創(chuàng)建新連接;no 保持舊連接,并發(fā)送通知;never 同 no,但不發(fā)送通知。
    uniqueids=no
# 配置根證書,如果不使用證書吊銷列表,可以不用這段。命名為 %default 所有配置節(jié)都會繼承它
# ca %default
    # 證書吊銷列表 URL,可以是 LDAP,HTTP,或文件路徑
    # crluri = <uri>
# 定義連接項,命名為 %default 所有連接都會繼承它
conn %default
    # 是否啟用壓縮,yes 表示如果支持壓縮會啟用
    compress = yes
    # 當(dāng)意外斷開后嘗試的操作,hold,保持并重連直到超時
    dpdaction = hold
    # 意外斷開后嘗試重連時長
    dpddelay = 30s
    # 意外斷開后超時時長,只對 IKEv1 起作用
    dpdtimeout = 60s
    # 閑置時長,超過后斷開連接
    inactivity = 300s
    # 數(shù)據(jù)傳輸協(xié)議加密算法列表
    esp = aes256-sha256,aes256-sha1,3des-sha1!
    # 密鑰交換協(xié)議加密算法列表
    ike = aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    # 默認(rèn)的密鑰交換算法,ike 為自動,優(yōu)先使用 IKEv2
    keyexchange = ike
    # 服務(wù)端公網(wǎng) IP,可以是魔術(shù)字 %any,表示從本地 IP 地址表中取
    left = %any
    # 客戶端 IP,同上
    right = %any
    # 指定服務(wù)端與客戶端的 DNS,多個用“,”分隔
    leftdns = 8.8.8.8,8.8.4.4
    rightdns = 8.8.8.8,8.8.4.4
    # 服務(wù)端用于 ike 認(rèn)證時使用的端口,默認(rèn)為 500,如果使用了 nat 轉(zhuǎn)發(fā),則使用 4500
    # leftikeport = <port>
    # 服務(wù)器端虛擬 IP 地址
    # leftsourceip = %config
    # 客戶端虛擬 IP 段
    rightsourceip = 10.0.0.0/24
    # 服務(wù)器端子網(wǎng),魔術(shù)字 0.0.0.0/0 。如果為客戶端分配虛擬 IP 地址的話,那表示之后要做 iptables 轉(zhuǎn)發(fā),那么服務(wù)器端就必須是用魔術(shù)字
    leftsubnet = 0.0.0.0/0
    # rightsubnet = <ip subnet>[[<proto/port>]][,...]
conn IKEv2-BASE
    # 服務(wù)器端根證書 DN 名稱
    leftca = "C=CN, O=123si, CN=123si StrongSwan CA"
    # 服務(wù)器證書,可以是 PEM 或 DER 格式
    leftcert = server.cert.pem
    # 不指定客戶端證書路徑
    # rightcert = <path>
    # 指定服務(wù)器證書的公鑰
    leftsigkey = server.pub.pem
    # rightsigkey = <raw public key> | <path to public key>
    # 是否發(fā)送服務(wù)器證書到客戶端
    leftsendcert = always
    # 客戶端不發(fā)送證書
    rightsendcert = never
    # 服務(wù)端認(rèn)證方法,使用證書
    leftauth = pubkey
    # 客戶端認(rèn)證使用 EAP 擴展認(rèn)證,貌似 eap-mschapv2 比較通用
    rightauth = eap-mschapv2
    # 服務(wù)端 ID,可以任意指定,默認(rèn)為服務(wù)器證書的 subject,還可以是魔術(shù)字 %any,表示什么都行
    leftid = vpn.itnmg.net
    # 客戶端 id,任意
    rightid = %any
# ios, mac os, win7+, linux
conn IKEv2-EAP
    also = IKEv2-BASE
    # 指定客戶端 eap id
    eap_identity = %any
    # 不自動重置密鑰
    rekey = no
    # 開啟 IKE 消息分片
    fragmentation = yes
    # 當(dāng)服務(wù)啟動時,應(yīng)該如何處理這個連接項。add 添加到連接表中。
    auto = add

這里我直接用我自己測試成功的配置(/etc/strongswan/ipsec.conf):

config setup
# strictcrlpolicy=yes
# uniqueids = no
conn ipsec-server       #連接名      
        leftid=xx.xx.xx.xx    #本端身份驗證信息
        left=%any          #本端ipsec互聯(lián)ip
        leftsubnet=0.0.0.0/0    #本端內(nèi)網(wǎng)網(wǎng)段
        right=xx.xx.xx.xx    #對端ipsec互聯(lián)ip       
        rightsubnet=xx.xx.xx.xx/xx   #對端內(nèi)網(wǎng)ip             
        rightid=xxx.xxx.xxx.xxx    #對端身份信息
        #leftfirewall=yes
        aggressive=no           #開啟野蠻模式
        keyexchange=ikev1        #ike版本
        
        #ike=3des-md5-modp1536,3des-md5-modp1024,3des-sha1-modp1024,3des-sha1-modp1536,aes256-sha1-modp1536,aes256-sha1-modp1024,aes128-sha1-modp1024!     
        ike=aes128-sha1-modp1024! #第一階段的驗證加密和算法 ,Cisco路由器不支持aes256。
        ikelifetime=3600s #第一階段的生存時間,h、m、s分別代表小時、分鐘、秒
        #esp=3des-md5,3des-sha1,aes-sha1,aes-md5,aes256-sha1! 
        esp=aes128-sha1 #第二階段數(shù)據(jù)封裝加密認(rèn)證算法,主要看對端路由器用的加密和算法。
        lifetime=28800s      #第二階段的存活時間28800s是8小時
        authby=secret        #兩端驗證方式
        #authby=psk
        #type=tunnel
        auto=add #是否自動連接,start代表自動連接,route為發(fā)起請求自動連接,比如ping

還有一個就是PSK(預(yù)共享密鑰)(/etc/strongswan/ipsec.secrets):

#格式 [ <id selectors> ] : PSK <secret>

leftid的值 rightid的值 : PSK "yourpak" 

配置就這些,主要說下注意的地方:

1、默認(rèn)情況下, Cisco IOS使用IP地址作為IKE ID ,所以rightid和leftid最好用兩端服務(wù)器的公網(wǎng)IP,用%any可以試一下,我沒測試。

2、由于阿里云服務(wù)器沒有配置公網(wǎng)IP,所以left不一定不能填服務(wù)器的公網(wǎng)IP,否則無法通信。

3、如果VPN連接不需要做IP限制,right可以填寫%any,如果需要做IP限制,填寫對應(yīng)的公網(wǎng)IP,如果對端是路由器,不支持client,就是不能主動發(fā)送加密和認(rèn)證算法,這里就要配對端實際的公網(wǎng)IP。

4、leftsubnet和rightsubnet內(nèi)網(wǎng)IP段也是一樣的,不作限制就填寫0.0.0.0/0,填寫實際的IP段注意子網(wǎng)掩碼。

5、auto正常情況下服務(wù)器端應(yīng)該是add,但是如果對端路由器不支持client,這里就要配置成start,自動連接,這個坑,花了一天時間。

6、ike和esp 加密和認(rèn)證算法,strongswan官網(wǎng)有詳細(xì)的參數(shù),參考https://wiki.strongswan.org/projects/strongswan/wiki/IKEv1CipherSuites 這個值是組成是 加密算法-認(rèn)證算法-DH分組 和這個需要根據(jù)路由器的配置來設(shè)置。

7、思科路由器默認(rèn)是主模式。兩種模式的區(qū)別參考:http://blog.sina.com.cn/s/blog_e6ea327d0102xr7y.html

關(guān)于測試IKEv1 psk,目前我自己用過的有三種方法:

1、路由器或者防火墻上面直接測試。

2、下載思科模擬器VPN Access Manager,我沒有測試成功。

3、使用strongswan直接測試。

/etc/strongswan/ipsec.conf

config setup
# strictcrlpolicy=yes
# uniqueids = no

conn ipsec-client
        left=%any
        leftsubnet=0.0.0.0/0
        right=vpn服務(wù)器的公網(wǎng)IP   
        rightsubnet=0.0.0.0/0
        aggressive=no
        keyexchange=ikev1
        ike=3des-sha1-modp1536
        esp=3des-sha1
        ikelifetime=3600s
        lifetime=28800s
        #authby=secret
        authby=psk
        type=tunnel
        auto=start
        rightid=這里填VPN服務(wù)器配置里面的 leftid
        leftid=這里填VPN服務(wù)器配置里面的 rightid

/etc/strongswan/ipsec.secrets

leftid的值 rightid的值 : PSK "yourpak" #一定要和VPN服務(wù)器的psk一致。

配置好直接啟動就可以了systemctl restart strongswan,查看鏈接狀態(tài)strongswan status。注意一定要有VNC鏈接的情況下,才去連VPN,通過xshell登錄的,連上VPN,你就斷開了。

關(guān)于報錯可以直接參考阿里云的IPsec連接常見問題 和 http://docs.netgate.com/pfsense/en/latest/vpn/ipsec/ipsec-troubleshooting.html

這里主要說下報錯:

parsed INFORMATIONAL_V1 request xxxx [ HASH N(NO_PROP) ]

received NO_PROPOSAL_CHOSEN error notify

阿里云說的是 加密算法或認(rèn)證算法不一致。實際上不完全對,我就是被這個坑了。

如果是兩邊加密算法不一致,日志會返回類似下面的報錯:

charon: 14[CFG] received proposals: IKE:AES_CBC_256/MODP_1024  #這個是說你客戶端的加密和算法

charon: 14[CFG] configured proposals: IKE:AES_CBC_256/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024 #這個是說,服務(wù)器有支持哪些認(rèn)證,推薦你配置。

charon: 14[IKE] no proposal found

charon: 14[ENC] generating INFORMATIONAL_V1 request 2774552374 [ N(NO_PROP) ]

如果單單只是有這個報錯:

parsed INFORMATIONAL_V1 request xxxx [ HASH N(NO_PROP) ]

received NO_PROPOSAL_CHOSEN error notify

沒有其他報錯了,那實際上客戶端無法正常傳遞算法和認(rèn)證給服務(wù)器端,就需要按照我注意里面說的把auto改成 auto=start,把right改成right=客戶端公網(wǎng)IP,再重啟strongswan。

目前就遇到這些坑,前前后后搞了一周多,如果你正好也在搞strongswan IKEv1,也被坑得不要不要的,可以加我QQ一起探討。

【騰訊云】云服務(wù)器、云數(shù)據(jù)庫、COS、CDN、短信等云產(chǎn)品特惠熱賣中

發(fā)表評論取消回復(fù)

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前評論:3   其中:訪客  0   博主  0

    • avatar 前行520 0

      博主,您好;我最近在搭建strongswan和飛塔(FortiGate)之間點對點的連接,遇到了相關(guān)的一些問題,不知道您有沒有遇到過相關(guān)的問題,想跟您探討下

        • avatar 阿湯博客 Admin

          @前行520 什么問題,具體說下呢。

            • avatar 少年 0

              @阿湯博客 博主,我遇到received INVALID_ID_INFORMATION error notify的錯誤,不知道如何解決,麻煩解析下