DNS 如何与我的 AWS Client VPN 终端节点协同工作?

上次更新日期:2020 年 4 月 10 日

我正在创建 AWS Client VPN 终端节点。我需要指定我的最终用户(已连接到 AWS Client VPN 的客户端)应查询域名解析的 DNS 服务器。DNS 如何与我的 AWS Client VPN 终端节点协同工作?

解析

您可以在创建新的 Client VPN 终端节点时指定 DNS 服务器 IP 地址。要执行此操作,请使用 AWS 管理控制台AWS 命令行接口 (AWS CLI)API 在“DNS Server IP address”参数中指定此 IP 地址。

您还可以通过修改现有 Client VPN 终端节点来指定 DNS 服务器 IP 地址。要执行此操作,请使用 AWS 管理控制台AWS CLIAPI 修改“DNS Server IP address”参数。

配置“DNS Server IP address”参数时的注意事项

  • 要实现高可用性,最佳做法是指定两个 DNS 服务器。如果主要 DNS 服务器无法访问,最终用户设备会将查询重新发送到辅助 DNS 服务器。
    注意:如果主要 DNS 服务器回复“SERVFAIL”,则不会再向辅助 DNS 服务器发送 DNS 请求。
  • 在最终用户连接到 Client VPN 终端节点后,确认他们能够访问两个指定的 DNS 服务器。DNS 根据“DNS Server IP address”参数执行查找。如果 DNS 服务器无法访问,那么 DNS 请求可能会失败,并导致连接问题。
  • “DNS Server IP address”参数是可选项。如果未指定 DNS 服务器,那么在最终用户的设备上配置的 DNS IP 地址用于解析 DNS 查询。
  • 将 AmazonProvidedDNS(或 Route 53 解析程序入站终端节点)用作 Client VPN DNS 服务器时:
    • 您可以解析与 VPC 关联的 Amazon Route 53 私有托管区域的资源记录。
    • Amazon Relational Database Service (Amazon RDS) 公有主机名和可从 VPC 接口终端节点(启用“私有 DNS”)访问的 AWS 服务终端节点名称解析到一个私有 IP 地址。
      注意:确保为关联的 VPC 启用了“DNS 解析”和“DNS 主机名”。
  • 请记住,Client VPN 终端节点使用源 NAT 连接到关联 VPC 中的资源。
  • 在客户端设备建立 Client VPN 隧道后,将应用“DNS Server IP address”参数。无论是全隧道,还是拆分隧道,都会应用此参数。
    • 全隧道:客户端设备建立此隧道后,会向最终用户设备的路由表中添加一个允许所有流量通过此 VPN 隧道的路由。这会导致所有流量都通过此客户端 VPN 隧道路由。如果 Client VPN 的关联 VPC(子网)和 Client VPN 路由表没有适当的路由到达所配置的 DNS 服务器,DNS 查询可能会失败。
    • 拆分隧道:建立 Client VPN 隧道后,只有 Client VPN 路由表中已有的路由才能被添加到最终用户设备的路由表中。如果您可以通过 Client VPN 的关联 VPC 访问 DNS 服务器,请确保在 Client VPN 路由表中为 DNS 服务器 IP 地址添加路由。

注意:以下示例说明了 DNS 在几种常见场景下的工作原理。这些示例适用于 Windows 和 Linux 环境。不过,在 Linux 环境中,仅当最终用户的主机使用常规网络设置时,这些示例才按照所述方式发挥作用。

场景 1:全隧道并禁用“DNS Server IP address”参数

示例 1:

  • 最终用户客户端的 IPv4 CIDR = 192.168.0.0/16。
  • Client VPN 终端节点 VPC 的 CIDR = 10.123.0.0/16。
  • 本地 DNS 服务器 IP 地址 = 192.168.1.1。
  • 已禁用“DNS Server IP address”参数(未指定 DNS 服务器 IP 地址)。
  • 由于已禁用“DNS Server IP address”参数,因此,最终用户的主机使用本地 DNS 服务器来解析 DNS 查询。

此客户端 VPN 配置为使用全隧道模式。会添加一个指向虚拟适配器的路由,以通过 VPN 发送所有流量(目标 0/1 通过 utun1)。但是,DNS 流量仍不通过 VPN,因为未配置“DNS Server IP address”参数。客户端和 DNS 服务器之间的 DNS 流量保持在本地。客户端计算机已经有一个到本地 DNS 服务器 IP(目标192.168.1.1/32 通过 en0)的首选静态路由,使本地 DNS 解析程序可访问。在将域名解析到各自的 IP 后,到已解析 IP 的应用程序流量会通过 VPN 隧道传输。

以下是此示例的一个代码段:

$ cat /etc/resolv.conf | grep nameserver
nameserver 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 地址已设置为公有 IP = 8.8.8.8。
  • 已禁用“DNS Server IP address”参数(未指定 DNS 服务器 IP 地址)。

在此场景中,客户端不使用地址为 198.168.1.1 的本地 DNS 服务器,而是将公有 DNS 作为其本地 DNS 服务器 IP 地址(在此示例中为 8.8.8.8)。由于没有使用 en0 的地址 8.8.8.8 的静态路由,因此,前往地址 8.8.8.8 的流量会通过 Client VPN 隧道传输。如果 Client VPN 终端节点未配置为访问互联网,那么,公有 DNS (8.8.8.8) 将无法访问,并且请求查询将超时。

$ cat /etc/resolv.conf | grep nameserver
nameserver 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 Server IP address”参数

在此示例中:

  • 最终用户客户端的 IPv4 CIDR = 192.168.0.0/16。
  • Client VPN 终端节点的 VPC CIDR = 10.123.0.0/16。
  • “DNS Server IP address”参数已启用,并已设置为 10.10.1.228 和 10.10.0.43。这些 IP 地址代表 Route 53 解析程序入站终端节点的 IP 地址,这些入站终端节点存在于通过中转网关连接到已关联 VPC 的 Client VPN 终端节点的其他 VPC (10.10.0.0/16) 中。
  • 关联的 VPC 已启用“DNS 主机名”和“DNS 支持”,并具有关联的 Route 53 私有托管区域 (example.local)。

此 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 Server IP address”参数,并将 10.10.1.22810.10.0.43 配置为 DNS 服务器,因此,当客户端建立 VPN 隧道时,会将这些 DNS 服务器参数推送到最终用户的主机:

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

客户端计算机发出的 DNS 查询会通过此 VPN 隧道发送到 Client VPN VPC。接下来,DNS 请求会被进行源网络地址转换 (NAT),并被通过中转网关转发到 Amazon Route 53 解析程序终端节点。域被解析到 IP 地址后,应用程序流量也会通过建立的 VPN 隧道传输(只要所解析的目标 IP 与 Client VPN 终端节点路由表中的路由匹配)。

使用此配置时,最终用户可以解析:

  • 使用标准 DNS 解析的外部域名。
  • 与 Route 53 解析程序 VPC 关联的私有托管区域的记录。
  • 接口终端节点 DNS 名称和 EC2 公有 DNS 主机名。
$ 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)
(...)

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?