DNS 如何与我的 AWS Client VPN 端点配合使用?

4 分钟阅读
0

我正在创建一个 AWS Client VPN 端点。我需要指定 DNS 服务器,让我的最终用户只能向我指定的 DNS 服务器发起域名解析查询。

解决方法

**注意:**如果在运行 AWS 命令行界面(AWS CLI)命令时收到错误,请确保您使用的是最新的 AWS CLI 版本

创建新的 Client VPN 端点时,请指定 DNS 服务器 IP 地址。使用 AWS 管理控制台create-client-vpn-endpoint AWS CLI 命令或 CreateClientVpnEndpoint API 在“DNS Server IP address”参数中指定 IP 地址。或者,修改现有的 Client VPN 端点。使用 AWS 管理控制台、modify-client-vpn-endpoint AWS CLI 命令或 ModifyClientVpnEndpoint API 修改“DNS Server IP address”。

配置“DNS Server IP address”参数

要实现高可用性,最佳做法是指定两个 DNS 服务器。如果主要 DNS 服务器无法访问,最终用户设备会将查询重新发送到辅助 DNS 服务器。

**注意:**如果主要 DNS 服务器回复 SERVFAIL,则不会再向辅助 DNS 服务器发送 DNS 请求。

在最终用户连接到 Client VPN 端点后,确认他们能够访问两个指定的 DNS 服务器。如果 DNS 服务器无法访问,那么 DNS 请求可能会失败,并导致连接问题。

“DNS Server IP address”参数是可选项。如果未指定 DNS 服务器,那么将使用在最终用户的设备上配置的 DNS IP 地址来解析 DNS 查询。

如果您的 Client VPN DNS 服务器是 AmazonProvidedDNS 或 Amazon Route 53 Resolver 入站端点,请遵循以下指南:

  • 您可以解析与虚拟私有云(VPC)关联的 Route 53 私有托管区的资源记录。
  • 如果激活“私有 DNS”,则可通过 VPN 接口指派访问的 Amazon RDS 公共主机名将解析为私有 IP 地址。对于可从 VPC 接口端点访问的 AWS 服务端点名称,情况也是如此。
    **注意:**务必为关联的 VPC 激活“DNS 解析”和“DNS 主机名”。

Client VPN 端点使用源 NAT 连接到关联 VPC 中的资源。

客户端设备建立 Client VPN 隧道后,“DNS Server IP address”参数将应用于全隧道或拆分隧道:

  • **全隧道:**客户端设备建立此隧道后,会向最终用户设备的路由表中添加一个允许所有流量通过此 VPN 隧道的路由。这会导致所有流量都通过此 Client VPN 隧道路由。如果关联的 VPC 没有到达 DNS 服务器的路由,则查找失败。
  • **拆分隧道:**创建 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 查询。

此 Client VPN 配置为使用全隧道模式。会添加一个指向虚拟适配器的路由,以通过 VPN 发送所有流量(目标 0/1 通过 utun1)。但是,由于未配置“DNS Server IP address”参数,DNS 流量仍无法通过 VPN 传输。客户端和 DNS 服务器之间的 DNS 流量保持在本地。客户端计算机已经有一个到本地 DNS 服务器地址(目标192.168.1.1/32 通过 en0)的首选静态路由,以访问 DNS 解析器。在将域名解析到各自的 IP 地址后,发往已解析 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 地址设置为公有 IP = 8.8.8.8。
  • “DNS Server IP address”参数为关闭。未指定 DNS 服务器 IP 地址。

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

$ 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 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 Resolver 入站端点的 IP 地址,这些入站端点存在於另一个 VPC(10.10.0.0/16)中。IP 地址连接到将 VPC 与中转网关关联的客户端 Client VPN 端点。
  • 关联的 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 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 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)
(...)
AWS 官方
AWS 官方已更新 8 个月前