我正在尝试为 VPC 网络设置本地 DNS 转发器,以使用运行 DNS 服务器的 LDAP 控制器。我有几个 GCP 项目,它们应该能够使用 DNS 名称通过已构建的 VPN 隧道相互通信。我已经在 GCP 上激活了 Cloud DNS,创建了 DNS 服务器策略以将请求转发到内部 DNS 服务器,并将此策略分配给我的自定义网络设置,但 GCE VM 仍然无法解析主机。但如果我在 VM 上编辑 /etc/resolv.conf 文件并将名称服务器选项放在 GCP 元数据服务器 (169.254.169.254) 之前 - 一切都运行正常。这种解决方案并不可取,因为在大量 VM 的情况下,我需要分别为每个 VM 部署这些更改。我还尝试为内部域部署转发规则 - 结果是一样的。根据 GCP DNS“操作方法”,您可以使用下一个命令来检查所有网络的 DNS 解析器设置:
gcloud compute address list \ --filter="purpose=DNS_RESOLVER" \ --format='csv[no-heading](address, subnetwork)' .... 192.168.14.4,cloud-vpn-14 .... 此 IP 由“dns-forwarder-....”保留,我能够使用 dig test.1.com 发出请求,但它不会将查询转发到 DNS 转发策略使用的 DNS 服务器。
所以我的问题是如何克服 /etc/resolv.conf 文件的手动覆盖?或者如何使 DNS 转发正常工作?
答案1
我设置了,但没有指定内部 ip DNS 服务器。
我进行了实验并设法发现了以下内容:为了成功工作,--forwarding-targets
可以只添加外部 DNS 服务器的 IP,而不能添加内部 DNS 服务器的 IP。因此,为了使此规则起作用,您需要将 nat 重定向 53 udp 端口从公司网络的外部 IP 重定向到 DNS 服务器的内部 IP。并允许对 35.199.192.0/19 范围的 IP 进行此重定向,google 使用该范围来代理 DNS 查询(文档https://cloud.google.com/dns/zones/#creating-forwarding-zones),但在我的实验过程中,也很明显需要添加 172.217.0.0/16 的范围。
满足这些条件后,一切都会开始顺利运行。
例子:
gcloud beta dns managed-zones create example-forwarding-zone \
--dns-name="cluster.example.com" \
--description="A zone" \
--networks="default,my-network" \
--visibility=private \
--forwarding-targets="ext_ip_of_your_corporate_network"
此后解析主机test.cluster.example.com
就开始工作。