讓 openconnect vpn 透過網路管理器工作

讓 openconnect vpn 透過網路管理器工作

這與這裡是同一個問題:讓 openconnect vpn 透過 GUI 工作,但我添加的內容已被刪除,並且要求我建立一個新問題。

事實上,有很多人在這裡問類似的問題,但都是 0 回覆。

軟體版本:Ubuntu 14.04、開放連線 5.02

主要問題:我正在嘗試使用 openconnect 將 VPN 連線新增至網路管理員。當我提供 VPN 使用者名稱和密碼時,它連接成功,但我無法解析 DNS。

如果我透過 sudo 在終端機中運行 openconnect,則 DNS 可以工作。

sudo openconnect -u <username> https://<vpn concentrator name>

更多細節:

1a.當透過 openconnect 和網路管理員連接時,即使我在 ipv4 標籤下明確地新增了 DNS 和搜尋網域,只有搜尋網域最終出現在 /etc/resolv.conf 中。即使我不提供 DNS 和搜尋網域,我也可以在日誌中看到它從 VPN 集中器獲取該資訊。再次,搜尋網域已正確更新。 [記錄如下]

1b.當在終端機中透過 sudo 連接時,resolv.conf 會正確填充 DNS 和搜尋網域,即使我沒有在命令列中新增該資訊或提供 vpnc 腳本的路徑。它一定是從 VPN 集中器取得的。 [日誌也在下面]

2a.透過 openconnect 和網路管理器連接時,會建立一個新介面「vpn0」。

2b.透過 sudo 和命令列連接時,會建立一個新介面「tun0」。

透過網路管理器連接時記錄:

NetworkManager[784]: <info> Starting VPN service 'openconnect'...
NetworkManager[784]: <info> VPN service 'openconnect' started (org.freedesktop.NetworkManager.openconnect), PID 4513
NetworkManager[784]: <info> VPN service 'openconnect' appeared; activating connections
NetworkManager[784]: <info> VPN plugin state changed: init (1)

這是要求我輸入密碼的地方

NetworkManager[784]: <info> VPN plugin state changed: starting (3)
NetworkManager[784]:    SCPlugin-Ifupdown: devices added (path: /sys/devices/virtual/net/vpn0, iface: vpn0)
NetworkManager[784]:    SCPlugin-Ifupdown: device added (path: /sys/devices/virtual/net/vpn0, iface: vpn0): no ifupdown configuration found.
NetworkManager[784]: <warn> /sys/devices/virtual/net/vpn0: couldn't determine device driver; ignoring...
NetworkManager[784]: <info> VPN connection '<connection name>' (Connect) reply received.
openconnect[4544]: Attempting to connect to server <ip address>:443
openconnect[4544]: SSL negotiation with <correctly identified vpn server>
openconnect[4544]: Connected to HTTPS on <correctly identified vpn server>
openconnect[4544]: Got CONNECT response: HTTP/1.1 200 OK
openconnect[4544]: CSTP connected. DPD 30, Keepalive 20
NetworkManager[784]: <info> VPN connection '<connection name>' (IP Config Get) reply received.
NetworkManager[784]: <info> VPN connection '<connection name>' (IP4 Config Get) reply received.
NetworkManager[784]: <info> VPN connection '<connection name>' (IP6 Config Get) reply received.
NetworkManager[784]: <info> VPN Gateway: <ip address>
NetworkManager[784]: <info> Tunnel Device: vpn0
NetworkManager[784]: <info> IPv4 configuration:
NetworkManager[784]: <info>   Internal Address: 10.xxx.xxx.xxx
NetworkManager[784]: <info>   Internal Prefix: 19
NetworkManager[784]: <info>   Internal Point-to-Point Address: 10.xxx.xxx.xxx
NetworkManager[784]: <info>   Maximum Segment Size (MSS): 0
NetworkManager[784]: <info>   Forbid Default Route: no
NetworkManager[784]: <info>   Internal DNS: <ip address>
NetworkManager[784]: <info>   Internal DNS: <ip address>
NetworkManager[784]: <info>   DNS Domain: '(none)'
NetworkManager[784]: <info> IPv6 configuration:
NetworkManager[784]: <info>   Internal Address: <ipv6 ip>
NetworkManager[784]: <info>   Internal Prefix: 64
NetworkManager[784]: <info>   Internal Point-to-Point Address: <ipv6 ip>
NetworkManager[784]: <info>   Maximum Segment Size (MSS): 0
NetworkManager[784]: <info>   Forbid Default Route: no
NetworkManager[784]: <info>   DNS Domain: '(none)'
openconnect[4544]: Connected vpn0 as <ip address> + <ipv6 ip>, using SSL
openconnect[4544]: Established DTLS connection (using OpenSSL)
NetworkManager[784]: <info> VPN connection '<connection name>' (IP Config Get) complete.
NetworkManager[784]: <info> Policy set '<connection name>' (vpn0) as default for IPv4 routing and DNS.
NetworkManager[784]: <info> Policy set '<connection name>' (vpn0) as default for IPv6 routing and DNS.
NetworkManager[784]: <info> Writing DNS information to /sbin/resolvconf
dnsmasq[1027]: setting upstream servers from DBus
dnsmasq[1027]: using nameserver 127.0.0.1#53 for domain 10.in-addr.arpa
dnsmasq[1027]: using nameserver 127.0.0.1#53 for domain <home search domain>
dnsmasq[1027]: using nameserver 127.0.0.1#53 for domain <vpn search domain>
dnsmasq[1027]: using nameserver <ip address>#53 for domain 10.in-addr.arpa
dnsmasq[1027]: using nameserver <ip address>#53 for domain <home search domain>
dnsmasq[1027]: using nameserver <ip address>#53 for domain <vpn search domain>
dnsmasq[1027]: using nameserver <ip address>#53 for domain 10.in-addr.arpa
dnsmasq[1027]: using nameserver <ip address>#53 for domain <home search domain>
dnsmasq[1027]: using nameserver <ip address>#53 for domain <vpn search domain>
dbus[471]: [system] Activating service name='org.freedesktop.nm_dispatcher' (using servicehelper)
NetworkManager[784]: <info> VPN plugin state changed: started (4)
NetworkManager[784]:    keyfile: updating /etc/NetworkManager/system-connections/<connection name>-6a503043-13b0-4ce7-9749-29cd3054cae3
dbus[471]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'

