这与此处的问题相同:通过 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。也就是说,我失去了互联网!
我的解决方法是这样的:
- 在 NetworkManager 中,我编辑了“网络连接”下的 VPN 连接。
- 在 IPv4 选项卡中,将方法更改为“仅自动(VPN)地址”
- 添加了我的工作 DNS 服务器(例如 10.10.10.100)和“mywork.tld”的“搜索域”
- 点击“路线”。
- 添加一条覆盖我的工作网络的路由,例如 10.10.0.0 / 255.255.0.0 和网关 10.10.10.253 <-- 我从“traceroute”获得的 VPN 网关。
- 然后我勾选了两个选项:i。“忽略自动选择的路线”ii。“仅将此连接用于其网络上的资源”
在我的计算机上运行。
我对所发生的事情的理解是:
- 我的 /etc/resolv.conf 使用 dnsmasq 设置并指向 127.0.1.1
- dnsmasq 使用我的 ISP 的 DNS 服务器进行常规互联网 DNS 解析。例如,ISP DNS 为 8.8.8.8。
- 我连接到 VPN,DNS 服务器 10.10.10.100 作为附加服务器添加到 dnsmasq,用于“mywork.tld”DNS 解析。
- 一旦我使用 VPN,我的工作防火墙就不再允许我使用端口 53 到 8.8.8.8,所以我的常规互联网解析就消失了。DNS 应该超时并转到辅助 DNS 服务器,但由于某种原因它并没有这样做?
- 我只能访问“server01.mywork.tld”的 DNS 解析,因为此查询转到 10.10.10.100,我可以通过 VPN 访问它。
- 如果我查询 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 解析内部和外部网络,每个人都很高兴。