跳至內容

DNS 如何與我的 AWS Client VPN 端點搭配使用?

4 分的閱讀內容
0

我打算設定一個 AWS Client VPN 端點。我需要指定終端使用者用來解析網域名稱的 DNS 伺服器。

解決方法

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

在建立新的 Client VPN 端點時,請指定 DNS 伺服器 IP 位址。使用 AWS 管理主控台create-client-vpn-endpoint AWS CLI 命令或 CreateClientVpnEndpoint API 作業在「DNS 伺服器 IP 位址」參數中指定 IP 位址。使用主控台、modify-client-vpn-endpoint 命令或 ModifyClientVpnEndpoint API 作業來變更現有端點。

設定「DNS 伺服器 IP 位址」參數

為了實現高可用性,請指定兩個 DNS 伺服器 IP 位址。如果主要 DNS 伺服器無法連線,用戶端會將查詢重新傳送給次要 DNS 伺服器。

**注意:**如果主要 DNS 伺服器以 SERVFAIL 回應,則 DNS 請求不會再次傳送至次要 DNS 伺服器。

確認最終使用者在使用者連線到 Client VPN 端點之後,可以連線到兩部指定的 DNS 伺服器。如果無法連上 DNS 伺服器,則 DNS 請求可能會失敗並導致連接問題。

「DNS 伺服器 IP 位址」參數是選用的。如果沒有指定 DNS 伺服器,則會使用在終端使用者裝置上設定的 DNS IP 位址來解析 DNS 查詢。

如果您的 Client VPN DNS 伺服器是 AmazonProvidedDNS 或 Amazon Route 53 Resolver 傳入端點,請考慮下列事項:

  • 您可以解析與 Amazon Virtual Private Cloud (Amazon VPC) 關聯之 Route 53 私有託管區域的資源記錄。
  • 如果已啟用「私有 DNS」,則可從 VPN 介面預約存取的 Amazon RDS 公用主機名稱會解析為私有 IP 位址。對於可從 Amazon VPC 介面端點存取的 AWS 服務端點名稱也是如此。
  • 請確認已針對關聯的 Amazon VPC 啟用「DNS 解析」和「DNS 主機名稱」。

Client VPN 端點使用來源 NAT 連線至關聯 Amazon VPC 中的資源。

依通道類型劃分的 DNS 行為

用戶端裝置建立 Client VPN 通道之後,「DNS 伺服器 IP 位址」參數會套用至全通道或分割的通道:

  • **全通道:**用戶端會為通過 VPN 通道的所有流量新增路由。所有流量 (包括 DNS 查詢) 都會通過通道路由。如果 Amazon VPC 沒有通往 DNS 伺服器的路由,搜尋會失敗。
  • **分割的通道:**用戶端只會新增來自 Client VPN 路由表的路由。若要透過 VPN 路由 DNS 流量,請將 DNS 伺服器 IP 位址的路由新增至 Client VPN 路由表。

以下範例同時適用於 Windows 和 Linux 環境。在 Linux 上,範例假設用戶端使用通用網路管理器。

情況 1: 未指定 DNS 伺服器 IP 位址的全通道

範例 1:

  • 終端使用者用戶端的 IPv4 CIDR: 192.168.0.0/16
  • Client VPN 端點 VPC 的 CIDR: 10.123.0.0/16
  • 本機 DNS 伺服器 IP 位址: 192.168.1.1
  • DNS 伺服器 IP 位址參數已關閉,且未指定 DNS 伺服器 IP 位址

由於未設定「DNS 伺服器 IP 位址」參數,因此終端使用者的主機會使用本機 DNS 伺服器來解析網域名稱。

此 Client VPN 端點以全通道模式設定。為透過 VPN (來自 utun1 的 0/1) 傳送所有流量,用戶端新增了指向虛擬介面卡的路由。但是,DNS 流量不會透過 VPN 傳送,因為端點不會推送 DNS 伺服器組態。用戶端會改為使用本機 DNS 伺服器位址的靜態路由 (en0 上的 192.168.1.1/32)。在本機解析網域名稱之後,應用程式對該解析後 IP 位址的流量會透過 VPN 通道傳輸。

$ cat /etc/resolv.conf | grep nameservernameserver 192.168.1.1
$ netstat -nr -f inet | grep -E 'utun1|192.168.1.1'0/1                192.168.0.1        UGSc           16        0   utun1
192.168.1.1/32     link#4             UCS             1        0     en0
(...)