儘管日誌中存在有關更新 resolv.conf 的所有噪音,但它會刪除名稱伺服器,但不會將其替換為日誌中的 IP 位址。它確實正確更新了搜尋網域,所以很可能不是權限問題。

在終端機中使用 sudo openconnect 連線時記錄:

NetworkManager[784]:    SCPlugin-Ifupdown: devices added (path: /sys/devices/virtual/net/tun0, iface: tun0)
NetworkManager[784]:    SCPlugin-Ifupdown: device added (path: /sys/devices/virtual/net/tun0, iface: tun0): no ifupdown configuration found.
NetworkManager[784]: <warn> /sys/devices/virtual/net/tun0: couldn't determine device driver; ignoring...
dbus[471]: [system] Activating service name='org.freedesktop.hostname1' (using servicehelper)
kernel: [ 3258.725774] systemd-hostnamed[4927]: Warning: nss-myhostname is not installed. Changing the local hostname might make it unresolveable. Please install nss-myhostname!
dbus[471]: [system] Successfully activated service 'org.freedesktop.hostname1'

與更新 resolv.conf 無關,但它正確更新了名稱伺服器和搜尋網域。

更新 如果我忽略 resolv.conf 中的所有警告並將 VPN 集中器名稱伺服器新增至其中,我就可以立即進行瀏覽。當然,一旦斷開連接,這些變更就會被覆蓋。

這有一個錯誤,早在2012年,但它已經過期了。問題似乎是 vpnc 腳本。

我嘗試手動將 vpnc 腳本更新到最新版本,但無濟於事。

一些進一步的研究事實證明,從 12.04 開始,resolv.conf 不再是使用網路管理員時名稱伺服器進行 DNS 解析的位置。這就是為什麼它在我使用命令列時有效,但在使用網路管理器時無效。相反,新增了名稱伺服器 127.0.1.1 [dnsmasq],並且該名稱伺服器被告知實際名稱伺服器的 IP 位址。

最大的優點是,如果您連接到 VPN,您將只發送與該 VPN 宣布的子網路和網域相關的 DNS 查詢,而不是像過去那樣透過 VPN 路由所有 DNS 流量。

