绕过 GCP DNS 区域

绕过 GCP DNS 区域

我在 GCP 中有一些服务器,它们在私有 DNS 区域中使用私有 DNS 服务器(它们使用领事)。

为了解析 DNS,我使用了systemd-resolved,我的resolv.conf是到的软链接/run/systemd/resolve/stub-resolv.conf,其内容是:

nameserver 127.0.0.53
options edns0
search c.guardicore-guardicore-mgmt.internal google.internal

所以这意味着所有 DNS 请求都会转发到 systemd-resolved 守护进程。此守护进程的配置如下所示(输出systemd-resolve --status

Global
     DNS Servers: 127.0.0.1 # (consul)
                  169.254.169.254  # (google's DNS)

发生的事情是,当我的服务尝试解析 DNS 记录时,它们会查询systemd-resolved,然后由 Google 的 DNS 服务器获取答案,然后该答案被缓存在中systemd-resolve。Google 的 DNS 不知道这个私有 DNS,因此它返回NXDOMAIN答案。

有没有办法绕过 Google 的 DNS?我希望请求只通过 consul。

我试图更改文件的内容resolv.conf,但它一直被 GCP 代理所覆盖。

答案1

首先进行测试。您是否尝试过消除缓存 DNS,即注释掉 Google DNS 服务器,这样如果本地 DNS 服务不知道 IP/名称,它就不会尝试在该范围之外查找;您也可以检查 /etc/resolv.conf 以显示

user@machine ~#: cat /etc/resolv.conf
order hosts bind

然后,您可以在 hosts 文件中添加内容,这样它会首先被检查(根据 resolv.conf 设置)并完全绕过 Google 的 DNS。

user@machine ~#: cat /etc/hosts
127.0.0.1 localhost.localdomain localhost consul consul.local
::1 localhost6.localdomain6 localhost6
192.168.1.100 node0 node0.local
192.168.1.101 node1 node1.local
192.168.1.102 node2 node2.local

最后,如果完全必要的话,您可以安装 BIND 并创建两个区域(consul.local 和 reverse.local),这样您就可以拥有完整的权威 DNS 服务并对每个查询都有 AUTH 响应)可以找到一个很好的例子:这里

如果这对您有用或者缺少了某些内容,请告诉我,我会尝试深入挖掘以便给您更好的答案:):)

问候

-JP

相关内容