使用 Wireguard 时,CodeArtifact 的 DNS 解析无法按预期工作

使用 Wireguard 时,CodeArtifact 的 DNS 解析无法按预期工作

当我的 VPN(Wireguard)打开并尝试访问 AWS CodeArtifact 时,出现以下情况。

我为 Wireguard 设置的 VPN 如下:

[Interface]
PrivateKey = <private_key>
Address = <my_wireguard_ip>
DNS = 169.254.169.253

[Peer]
PublicKey = <public_key>
AllowedIPs = 10.0.0.0/20, 169.254.169.253/32
Endpoint = <ip_endpoint>:<port>

如您所见,我使用 169.254.169.253 的 DNS 服务器来解析我的 VPC 中的内部主机名 (10.0.0.0/20)。例如,我有一个内部负载均衡器主机名,当 VPN 开启时,它可以完美解析:

nslookup ***.elb.eu-central-1.amazonaws.com
Server:         169.254.169.253
Address:        169.254.169.253#53

Non-authoritative answer:
Name:   ***.elb.eu-central-1.amazonaws.com
Address: 10.0.1.164
Name:   ***.elb.eu-central-1.amazonaws.com
Address: 10.0.2.160

当我尝试访问与 Wireguard VPN 实例位于同一区域的 CodeArtifact 域时出现了问题:

$ aws codeartifact list-domains --region eu-central-1
Connect timeout on endpoint URL: "https://codeartifact.eu-central-1.amazonaws.com/v1/domains"

一段时间后,它就会超时。更改区域可以正常工作:

$ aws codeartifact list-domains --region us-east-1                                                                          
{
    "domains": []
}

进一步挖掘后,我发现eu-central-1区域中的我的域 CodeArtifact 主机名尚未被解析:

$ nslookup my_codeartifact_domain-12345678.d.codeartifact.eu-central-1.amazonaws.com
Server:         169.254.169.253
Address:        169.254.169.253#53

** server can't find my_codeartifact_domain-12345678.d.codeartifact.eu-central-1.amazonaws.com: NXDOMAIN

但是,以下问题得到解决:

$ nslookup codeartifact.eu-central-1.amazonaws.com                                                                          
Server:         169.254.169.253
Address:        169.254.169.253#53

Non-authoritative answer:
Name:   codeartifact.eu-central-1.amazonaws.com
Address: 10.0.4.94

如果我更改 DNS 服务器,它会正确解析为公共 IP:

$ nslookup my_codeartifact_domain-12345678.d.codeartifact.eu-central-1.amazonaws.com 8.8.8.8                                         
Server:         8.8.8.8
Address:        8.8.8.8#53

Non-authoritative answer:
Name:   my_codeartifact_domain-12345678.d.codeartifact.eu-central-1.amazonaws.com
Address: <public_ip_1>
Name:   my_codeartifact_domain-12345678.d.codeartifact.eu-central-1.amazonaws.com
Address: <public_ip_2>
Name:   my_codeartifact_domain-12345678.d.codeartifact.eu-central-1.amazonaws.com
Address: <public_ip_3>

我的假设是 DNS 服务器正在尝试内部解析子域 .eu-central-1.amazonaws.com,但由于我的 CodeArtifact 域是公开可用的,因此解析失败。

DNS = 169.254.169.253如果我从 wireguard 配置中删除 DNS 属性( ),它就可以正常工作。

我的问题是:

  1. 我的假设正确吗?我真的不明白为什么域 CodeArtifact 没有得到解析,但codeartifact.eu-central-1.amazonaws.com反而得到了解析。
  2. 当在 Wireguard 配置中设置 DNS 并且 VPN 已打开时,如何成功访问 CodeArtifact?我需要 DNS 属性位于我的 Wireguard 配置中,因为我的 VPC 中有一些需要解析的内部主机名。

相关内容