更新 按照上面連結中的說明停用 dnsmasq 可以解決該問題,因為 /etc/resolv.conf 已填入。

但這不是一個真正的解決方案,而是一個後備方案。

答案1

檢查您嘗試透過 VPN 解析的主機與 Cisco VPN 伺服器傳送的「DNS 網域」之間是否不符。

要檢查這一點,請打開終端並運行:

tail -f /var/log/syslog

然後透過網路管理器啟動openconnect。您將看到一大堆輸出,包括如下所示的一些行:

12 月 5 日 12:54:31 獨木舟 NetworkManager[1266]:內部 DNS:10.0.20.21

12 月 5 日 12:54:31 獨木舟 NetworkManager[1266]:內部 DNS:10.10.3.32

12 月 5 日 12:54:31 獨木舟 NetworkManager[1266]:DNS 網域:'internal.example.com'

再往下你會看到

12 月 5 日 12:54:31 canoe dnsmasq[1871]:使用網域名稱伺服器 10.0.20.21#53 來處理內部.example.com 網域

這表示 VPN 伺服器正在指示客戶端應使用 DNS 伺服器來解析內部主機internal.example.com,例如server.internal.example.com.

就我而言,我需要解決server.example.com(並且沒有得到任何結果)。

我的解決方案是進入 VPN 設定並新增example.com為附加搜尋網域:

在此輸入影像描述

不要忘記斷開 VPN,然後重新連接以使設定生效。

答案2

所以我自己已經夠滿意地解決了這個問題。我使用的是 Mint 18 / Ubuntu 16.04

我的問題是,一旦我透過 NetworkManager 連線到 Openconnect VPN,我就無法再解析工作網域以外的網域的 DNS。即我失去網路了!

我的修復是這樣的:

  1. 在 NetworkManager 中,我在「網路連線」下編輯了 VPN 連線。
  2. 在 IPv4 標籤中,將方法變更為“僅自動 (VPN) 位址”
  3. 新增了我的工作 DNS 伺服器(例如 10.10.10.100)和“mywork.tld”的“搜尋網域”
  4. 點擊“路線”。
  5. 新增覆蓋我的工作網路的路由,例如 10.10.0.0 / 255.255.0.0 和網關 10.10.10.253 <-- 我從「traceroute」取得的 VPN 閘道。
  6. 然後我勾選了兩個選項:i。 “忽略自動選擇的路線” ii. “僅將此連接用於其網路上的資源”

在我的電腦上運作。

我對發生的事情的理解是:

  1. 我的 /etc/resolv.conf 使用 dnsmasq 設定並指向 127.0.1.1
  2. dnsmasq 使用我的 ISP 的 DNS 伺服器進行一般互聯網 DNS 解析。例如,ISP DNS 是 8.8.8.8。
  3. 我連接到 VPN,10.10.10.100 的 DNS 伺服器被新增為 dnsmasq 的附加伺服器,用於「mywork.tld」DNS 解析。
  4. 一旦我使用 VPN,我的工作防火牆就不再允許我使用連接埠 53 到 8.8.8.8,因此我的常規網路解析度消失了。 DNS 應該會逾時並轉至輔助 DNS 伺服器,但由於某些原因卻沒有逾時?
  5. 我只能存取“server01.mywork.tld”的 DNS 解析,因為此查詢轉到我可以透過 VPN 存取的 10.10.10.100。
  6. 如果我查詢 www.google.com 它會失敗,即使我的內部 DNS 可以轉送。我只能假設我的內部 DNS 從未被詢問過。

只要我的工作不改變他們的網路或 DNS 伺服器 IP 位址,我的修復似乎就會繼續有效。

我對此有點模糊,但我認為它對我有用,因為一旦完成此操作,我的無線網路卡就會成為我的預設網路連線。因此 DNS 查詢透過 wifi 轉到 8.8.8.8。 dnsmasq 告訴任何對「xyz.mywork.tld」的查詢要轉到 10.10.10.100。我已經為此設定了一條路由,以便透過「vpn0」NIC 傳回「xyz.mywork.tld」的正確 10.10.10.x IP 位址。 Bingo bango 內部和外部網路的 DNS 解析,每個人都很高興。

相關內容