![在 BIND 文件中为 2 个 A 记录/服务器配置类似前缀的正确方法?](https://linux22.com/image/670144/%E5%9C%A8%20BIND%20%E6%96%87%E4%BB%B6%E4%B8%AD%E4%B8%BA%202%20%E4%B8%AA%20A%20%E8%AE%B0%E5%BD%95%2F%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E7%B1%BB%E4%BC%BC%E5%89%8D%E7%BC%80%E7%9A%84%E6%AD%A3%E7%A1%AE%E6%96%B9%E6%B3%95%EF%BC%9F.png)
我的域名提供商的配置工具似乎不支持我尝试做的事情,并且我不确定下面的正确 BIND 语法 - 任何指示都值得赞赏!
我有单独的物理生产服务器和登台服务器,我希望 domain.org 指向生产,staging.domain.org 指向登台服务器 + 每个服务器都有 m/www/api 前缀。
以下是我认为我在 domain.org 的区域文件中需要的内容:
@ 10800 IN A $production-IP
staging 10800 IN A $staging-IP
api 10800 IN CNAME domain.org
api 10800 IN CNAME staging.domain.org.
m 10800 IN CNAME domain.org.
m 10800 IN CNAME staging.domain.org.
www 10800 IN CNAME domain.org.
www 10800 IN CNAME staging.domain.org.
但我想知道这对于 BIND 来说是否仍然不明确或者这些只是一堆重复的记录?
谢谢!
答案1
所有不以 结尾的名称.
均符合当前域设置。如果这是domain.org
您建议的配置,则将如下所示:
domain.org 10800 IN A $production-IP
staging.domain.org 10800 IN A $staging-IP
api.domain.org 10800 IN CNAME domain.org.domain.org.
api.domain.org 10800 IN CNAME staging.domain.org.
m.domain.org 10800 IN CNAME domain.org.
m.domain.org 10800 IN CNAME staging.domain.org.
www.domain.org 10800 IN CNAME domain.org.
www.domain.org 10800 IN CNAME staging.domain.org.
我怀疑这不是你想要的。你可以尝试以下任一方法,但都不能真正为你节省太多时间:
选项1
domain.org 10800 IN A $production-IP
staging.domain.org 10800 IN A $staging-IP
api 10800 IN CNAME domain.org.
m 10800 IN CNAME domain.org.
www 10800 IN CNAME domain.org.
api.staging 10800 IN CNAME staging.domain.org.
m.staging 10800 IN CNAME staging.domain.org.
www.staging 10800 IN CNAME staging.domain.org.
选项 2
$ORIGIN domain.org.
@ 10800 IN A $production-IP
api 10800 IN CNAME domain.org.
m 10800 IN CNAME domain.org.
www 10800 IN CNAME domain.org.
$ORIGIN staging.domain.org.
@ 10800 IN A $staging-IP
api 10800 IN CNAME staging.domain.org.
m 10800 IN CNAME staging.domain.org.
www 10800 IN CNAME staging.domain.org.
答案2
恕我直言,你的语法不正确......这是正确的语法:
@ 10800 IN A $production-IP
staging 10800 IN A $staging-IP
api 10800 IN CNAME domain.org
api.staging 10800 IN CNAME staging.domain.org.
m 10800 IN CNAME domain.org.
m.staging 10800 IN CNAME staging.domain.org.
www 10800 IN CNAME domain.org.
www.staging 10800 IN CNAME staging.domain.org.
(您可以看到,您两次定义了 api、m 和 www,它们指向不同的地方......当您阅读这些语法时,api 本身——而不是它后面的点,实际上读取的是 api.mydomain.org......当您有 api.staging——而不是最后的点时,您“说”的是 api.staging.mydomain.org。)
另外...您的 TTL 为 3 小时(10800...秒;)在“过去”这是没问题的...在我的 DNS 服务器中我使用的时间不超过 30 分钟,服务器的负载也不会太大:)
干杯!
马科斯
答案3
您需要不同的左侧标签来支持生产和暂存的前缀名称。正如所写,无法区分m
这两者,因为您为m.domain.org
等创建了两个条目。
最简单的方法是使用$ORIGIN
两次指令,结合@
引用当前来源:
$TTL 10800 ; to avoid repetition
$ORIGIN domain.org.
@ IN A $production-IP
api IN CNAME @
m IN CNAME @
www IN CNAME @
$ORIGIN staging ; NB - implicitly adds current $ORIGIN
@ IN A $staging-IP
api IN CNAME @
m IN CNAME @
www IN CNAME @