当我使用 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
我得到了正确的答案。由于这很奇怪,我跟踪了网络流量,看看nslookup
与resolvectl 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
没有运气。
您可以使用:
- 打开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 启动它。然后,您可以根据您的发行版及其提供的图标为其添加启动器。
- FortiClient SSLVPN 4.0.2332: https://apt.iteas.at/
两者都可以工作,第一个必须手动构建和安装,而第二个已准备好运行,即使我注意到有一次隧道关闭而连接没有关闭。
我已经使用 Fortigate v7.2.0 进行了测试