

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 排除 AWS 客户端 VPN 与基于 Linux 的客户端的连接故障
<a name="linux-troubleshooting"></a>

以下部分包含有关使用基于 Linux 客户端时可能遇到的日志记录和问题的信息。请确保您正在运行这些客户端的最新版本。

**Topics**
+ [AWS 提供的客户端事件日志](#aws-provided-client)
+ [DNS 查询转到默认名称服务器](#aws-client-dns-nameserver)
+ [OpenVPN（命令行）](#open-vpn-command-line)
+ [通过 Network Manager 建立 OpenVPN (GUI)](#open-vpn-network-manager-gui)

## AWS 提供的客户端事件日志
<a name="aws-provided-client"></a>

 AWS 提供的客户端将日志文件和配置文件存储在系统的以下位置：

```
/home/username/.config/AWSVPNClient/
```

 AWS 提供的客户端守护程序进程将日志文件存储在系统的以下位置：

```
/var/log/aws-vpn-client/
```

例如，您可以检查以下日志文件以查找 DNS up/down 脚本中导致连接失败的错误：
+ `/var/log/aws-vpn-client/configure-dns-up.log`
+ `/var/log/aws-vpn-client/configure-dns-down.log`

## DNS 查询转到默认名称服务器
<a name="aws-client-dns-nameserver"></a>

**问题**  
在某些情况下，建立 VPN 连接后，DNS 查询仍会转到默认系统名称服务器，而不是为 ClientVPN 端点配置的名称服务器。

**原因**  
客户端与 **systemd-resolved** 交互，后者是 Linux 系统上提供的一项服务，也是 DNS 管理的核心组件之一。它用于配置从 Client VPN 端点推送的 DNS 服务器。出现问题的原因是 **systemd-resolved** 未为 Client VPN 端点提供的 DNS 服务器设置最高优先级。相反，它将服务器附加到在本地系统上配置的现有 DNS 服务器列表中。因此，原始 DNS 服务器可能仍具有最高优先级，因此可用于解析 DNS 查询。

**解决方案**

1. 在 OpenVPN 配置文件的第一行中添加以下指令，以确保所有 DNS 查询都发送到 VPN 隧道。

   ```
   dhcp-option DOMAIN-ROUTE .
   ```

1. 使用 **systemd-resolved** 提供的存根解析程序。要确保这一点，请通过在系统上运行以下命令将符号链接 `/etc/resolv.conf` 链接到 `/run/systemd/resolve/stub-resolv.conf`。

   ```
   sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
   ```

1. （可选）如果您不想要 **systemd-resolved** 代理 DNS 查询，而是希望查询直接发送到真正的 DNS 名称服务器，则将符号链接 `/etc/resolv.conf` 链接到 `/run/systemd/resolve/resolv.conf`。

   ```
   sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
   ```

   您可能需要执行此步骤以绕过**系统解析的配置，例如 D** NS 应答缓存、每接口 DNS 配置、 DNSSec 强制执行等。当您需要在连接到 VPN 时使用私有记录覆盖公共 DNS 记录时，此选项特别有用。例如，您的私有 VPC 中可能有一个带有 www.example.com 记录的私有 DNS 解析程序，该记录可解析为私有 IP。此选项可用于覆盖 www.example.com 的公共记录，该记录可解析为公有 IP。

## OpenVPN（命令行）
<a name="open-vpn-command-line"></a>

**问题**  
连接无法正常工作，因为 DNS 解析不起作用。

**原因**  
Client VPN 端点上未配置 DNS 服务器，或者客户端软件未遵循该服务器。

**解决方案**  
使用以下步骤检查 DNS 服务器是否已配置并正常工作。

1. 确保日志中存在 DNS 服务器条目。在以下示例中，在最后一行中返回 DNS 服务器 `192.168.0.2`（在 Client VPN 端点中配置）。

   ```
   Mon Apr 15 21:26:55 2019 us=274574 SENT CONTROL [server]: 'PUSH_REQUEST' (status=1)
   WRRMon Apr 15 21:26:55 2019 us=276082 PUSH: Received control message: 'PUSH_REPLY,redirect-gateway def1 bypass-dhcp,dhcp-option DNS 192.168.0.2,route-gateway 10.0.0.97,topology subnet,ping 1,ping-restart 20,auth-token,ifconfig 10.0.0.98 255.255.255.224,peer-id 0
   ```

   如果未指定 DNS 服务器，请要求 Client VPN 管理员修改 Client VPN 端点，并确保已为 Client VPN 端点指定了 DNS 服务器（例如 VPC DNS 服务器）。有关更多信息，请参阅 *AWS Client VPN 管理员指南*中的[ Client VPN 端点](https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/cvpn-working-endpoints.html)。

1. 通过运行以下命令确保已安装 `resolvconf` 软件包。

   ```
   sudo apt list resolvconf
   ```

   输出应返回以下内容。

   ```
   Listing... Done
   resolvconf/bionic-updates,now 1.79ubuntu10.18.04.3 all [installed]
   ```

   如果未安装，请使用以下命令进行安装。

   ```
   sudo apt install resolvconf
   ```

1. 在文本编辑器中打开 Client VPN 配置文件（.ovpn 文件）并添加以下行。

   ```
   script-security 2
   up /etc/openvpn/update-resolv-conf
   down /etc/openvpn/update-resolv-conf
   ```

   检查日志以验证是否已调用 `resolvconf` 脚本。日志应包含类似于以下内容的行。

   ```
   Mon Apr 15 21:33:52 2019 us=795388 /etc/openvpn/update-resolv-conf tun0 1500 1552 10.0.0.98 255.255.255.224 init
   dhcp-option DNS 192.168.0.2
   ```

## 通过 Network Manager 建立 OpenVPN (GUI)
<a name="open-vpn-network-manager-gui"></a>

**问题**  
使用 Network Manager OpenVPN 客户端时，连接失败并显示以下错误。

```
Apr 15 17:11:07  OpenVPN 2.4.4 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Sep  5 2018
Apr 15 17:11:07  library versions: OpenSSL 1.1.0g  2 Nov 2017, LZO 2.08
Apr 15 17:11:07  RESOLVE: Cannot resolve host address: cvpn-endpoint-1234.prod.clientvpn.us-east-1.amazonaws.com:443 (Name or service not known)
Apr 15 17:11:07  RESOLVE: Cannot resolve host
Apr 15 17:11:07  Could not determine IPv4/IPv6 protocol
```

**原因**  
未遵守 `remote-random-hostname` 标志，并且客户端无法使用 `network-manager-gnome` 软件包进行连接。

**解决方案**  
请参阅 *AWS Client VPN 管理员指南*中的[无法解析客户端 VPN 终端节点 DNS 名称](https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/troubleshooting.html#resolve-host-name)的解决方案。