1. 程式人生 > >CentOS/Ubuntu一鍵安裝IPSEC/IKEV2 VPN伺服器

CentOS/Ubuntu一鍵安裝IPSEC/IKEV2 VPN伺服器

花了點時間將上次的Ubuntu、CentOS搭建IPSec/IKEv2 VPN伺服器全攻略整理成了一份一鍵安裝的指令碼。適用於WindowsPhone,iOS,Android和PC裝置。有需要的童鞋可以拿來食用~ ~ ~ ~ CetnOS測試了下貌似沒什麼問題,Ubuntu的手裡暫時沒有空閒vps就沒試了,其實也差不多的,歡迎測試和反饋

目錄

安裝說明

用法很簡單:總結成一句話就是:除了型別要選對以外,其他的一路回車就好了23333

特性

  • 服務端要求:Ubuntu或者CentOS-6/7或者Debian
  • 客戶端:
    • iOS/OSX=>ikev1,ikev2
    • Andriod=>ikev1
    • WindowsPhone=>ikev2
    • 其他Windows平臺=>ikev2
  • 可使用自己的私鑰和根證書,也可自動生成
  • 證書可繫結域名或ip
  • 要是圖方便可一路回車

最近更新

  • 新增SSL證書自動申請自動更新並應用於IKEv2的解決方案,詳見這篇博文:SSL證書自動更新並應用到IKEv2, Nginx ;
  • 新增對CentOS7的firewall防火牆的支援;
  • 使用ip address替換已被廢棄的ifconfig;
  • 生成單獨的sysctl配置檔案/etc/sysctl.d/10-ipsec.conf單獨載入,用於開啟ipv4轉發(如以後解除安裝或需要關閉net.ipv4.ip_forward,請記得刪除此檔案);
  • 升級strongswan版本到5.5.1,解決iOS9和iOS10的相容性問題(感謝
    caasiu
    的提醒#21);
  • 新增匯入SSL證書的支援,安裝時可選使用證書頒發機構簽發的證書還是生成自簽名證書;

服務端安裝說明

  1. 下載指令碼:

    wget --no-check-certificate https://raw.githubusercontent.com/quericy/one-key-ikev2-vpn/master/one-key-ikev2.sh
    
    • 注:如需使用其他分支的指令碼,請將上述url中的master修改為分支名稱,各分支區別詳見本頁的分支說明節點
  2. 執行指令碼:

    chmod +x one-key-ikev2.sh
    bash one-key-ikev2.sh
    
  3. 等待自動配置部分內容後,選擇vps型別(OpenVZ還是Xen、KVM),選錯將無法成功連線,請務必核實伺服器的型別

    。輸入伺服器ip或者繫結的域名(連線vpn時伺服器地址將需要與此保持一致,如果是匯入泛域名證書這裡需要寫*.域名的形式);
    one-key-install-ikev2-vpn

  4. 選擇使用使用證書頒發機構簽發的SSL證書還是生成自簽名證書:

    • 如果選擇no,使用自簽名證書(客戶端如果使用IkeV2方式連線,將需要匯入生成的證書並信任)則需要填寫證書的相關資訊(C,O,CN),為空將使用預設值(default value),確認無誤後按任意鍵繼續,後續安裝過程中會出現輸入兩次pkcs12證書的密碼的提示(可以設定為空)

    • 如果選擇yes,使用SSL證書(如果證書是被信任的,後續步驟客戶端將無需匯入證書)請在繼續下一步之前,將以下檔案按提示命名並放在指令碼相同的目錄下(SSL證書詳細配置和自動續期方案可見https://quericy.me/blog/860/ ):

      1. ca.cert.pem 證書頒發機構的CA,比如Let‘s Encrypt的證書,或者其他鏈證書;
      2. server.cert.pem 簽發的域名證書;
      3. server.pem 簽發域名證書時用的私鑰;
  5. 是否使用SNAT規則(可選).預設為不使用.使用前請確保伺服器具有不變的靜態公網ip,可提升防火牆對資料包的處理速度.如果伺服器網路設定了NAT(如AWS的彈性ip機制),則填寫網絡卡連線介面的ip地址(參見KinonC提供的方案:#36).

  6. 防火牆配置.預設配置iptables(如果使用的是firewall(如CentOS7)請選擇yes自動配置firewall,將無視SNAT並跳過後續的補充網絡卡介面步驟).補充網絡卡介面資訊,為空則使用預設值(Xen、KVM預設使用eth0,OpenVZ預設使用venet0).如果伺服器使用其他公網介面需要在此指定介面名稱,填寫錯誤VPN連線後將無法訪問外網)

  7. 看到install Complete字樣即表示安裝完成。預設使用者名稱密碼將以黃字顯示,可根據提示自行修改配置檔案中的使用者名稱密碼,多使用者則在配置檔案中按格式一行一個(多使用者時使用者名稱不能使用%any),儲存並重啟服務生效。

  8. 將提示資訊中的證書檔案ca.cert.pem拷貝到客戶端,修改後綴名為.cer後匯入。ios裝置使用Ikev1無需匯入證書,而是需要在連線時輸入共享金鑰,共享金鑰即是提示資訊中的黃字PSK.
    ikev2_VPN_install

客戶端配置說明

  • 連線的伺服器地址和證書保持一致,即取決於簽發證書ca.cert.pem時使用的是ip還是域名;

  • Android/iOS/OSX 可使用ikeV1,認證方式為使用者名稱+密碼+預共享金鑰(PSK);

  • iOS/OSX/Windows7+/WindowsPhone8.1+/Linux 均可使用IkeV2,認證方式為使用者名稱+密碼。使用SSL證書則無需匯入證書;使用自簽名證書則需要先匯入證書才能連線,可將ca.cert.pem更改字尾名作為郵件附件傳送給客戶端,手機端也可通過瀏覽器匯入,其中:

    • iOS/OSX 的遠端ID和伺服器地址保持一致,使用者鑑定選擇”使用者名稱”.如果通過瀏覽器匯入,將證書放在可訪問的遠端外鏈上,並在系統瀏覽器(Safari)中訪問外鏈地址;
    • Windows PC 系統匯入證書需要匯入到“本地計算機”的”受信任的根證書頒發機構”,以”當前使用者”的匯入方式是無效的.推薦執行mmc新增本地計算機的證書管理單元來操作;
    • WindowsPhone8.1 登入時的使用者名稱需要帶上域資訊,即wp”關於”頁面的裝置名稱\使用者名稱,也可以使用%any %any : EAP “密碼”進行任意使用者名稱登入,但指定了就不能新增其他使用者名稱了.
    • WindowsPhone10 的vpn還存在bug(截至10586.164),ikeV2方式可連線但系統流量不會走vpn,只能等微軟解決. (截至14393.5 ,此bug已經得到修復,現在WP10已經可以正常使用IkeV2.)
    • Windows10 也存在此bug,部分Win10系統連線後ip不變,沒有自動新增路由表,使用以下方法可解決(本方法由 bigbigfish 童鞋提供):
      • 手動關閉vpn的split tunneling功能(在遠端網路上使用預設閘道器);
      • 也可使用powershell修改,進入CMD視窗,執行如下命令:
        1
        2
        3
        4
        5
        
        powershell    #進入ps控制檯
        get-vpnconnection    #檢查vpn連線的設定(包括vpn連線的名稱)
        set-vpnconnection "vpn連線名稱" -splittunneling $false    #關閉split tunneling
        get-vpnconnection   #檢查修改結果
        exit   #退出ps控制檯
        

解除安裝方式

  1. 進入指令碼所在目錄的strongswan資料夾執行:

    1
    
    make uninstall
    
  2. 刪除指令碼所在目錄的相關檔案(one-key-ikev2.sh,strongswan.tar.gz,strongswan資料夾,my_key資料夾).

  3. 解除安裝後記得檢查iptables配置.

分支說明

  • master分支:經過測試的相對穩定的版本;
  • dev-debian分支:Debian6/7測試分支,該指令碼由bestoa修改提供;
  • dev分支:開發分支,使用最新版本的strongswan,未進過充分測試,用於嘗試和新增一些新的功能,未來可能新增對L2TP的相容支援,以及對ipv6的支援;

部分問題解決方案

  • ipsec啟動問題:伺服器重啟後預設ipsec不會自啟動,請命令手動開啟,或新增/usr/local/sbin/ipsec start到自啟動指令碼檔案中(如rc.local等):

    1
    
    ipsec start
    
  • ipsec常用指令:

    1
    2
    3
    4
    5
    6
    
    ipsec start   #啟動服務
    ipsec stop    #關閉服務
    ipsec restart #重啟服務
    ipsec reload  #重新讀取
    ipsec status  #檢視狀態
    ipsec --help  #檢視幫助
    
  • 可連線但是無法訪問網路:

    • 檢查iptables是否正常啟用,檢查iptables規則是否與其他地方衝突,或根據伺服器防火牆的實際情況手動修改配置。
    • 檢查sysctl是否開啟ip_forward:
      1. 開啟sysctl檔案:vim /etc/sysctl.conf
      2. 修改net.ipv4.ip_forward=1後儲存並關閉檔案
      3. 使用以下指令重新整理sysctl:sysctl -p
      4. 如執行後正常回顯則表示生效。如顯示錯誤資訊,請重新開啟/etc/syctl並根據錯誤資訊對應部分用#號註釋,儲存後再重新整理sysctl直至不會報錯為止。
  • 如果之前使用的自簽名證書,後改用SSL證書,部分客戶端可能需要解除安裝之前安裝的自簽名證書,否則可能會報Ike憑證不可接受的錯誤:

    • iOS:設定-通用,刪除證書對應的描述檔案即可;
    • Windows:Win+R,執行mmc開啟Microsoft管理控制檯,檔案->新增管理單元,新增證書管理單元(必須選計算機賬戶),展開受信任的根證書頒發機構,找到對應的自簽名證書,右鍵刪除即可;
    • Windows Phone:暫時沒有找到可以解除安裝證書的方法(除非越獄),目前只能重置來解決此問題;

PS

指令碼程式碼可訪問github檢視和下載:
GitHub

PS2