当我的 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 属性( ),它就可以正常工作。
我的问题是:
- 我的假设正确吗?我真的不明白为什么域 CodeArtifact 没有得到解析,但
codeartifact.eu-central-1.amazonaws.com
反而得到了解析。 - 当在 Wireguard 配置中设置 DNS 并且 VPN 已打开时,如何成功访问 CodeArtifact?我需要 DNS 属性位于我的 Wireguard 配置中,因为我的 VPC 中有一些需要解析的内部主机名。