如果名称未解析,如何将请求转发到下一个解析器
How to forward request to next resolver if name not resolved
我的 coredns 配置中有多个上游解析器,例如:
foo.com {
forward . XX.XX.XX.XX YY.YY.YY.YY ZZ.ZZ.ZZ.ZZ
}
我想将请求转发给那些服务器,但只有一个知道如何解决特定查询。 (例如:只有ZZ知道如何解析a.foo.com
)
如果第一个上游不知道如何解决查询,我如何将请求转发给下一个上游?
不幸的是 forward
本身不提供 fallthrough
机制,所以在这种情况下你必须使用其他东西。一种这样的解决方案是使用备用插件 (https://coredns.io/explugins/alternate)。由自己的coredns团队维护
通过使用插件,您的配置:
foo.com {
forward . XX.XX.XX.XX YY.YY.YY.YY ZZ.ZZ.ZZ.ZZ
}
会变成这样的东西:
foo.com {
forward . XX.XX.XX.XX
alternate NXDOMAIN,SERVFAIL,REFUSED . YY.YY.YY.YY
alternate NXDOMAIN,SERVFAIL,REFUSED . ZZ.ZZ.ZZ.ZZ
}
请注意,顺序总是会被遵循,因此第一个节点的压力会比其他节点大。如果您不想那样,那么您可能需要编写自己的插件。
要使用这个插件或者不要忘记使用 plugin.cfg
中包含的插件重新编译 coredns - before forward.
如果您在从源代码构建它时遇到问题,我写了一个脚本:
git clone https://github.com/coredns/coredns
cd coredns/plugin
git clone https://github.com/coredns/alternate
cd ..
sed -i "s/^require/replace github.com\/coredns\/coredns\/plugin\/alternate \=\> ${PWD//\//\\/}\/plugin\/alternate\n\nrequire/" go.mod
sed -i s/forward:forward/alternate:alternate\nforward:forward/ plugin.cfg
make
cd ..
基本上它会下载 coredns,然后切换到它的子文件夹之一。第一个 sed
是告诉 coredns 在构建中包含此插件的必要步骤,第二个 sed
指示 go
使用您刚刚下载的本地文件夹替代而不是查找 github。在 运行 make
之前,我建议从 plugin.cfg
中删除您知道不会使用的其他插件,例如 etcd、kubernetes 等。
我的 coredns 配置中有多个上游解析器,例如:
foo.com {
forward . XX.XX.XX.XX YY.YY.YY.YY ZZ.ZZ.ZZ.ZZ
}
我想将请求转发给那些服务器,但只有一个知道如何解决特定查询。 (例如:只有ZZ知道如何解析a.foo.com
)
如果第一个上游不知道如何解决查询,我如何将请求转发给下一个上游?
不幸的是 forward
本身不提供 fallthrough
机制,所以在这种情况下你必须使用其他东西。一种这样的解决方案是使用备用插件 (https://coredns.io/explugins/alternate)。由自己的coredns团队维护
通过使用插件,您的配置:
foo.com {
forward . XX.XX.XX.XX YY.YY.YY.YY ZZ.ZZ.ZZ.ZZ
}
会变成这样的东西:
foo.com {
forward . XX.XX.XX.XX
alternate NXDOMAIN,SERVFAIL,REFUSED . YY.YY.YY.YY
alternate NXDOMAIN,SERVFAIL,REFUSED . ZZ.ZZ.ZZ.ZZ
}
请注意,顺序总是会被遵循,因此第一个节点的压力会比其他节点大。如果您不想那样,那么您可能需要编写自己的插件。
要使用这个插件或者不要忘记使用 plugin.cfg
中包含的插件重新编译 coredns - before forward.
如果您在从源代码构建它时遇到问题,我写了一个脚本:
git clone https://github.com/coredns/coredns
cd coredns/plugin
git clone https://github.com/coredns/alternate
cd ..
sed -i "s/^require/replace github.com\/coredns\/coredns\/plugin\/alternate \=\> ${PWD//\//\\/}\/plugin\/alternate\n\nrequire/" go.mod
sed -i s/forward:forward/alternate:alternate\nforward:forward/ plugin.cfg
make
cd ..
基本上它会下载 coredns,然后切换到它的子文件夹之一。第一个 sed
是告诉 coredns 在构建中包含此插件的必要步骤,第二个 sed
指示 go
使用您刚刚下载的本地文件夹替代而不是查找 github。在 运行 make
之前,我建议从 plugin.cfg
中删除您知道不会使用的其他插件,例如 etcd、kubernetes 等。