Debian

ConnMan:如何使用 CSD-Wrapper 正確設置 OpenConnect VPN?

  • August 28, 2018

我想在家中通過 VPN 訪問我在大學的個人網路驅動器。在過去,我一直在使用NetworkManager這個完全正常的方法。但是,最近我搬到了那裡ConnMan,我不太清楚如何在那裡設置它。

感謝GAD3RConnMan ,我發現有一個圖形輸入遮罩可用於在的界面中設置 VPN 連接CMST

之前的(成功執行的)VPN 配置NetworkManager如下所示:

[openconnect]
Description=My Company
Host=vpngw2-out.net.provider.com
CACert=(null)
Protocol=anyconnect
Proxy=
CSDEnable=1
CSDWrapper=/home/user/.cisco/csd-wrapper.sh
UserCertificate=(null)
PrivateKey=(null)
FSID=0
StokenSource=disabled
StokenString=

但是,這個成功執行的 VPN 配置是使用CiscoNetworkManager的所謂的。CSD-wrapper

現在的挑戰ConnMan是:在創建必要的 VPN 配置文件時,我必須選擇哪個 OpenConnect 變體來匹配上層規範?通過ConnMan-創建新的配置文件時,CMST有幾個-OpenConnect選項可用:

  • Provider OpenConnect
  • OpenConnect.ServerCert
  • OpenConnect.CACert
  • OpenConnect.ClientCert
  • OpenConnect.MTU
  • OpenConnect.Cookie
  • OpenConnect.VPNHost

我必須選擇哪一個來匹配之前的配置NetworkManager配置?我是否必須提及一些特別的東西才能將CSD-Wrapper文件包含在其中ConnMan

感謝GAD3RConnman 開發者郵件列表的評論,一位朋友想出瞭如何設置 VPN 連接。儘管仍然存在一個小錯誤,但我們大部分時間都可以正常工作。


一、初始情況

以下軟體包必須安裝在您要訪問主機伺服器的客戶端電腦上:

  • connman
  • connman-vpn
  • cmst
  • openconnect

此外,該腳本csd-wrapper.sh在您的客戶端目錄中執行,/home並創建了/home/.cisco包含您機器的多個身份驗證文件的目錄。


2. 通過參與生成必要的 VPN 身份驗證資訊OpenConnect

在第二步中,您必須執行OpenConnect身份驗證請求以獲取伺服器證書 ( FINGERPRINT) 和COOKIE用於Connman連接到 VPN 的證書。此資訊將通過使用OpenConnect包創建,該包稍後會在終端中顯示伺服器證書和 cookie。我們通過執行在終端中生成此資訊

$ sudo openconnect --csd-wrapper=/home/user/.cisco/csd-wrapper.sh --authenticate --user <username> <hostname>

之後此命令將顯示四個變數:POSTCOOKIE和。因此,指紋(以 開頭)充當伺服器證書,而這聽起來像。HOST``FINGERPRINT``sha256:...``COOKIE


3. 創建 VPN 配置文件Connman

與此相反,NetworkManagerConnman為每個 VPN 連接使用所謂的 VPN 配置文件,從那裡獲取有關如何連接到 VPN 主機的資訊。因此,在第三步中,必須將先前生成的身份驗證數據粘貼到此 VPN 配置文件中,該文件Connman將用於連接到伺服器。為此,我們/var/lib/connman-vpn/<connection-name>.config基於以下結構創建文件:

[global]
Name = VPN name, for example "My Company VPN" (without quotes)

[provider_openconnect]
Type = OpenConnect
Name = VPN Provider name, for example "My Company Cisco VPN" (without quotes)
Host = <VPN host IP address>
Domain = <VPN host domain>
OpenConnect.ServerCert = <paste the output of FINGERPRINT from the previous openconnect command>
OpenConnect.Cookie = <paste the output of COOKIE from the previous openconnect command>

然後保存並關閉文件。


4.重啟你的機器並檢查VPN連接

重新啟動您的系統,您將在VPNConnman System Tray ( CMST) GUI 的附加程序中找到您現在創建的 VPN 連接。標記它,點擊“連接”,幾秒鐘後將建立與您的 VPN 主機的 VPN 連接。現在您可以在您選擇的文件管理器中輕鬆訪問 VPN 主機。


5. Eyesore:生成的 cookie 僅在幾個小時內有效

幾個小時後,您之前成功執行的 VPN 連接將不再有效。檢查/var/log/syslog連接方式時會報錯伺服器證書驗證失敗:

