

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 對使用 Linux 型用戶端的 AWS Client VPN 連線進行故障診斷
<a name="linux-troubleshooting"></a>

以下各節針對記錄和您使用 Linux 用戶端時可能遇到的問題提供了相關資訊。請確定您執行的是這些用戶端的最新版本。

**Topics**
+ [AWS 提供的用戶端事件日誌](#aws-provided-client)
+ [DNS 查詢會移至預設的 nameserver](#aws-client-dns-nameserver)
+ [OpenVPN (命令列)](#open-vpn-command-line)
+ [透過網路管理員的 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 上/下指令碼中尋找導致連線失敗的錯誤：
+ `/var/log/aws-vpn-client/configure-dns-up.log`
+ `/var/log/aws-vpn-client/configure-dns-down.log`

## DNS 查詢會移至預設的 nameserver
<a name="aws-client-dns-nameserver"></a>

**問題**  
在某些情況下，建立 VPN 連線之後，DNS 查詢仍會前往預設的系統名稱伺服器，而不是針對 ClientVPN 端點設定的名稱伺服器。

**原因**  
用戶端會與 **systemd-resolved** 互動，這是 Linux 系統上提供的服務，作為 DNS 管理的中心部分。其用途為設定從 ClientVPN 端點推送的 DNS 伺服器。發生問題的原因在於 **systemd-resolved** 不會為 ClientVPN 端點所提供的 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
   ```

   建議您執行此程序，以便針對諸如 DNS 回應快取、個別介面 DNS 設定、DNSec 強制等作業略過 **systemd-resolved** 組態。當您需要在連線至 VPN 時使用私有記錄覆寫公有 DNS 記錄時，此選項特別有用。例如，您的私有 VPC 中可能有一個私有 DNS 解析程式，其中包含可解析為私有 IP 的 www.example.com 記錄。此選項可用來覆寫可解析為公有 IP 的 www.example.com 公有記錄。

## 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
   ```

## 透過網路管理員的 OpenVPN (GUI)
<a name="open-vpn-network-manager-gui"></a>

**問題**  
使用網路管理員 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 管理員指南*》中[無法解析 Client VPN 端點 DNS 名稱](https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/troubleshooting.html#resolve-host-name)的解決方案。