Linux 故障診斷 - AWS Client VPN

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

Linux 故障診斷

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

AWS 提供的客戶

AWS 提供的用戶端會將記錄檔和組態檔儲存在系統上的下列位置:

/home/username/.config/AWSVPNClient/

AWS 提供的用戶端常駐程式處理程序會將記錄檔儲存在系統上的下列位置:

/var/log/aws-vpn-client/username/
問題

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

原因

用戶端會與 systemd-resolved 互動,這是 Linux 系統上提供的服務,作為 DNS 管理的中心部分。其用途為設定從 ClientVPN 端點推送的 DNS 伺服器。發生問題的原因在於 systemd-resolved 不會為 ClientVPN 端點所提供的 DNS 伺服器設定最高優先順序。相反地,它會將伺服器附加至本機系統上所設定的現有 DNS 伺服器清單。因此,原始 DNS 伺服器可能仍然具有最高優先順序,而用於解析 DNS 查詢。

解決方案
  1. 在 OpenVPN 組態檔第一行新增以下指示詞,確保所有 DNS 查詢都傳送至 VPN 通道。

    dhcp-option DOMAIN-ROUTE .
  2. 使用 systemd-resolved 提供的虛設常式解析程式。方法是在系統上執行下列命令,建立 /etc/resolv.conf/run/systemd/resolve/stub-resolv.conf 的符號連結。

    sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
  3. (選用) 如果您不希望 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 (命令列)

問題

因為 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 端點

  2. 請執行下列命令,確定已安裝 resolvconf 套件。

    sudo apt list resolvconf

    輸出應該會傳回以下內容。

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

    如果未安裝,請使用以下命令安裝它。

    sudo apt install resolvconf
  3. 在文字編輯器中開啟 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)

問題

使用網路管理員 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 名稱的解決方案。