Aug 24 00:14:51 <hostname> connmand[444]: ipconfig state 2 ipconfig method 1
Aug 24 00:14:51 <hostname> connmand[444]: vpn0 {create} index 23 type 65534 <NONE>
Aug 24 00:14:51 <hostname> connmand[444]: vpn0 {update} flags 4240 <DOWN>
Aug 24 00:14:51 <hostname> connmand[444]: vpn0 {newlink} index 23 address 00:00:00:00:00:00 mtu 1500
Aug 24 00:14:51 <hostname> connmand[444]: vpn0 {newlink} index 23 operstate 2 <DOWN>
Aug 24 00:14:51 <hostname> connman-vpnd[365]: vpn0 {create} index 23 type 65534 <NONE>
Aug 24 00:14:51 <hostname> connman-vpnd[365]: vpn0 {update} flags 4240 <DOWN>
Aug 24 00:14:51 <hostname> connman-vpnd[365]: vpn0 {newlink} index 23 operstate 2 <DOWN>
Aug 24 00:14:51 <hostname> connmand[444]: ipconfig state 2 ipconfig method 1
Aug 24 00:14:51 <hostname> openconnect[4476]: Connected to <VPN server IP>:443
Aug 24 00:14:51 <hostname> openconnect[4476]: SSL negotiation with <VPN server IP>
Aug 24 00:14:51 <hostname> openconnect[4476]: Server certificate verify failed: signer not found
Aug 24 00:14:51 <hostname> openconnect[4476]: Connected to HTTPS on <VPN server IP>
Aug 24 00:14:51 <hostname> openconnect[4476]: Got inappropriate HTTP CONNECT response: HTTP/1.1 401 Unauthorized
Aug 24 00:14:51 <hostname> connmand[444]: vpn0 {dellink} index 23 operstate 2 <DOWN>
Aug 24 00:14:51 <hostname> connmand[444]: (null) {remove} index 23
Aug 24 00:14:51 <hostname> connman-vpnd[365]: vpn0 {dellink} index 23 operstate 2 <DOWN>
Aug 24 00:14:51 <hostname> connman-vpnd[365]: vpn0 {remove} index 23
Aug 24 00:14:51 <hostname> connmand[444]: ipconfig state 7 ipconfig method 1
Aug 24 00:14:51 <hostname> connmand[444]: ipconfig state 6 ipconfig method 1

因此,初始身份驗證COOKIE已更改,因此先前生成的 cookie 不再有效。因此,您必須在幾個小時內重複上面的過程來創建一個新的COOKIE並將這個新的粘貼到您的 VPN 配置文件 ( /var/lib/connman-vpn/<yourvpnname>.config) 中,同時覆蓋舊的 cookie。之後重新啟動Connman,您的 VPN 將在接下來的幾個小時內再次正常工作。

重要的:

似乎NetworkManager可以自己推動新的重建COOKIE,同時Connman需要將新的cookie輸入到其 VPN 配置文件中。可能Connman缺少某種界面來自行啟動OpenConnect-command。


6. 使新 cookie 的重新創建更舒適的解決方法

您可以使用 bash 腳本生成新的 cookie 並覆蓋舊的。只需將以下文本複製到*.sh-file 中,使其可執行並執行它。新的 cookie 將自動放置/var/lib/connman-vpn/vpnname.config在正確的位置。之後重新啟動Connman,VPN 將再次正常工作。

#!/bin/bash

sed -i "s/^OpenConnect.Cookie =.*$/$( echo '<YOUR-VPN-PASSWORD>' | openconnect --csd-wrapper=/home/user/.cisco/csd-wrapper.sh --authenticate --user=<USERNAME> --authgroup="<YOURGROUP>" --passwd-on-stdin <VPN-HOST-DOMAIN> | grep 'COOKIE=' | sed "s/COOKIE='//; s/'//g; s/^/OpenConnect.Cookie = /")/" <EXTERNAL-FILENAME>

該腳本將:

  1. 啟動 OpenConnect 並執行OpenConnect身份驗證請求以獲取伺服器證書 ( FINGERPRINT) 和COOKIE
  2. 將您的插入username到使用者提示中
  3. 將您的插入password到使用者提示中
  4. 將您想要group的插入使用者提示中
  5. 生成一個新的cookie
  6. 用新的覆蓋舊cookie/var/lib/connman-vpn/vpnname.config``cookie

之後,您可以毫無問題地重新連接到您的 VPN 主機。多虧了這個腳本,cookies在必要時重新創建新腳本更加舒適和快捷。

引用自:https://unix.stackexchange.com/questions/449174