用于循环路由的 BIND9 DNS

Rob*_*ker 2 domain-name-system bind

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

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

我已将/etc/resolv.conf更新为当前名称服务器行上方的附加名称服务器行,其中包含网关盒的 IP 地址。

named.local.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";
};
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

挖掘输出是:

$ 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
Run Code Online (Sandbox Code Playgroud)

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

swauth-prep -K mykey -A https://15.9.183.217:8080/auth
Run Code Online (Sandbox Code Playgroud)

这个配置对于​​循环分配看起来是否正确?

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

vor*_*aq7 5

您的转发区域适用于 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.
Run Code Online (Sandbox Code Playgroud)

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

请记住,循环 DNS 不能保证均匀的负载分配:要使用哪个记录的选择是由客户端解析器库做出的,并且可能是随机决定的,根据哪个记录最先收到,哪个记录最后收到,或者任何一些醉酒的程序员在拼凑解析器库时想出了另一种方法。

DNS 轮询便宜且相当有效,但如果您需要良好的负载平衡,您可能需要投资负载平衡硬件(或软件 - pfHAProxy等)。


强制性插件:你的问题和你在上面犯的一些错误暗示了对一些基本 DNS 概念的根本误解。我强烈建议您拿起一份DNS 和 BIND(电子版或从您当地的书店)并通读一遍——至少是第 1、5 和 6 章,在您的情况下,请阅读第 10 章的相关部分。

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