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

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

这与此处的问题相同:通过 GUI 让 openconnect vpn 工作,但我的添加内容被删除了,并被要求创建一个新的问题。

事实上,这里有许多人问过类似的问题,但都没有得到答复。

软件版本:Ubuntu 14.04,openconnect 5.02

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

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

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

更多细节:

1a. 通过 openconnect 和 network-manager 连接时,即使我在 ipv4 选项卡下明确添加了 DNS 和搜索域,也只有搜索域出现在 /etc/resolv.conf 中。即使我没有提供 DNS 和搜索域,我也可以在日志中看到它正在从 VPN 集中器获取该信息。同样,搜索域已正确更新。[下面的日志]

1b. 在终端中通过 sudo 连接时,resolv.conf 会正确填充 DNS 和搜索域,即使我没有在命令行中添加该信息或提供 vpnc-script 的路径。它一定是从 VPN 集中器获取的。[日志也在下面]

2a. 通过 openconnect 和 network-manager 连接时,会创建一个新的接口“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-scripts 更新到最新版本,但无济于事。

一些进一步的研究事实证明,从 12.04 开始,使用网络管理器时,名称服务器不再通过 resolv.conf 进行 DNS 解析。这就是为什么当我使用命令行时它可以工作,但使用网络管理器时却不行。而是添加了名称服务器 127.0.1.1 [dnsmasq],并告知该名称服务器实际名称服务器的 IP 地址。

最大的优势是,如果您连接到 VPN,那么您不必像过去那样将所有 DNS 流量都路由到 VPN,而是只发送与该 VPN 宣布的子网和域相关的 DNS 查询。

更新 按照上述链接中的说明禁用 dnsmasq 可以解决问题,因为 /etc/resolv.conf 已填充。

但这并不是真正的解决方案,而是一种后备方案。

答案1

检查您尝试通过 VPN 解析的主机与 Cisco VPN 服务器发送的“DNS 域”之间是否不匹配。

要检查这一点,请打开终端并运行:

tail -f /var/log/syslog

然后通过网络管理器启动 openconnect。您将看到一大堆输出,包括一些这样的行:

12 月 5 日 12:54:31 canoe NetworkManager[1266]: 内部 DNS: 10.0.20.21

12 月 5 日 12:54:31 canoe NetworkManager[1266]: 内部 DNS: 10.10.3.32

12 月 5 日 12:54:31 canoe NetworkManager[1266]: DNS 域:'internal.example.com'

往下看你会看到

12 月 5 日 12:54:31 canoe dnsmasq[1871]: 使用名称服务器 10.0.20.21#53 访问域 internal.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,DNS 服务器 10.10.10.100 作为附加服务器添加到 dnsmasq,用于“mywork.tld”DNS 解析。
  4. 一旦我使用 VPN,我的工作防火墙就不再允许我使用端口 53 到 8.8.8.8,所以我的常规互联网解析就消失了。DNS 应该超时并转到辅助 DNS 服务器,但由于某种原因它并没有这样做?
  5. 我只能访问“server01.mywork.tld”的 DNS 解析,因为此查询转到 10.10.10.100,我可以通过 VPN 访问它。
  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 解析内部和外部网络,每个人都很高兴。

相关内容