用于循环路由的 BIND9 DNS

用于循环路由的 BIND9 DNS

我正在尝试在测试环境中设置名称服务器,以使用简单的循环方法将流量路由到两个不同的 OpenStack Swift 代理服务器。我尝试使用 BIND9 来实现这一点,但在正确解析 IP 时遇到了问题。我通过互联网研究反复试验才解决了这个问题,因此我对 BIND 的理解可能存在差距。

所有服务器都是 Ubuntu 11.04 服务器镜像

我已经更新了/etc/resolv.conf在当前名称服务器行上方添加一个带有网关盒 IP 地址的名称服务器行。

命名的.本地.conf

zone "mygateway.com" {
    type master;
    file "mygateway.com.db";
};
zone "183.9.15.in-addr.arpa" {
    type master;
    file "rev.183.9.15.in-addr.arpa";
};

mygateway.com.db文件:

; BIND data file for local loopback interface
;
$TTL    499
@   IN  SOA ns admin (
             201006     ; Serial
             604800     ; Refresh
              86400     ; Retry
            2419200     ; Expire
             604800 )   ; Negative Cache TTL
;
@   IN  NS  ns1
ns1 IN  A   15.9.183.217
gw.mygateway.com    IN  A   15.9.183.217
        TXT "Swift Gateway"
www IN  A   15.9.183.223    ; IP address of server1
www IN  A   15.9.183.216    ; IP address of server2

rev.183.9.15.in-addr.arpa文件:

;
; BIND data file for local loopback interface
;
$TTL    499
@   IN  SOA ns1.mygateway.com admin.mygateway.com (
             201007     ; Serial
             604800     ; Refresh
              86400     ; Retry
            2419200     ; Expire
             604800 )   ; Negative Cache TTL
;
@   IN  NS  ns1
ns1 IN  A   15.9.183.217
217 IN  PTR mygateway.com
www IN  A   15.9.183.223
www IN  A   15.9.183.216

dig 输出为:

$ dig -x 15.9.183.217

; <<>> DiG 9.7.3 <<>> -x 15.9.183.217
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9011
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;217.183.9.15.in-addr.arpa. IN  PTR

;; ANSWER SECTION:
217.183.9.15.in-addr.arpa. 499  IN  PTR mygateway.com.183.9.15.in-addr.arpa.

;; AUTHORITY SECTION:
183.9.15.in-addr.arpa.  499 IN  NS  ns1.183.9.15.in-addr.arpa.

;; ADDITIONAL SECTION:
ns1.183.9.15.in-addr.arpa. 499  IN  A   15.9.183.217

;; Query time: 0 msec
;; SERVER: 15.9.183.217#53(15.9.183.217)
;; WHEN: Wed Jul 20 01:30:34 2011
;; MSG SIZE  rcvd: 105

我正在运行swauth-prep命令,它将网关 http 作为参数来访问 REST api,例如(代理服务器上为 https 配置了 8080):

swauth-prep -K mykey -A https://15.9.183.217:8080/auth

对于循环分布来说,这个配置看起来正确吗?

有什么方法可以验证循环是否正常工作?(通过 dig 或其他命令行操作)

答案1

您的正向区域对于 DNS 循环 (一个主机名,两个地址) 是正确的。您可以通过运行 来确认 DNS 服务器是否返回了两个记录dig www.mygateway.com。您应该会收到两个 A 记录。

你的反向区域不是正确配置了循环 DNS。您在此处创建的是 www.183.9.15.in-addr.arpa 的条目,这两个条目都会被返回,并且客户端的解析器库会挑选一个。这绝对不是您想要的。
您可能想要的是这样的记录:

216    IN   PTR www.mygateway.com.
223    IN   PTR www.mygateway.com.

这将确保 15.9.183.216 和 15.9.183.223 的反向 DNS 查找返回“www.mygateway.com”(因此与正向A记录匹配)。

请记住,循环 DNS 不能保证均匀的负载分配:使用哪条记录的选择由客户解析器库,并且可以随机决定,通过首先接收哪个记录,通过最后接收哪个记录,或者一些醉酒的程序员在破解解析器库时想出的任何其他方法。

DNS 轮询成本低且相当有效,但如果您需要良好的负载平衡,您可能需要投资负载平衡硬件(或软件 -普法HAProxy, ETC。)。


必须插入:你的问题和你上面犯的一些错误意味着对一些基本 DNS 概念存在根本性的误解。我强烈建议拿起一份DNS 和 BIND(电子版或从您当地的书店购买)并通读它 - 至少第 1、5 和 6 章,以及在您的情况下第 10 章的相关部分。

这样做所节省的时间将远远超过书的价格。

相关内容