resolvectl 忽略新的 VPN 网络适配器

resolvectl 忽略新的 VPN 网络适配器

当我使用 forticlient 应用程序连接到公司 VPN 时,遇到一个奇怪的问题。首先,我不知道出了什么问题。花了一些时间后,我发现 DNS 没有发挥应有的作用。不幸的是,我不知道这是谁的错。它可能是 FortiClient、systemd-resolved 或其他。我使用的是 Ubuntu 22.04,它还不是正式版本,但我怀疑在一两周后正式发布之前它会变得更好。

这是resolvectl建立 VPN 之前的输出:

username@hostname:~$ resolvectl
Global
       Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: stub

Link 2 (enp2s0)
Current Scopes: none
     Protocols: -DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported

Link 3 (wlp1s0)
    Current Scopes: DNS
         Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 192.168.1.1
       DNS Servers: 192.168.1.1 2a00:ee0:d::13 2a00:ee0:e::13
        DNS Domain: --

VPN 建立后,resolvectl 会报告名为 的附加链接vpn

username@hostname:~$ resolvectl
Global
       Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: stub

Link 2 (enp2s0)
Current Scopes: none
     Protocols: -DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported

Link 3 (wlp1s0)
    Current Scopes: DNS
         Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS 
DNSSEC=no/unsupported
Current DNS Server: 172.20.1.21
       DNS Servers: 172.20.1.16 172.20.1.21 2a00:ee0:d::13 2a00:ee0:e::13
        DNS Domain: company.com

Link 5 (vpn)
Current Scopes: none
     Protocols: -DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported

正如您所看到的,链接 3 中添加了额外的 DNS 服务器,这应该可以帮助我在连接到 VPN 时解析内部名称。奇怪的是当我写的时候

username@hostname:~$ resolvectl query name.company.com
name.company.com: resolve call failed: 'name.company.com' not found

我什么也没得到。如果我尝试像这样使用 nslookup

username@hostname:~$ nslookup
> server 172.20.1.16
Default server: 172.20.1.16
Address: 171.20.1.16#53
> name.company.com
Server:     172.20.1.16
Address:    172.20.1.16#53

Name:   name.company.com
Address: 172.20.38.251

我得到了正确的答案。由于这很奇怪,我跟踪了网络流量,看看nslookupresolvectl query.

事实证明,nslookup在向 DNS 请求名称时,使用 VPN 分配的地址作为源 IP。另一方面,resolvectl query使用除 VPN 分配的地址之外的所有其他地址作为源 IP。因此,我猜测 DNS 服务器没有正确的路由将答案发送回我的计算机,或者 DNS 查询甚至可能无法到达新添加的 DNS 服务器。

因此,我需要的程序都无法正确解析名称。结果是我无法使用域名连接 VPN 内的任何地方。

有谁知道如何让resolvctl意识到有新分配的VPN地址,并且它应该使用它作为源IP。 FortiClient 是否应该在建立连接时进行一些额外的配置?可能不会。

我尝试在建立 VPN 后重新启动 systemd-resolved,但没有帮助。我应该重新启动其他服务吗?哪一个?


更新:我检查了网络设置中 DNS 的设置方式,它们是正确的。如果没有 VPN,网络接口 wlp1s0 显示:

username@hostname:~$ nmcli device show wlp1s0 | grep DNS
IP4.DNS[1]:                             192.168.1.1
IP6.DNS[1]:                             2a00:ee0:d::13
IP6.DNS[2]:                             2a00:ee0:e::13

VPN 连接后:

username@hostname:~$ nmcli device show wlp1s0 | grep DNS
IP4.DNS[1]:                             172.20.1.16
IP4.DNS[2]:                             172.20.1.21
username@hostname:~$ nmcli device show vpn | grep DNS
IP4.DNS[1]:                             172.20.1.16
IP4.DNS[2]:                             172.20.1.21

答案1

我尝试过许多不同的 Forticlient 版本:

  • v6.4.8
  • v7.0.0 至 v7.0.5

没有运气。

您可以使用:

  1. 打开FortiGui: https://github.com/theinvisible/openfortigui 您必须通过安装 qt5 依赖项从头开始构建。在这里你必须:
$ git clone https://github.com/theinvisible/openfortigui.git
$ git checkout v0.9.6
$ cd openfortigui
$ git submodule update --init
$ qmake
$ make

Make install target 不执行任何操作,因此您必须使用以下命令手动复制可执行文件:

$ sudo cp openfortigui/openfortigui /usr/bin/

并以 sudo 启动它。然后,您可以根据您的发行版及其提供的图标为其添加启动器。

  1. FortiClient SSLVPN 4.0.2332: https://apt.iteas.at/

两者都可以工作,第一个必须手动构建和安装,而第二个已准备好运行,即使我注意到有一次隧道关闭而连接没有关闭。

我已经使用 Fortigate v7.2.0 进行了测试

相关内容