让 openconnect vpn 通过网络管理器工作

zee*_*zee 11 network-manager vpn dns resolv.conf cisco

这与此处的问题相同:Getting openconnect vpn to work through gui,但我对它的添加被删除,我被要求创建一个新问题。

其实这里也有很多人在问类似的问题,都是0个回答。

软件版本: Ubuntu 14.04、openconnect 5.02

主要问题:我正在尝试使用 openconnect 将 VPN 连接添加到网络管理器中。当我提供我的 VPN 用户名和密码时,它成功连接,但我无法解析 DNS。

如果我通过 sudo 在终端中运行 openconnect,DNS 就可以工作。

sudo openconnect -u <username> https://<vpn concentrator name>
Run Code Online (Sandbox Code Playgroud)

更多细节:

1a. 当通过 openconnect 和网络管理器连接时,即使我已经在 ipv4 选项卡下明确添加了 DNS 和搜索域,也只有搜索域最终出现在 /etc/resolv.conf 中。即使我不提供 DNS 和搜索域,我也可以在日志中看到它从 VPN 集中器获取该信息。同样,搜索域已正确更新。[记录如下]

1b. 在终端中通过 sudo 连接时,即使我没有在命令行中添加该信息或提供 vpnc 脚本的路径,resolv.conf 也会正确填充 DNS 和搜索域。它必须从 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)
Run Code Online (Sandbox Code Playgroud)

这是它要求我输入密码的地方

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'
Run Code Online (Sandbox Code Playgroud)

尽管日志中有关于更新 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'
Run Code Online (Sandbox Code Playgroud)

与更新 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 已填充。

虽然这不是一个真正的解决方案,但它是一个后备。

小智 0

检查您尝试通过 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,然后重新连接以使设置生效。


小智 0

所以我自己已经足够满意地解决了这个问题。我使用的是 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 解析,每个人都很高兴。