$ dig amazon.com;; ANSWER SECTION:
amazon.com.        32    IN    A    176.32.98.166
;; SERVER: 192.168.1.1#53(192.168.1.1)
(...)

範例 2:

  • 終端使用者用戶端的 IPv4 CIDR: 192.168.0.0/16
  • Client VPN 端點 VPC 的 CIDR: 10.123.0.0/16
  • 本機 DNS 伺服器設定為公用 IP (8.8.8.8)
  • DNS 伺服器 IP 位址參數已關閉,且未指定 DNS 伺服器 IP 位址

在此範例中,用戶端使用位於 8.8.8.8 的公有 DNS 伺服器。因為在 en0 上沒有 8.8.8.8 的靜態路由,因此 DNS 請求會透過 VPN 通道傳輸。如果 Client VPN 端點無法存取網際網路,則無法連線到 DNS 伺服器,且查詢時間逾時。

$ cat /etc/resolv.conf | grep nameservernameserver 8.8.8.8
$ netstat -nr -f inet | grep -E 'utun1|8.8.8.8'0/1                192.168.0.1      UGSc            5        0   utun1

$ dig amazon.com(...)
;; connection timed out; no servers could be reached

情況 2: 使用「DNS 伺服器 IP 位址」參數的分割通道已啟用

範例

  • 用戶端的 IPv4 CIDR: 192.168.0.0/16
  • Client VPN 端點的 Amazon VPC CIDR: 10.123.0.0/16
  • DNS 伺服器 IP 位址參數已開啟,並設定為 10.10.1.228 和 10.10.0.43 (Route 53 Resolver 的傳入端點)
  • 解析器終端節點位於透過傳輸閘道連接的 Amazon VPC (10.10.0.0/16) 中
  • Amazon VPC 有 Route 53 私有託管區域 (example.local)
  • DNS 解析和 DNS 主機名稱處於作用中

此 Client VPN 以分割通道模式設定。Client VPN 路由表包含:

$ netstat -nr -f inet | grep utun1(...)10.10/16           192.168.0.1        UGSc            2        0   utun1 # Route 53 Resolver inbound endpoints VPC CIDR
10.123/16          192.168.0.1        UGSc            0        0   utun1 # Client VPN VPC CIDR
(...)

在此範例中,「DNS 伺服器 IP 位址」參數已啟用。10.10.1.22810.10.0.43 設定為 DNS 伺服器。在用戶端建立 VPN 通道時,DNS 伺服器參數會推送至終端使用者的主機。

$ cat /etc/resolv.conf | grep nameservernameserver 10.10.1.228 # Primary DNS server nameserver 10.10.0.43 # Secondary DNS server

用戶端機器會發出 DNS 查詢,該查詢會透過 VPN 通道傳送到 Client VPN VPC。然後,DNS 請求會透過傳輸閘道轉送至 Route 53 Resolver 傳入端點。將網域名稱解析為 IP 位址後,應用程式流量也會透過 VPN 通道傳輸。只要解析的目的地 IP 位址與 Client VPN 端點路由表中的路由相符,此流程就會繼續。

透過此組態,終端使用者可以使用標準 DNS 解析來解析外部網域名稱。它還允許解析與包含 Route 53 Resolver 傳入端點之 Amazon VPC 相關聯私有託管區域中的記錄。

$ dig amazon.com;; ANSWER SECTION:amazon.com.        8    IN    A    176.32.103.205
;; SERVER: 10.10.1.228#53(10.10.1.228)
(...)

$ dig test.example.local # Route 53 private hosted zone record ;; ANSWER SECTION:
test.example.local. 10 IN A 10.123.2.1
;; SERVER: 10.10.1.228#53(10.10.1.228)
(...)

$ dig ec2.ap-southeast-2.amazonaws.com # VPC interface endpoint to EC2 service in Route 53 Resolver VPC;; ANSWER SECTION:
ec2.ap-southeast-2.amazonaws.com. 60 IN    A    10.10.0.33
;; SERVER: 10.10.1.228#53(10.10.1.228)
(...)

$ dig ec2-13-211-254-134.ap-southeast-2.compute.amazonaws.com # EC2 instance public DNS hostname running in Route 53 Resolver VPC;; ANSWER SECTION:
ec2-13-211-254-134.ap-southeast-2.compute.amazonaws.com. 20 IN A 10.10.1.11
;; SERVER: 10.10.1.228#53(10.10.1.228)
(...)