我正在尝试建立一个实验室来复制我们看到的一个问题,但遇到了问题。设置:在同一台服务器上的不同端口上运行两个 bind 实例。

实例 A:配置了一个简单的 RPZ 策略,该策略阻止 example.com,允许从本地主机和任何主机进行递归查询。[端口 54]

实例 B:配置为使用“仅转发”,实例 B 作为唯一转发器;[端口 55]

测试 1 – 预期结果

使用 dig “dig example.com @127.0.0.1 -p54” 查询实例 A,得到以下内容(正确结果,NXDOMAIN)

; <<>> DiG 9.18.28-0ubuntu0.20.04.1-Ubuntu <<>> example.com @127.0.0.1 -p54
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 52665
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 8300a71b26db4dfe0100000067086bb06e4a20d874d17582 (good)
;; QUESTION SECTION:
;example.com.INA

;; ADDITIONAL SECTION:
rpz.example.com.60INSOAlocalhost. need.to.know.only. 201702121 60 60 432000 60

;; Query time: 4 msec
;; SERVER: 127.0.0.1#54(127.0.0.1) (UDP)
;; WHEN: Fri Oct 11 00:05:04 UTC 2024
;; MSG SIZE  rcvd: 134

实例 A 上的日志显示

11-Oct-2024 00:07:47.061 client @0x7f8b1c1a1318 127.0.0.1#50119: UDP request
11-Oct-2024 00:07:47.061 client @0x7f8b1c1a1318 127.0.0.1#50119: using view '_default'
11-Oct-2024 00:07:47.061 client @0x7f8b1c1a1318 127.0.0.1#50119: request is not signed
11-Oct-2024 00:07:47.061 client @0x7f8b1c1a1318 127.0.0.1#50119: recursion available
11-Oct-2024 00:07:47.061 client @0x7f8b1c1a1318 127.0.0.1#50119 (example.com): query (cache) 'example.com/A/IN' approved
11-Oct-2024 00:07:47.061 client @0x7f8b1c1a1318 127.0.0.1#50119 (example.com): try rpz QNAME rewrite example.com via example.com.rpz.example.com
11-Oct-2024 00:07:47.061 client @0x7f8b1c1a1318 127.0.0.1#50119 (example.com): rpz QNAME NXDOMAIN rewrite example.com/A/IN via example.com.rpz.example.com
11-Oct-2024 00:07:47.061 client @0x7f8b1c1a1318 127.0.0.1#50119 (example.com): reset client

测试 2 – 错误结果
使用 dig“dig example.com @127.0.0.1 -p55”查询实例 B,得到以下内容(错误结果)

; <<>> DiG 9.18.28-0ubuntu0.20.04.1-Ubuntu <<>> example.com @127.0.0.1 -p55
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24269
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 1e0aad6357bd5b840100000067086d59a3953dc8128220a1 (good)
;; QUESTION SECTION:
;example.com.INA

;; ANSWER SECTION:
example.com.1INA93.184.215.14

;; Query time: 4 msec
;; SERVER: 127.0.0.1#55(127.0.0.1) (UDP)
;; WHEN: Fri Oct 11 00:12:09 UTC 2024
;; MSG SIZE  rcvd: 84

实例 A 的日志显示它正在处理查询;但没有使用 RPZ。

11-Oct-2024 00:12:09.757 client @0x7f8b1c1a1318 127.0.0.1#33523: UDP request
11-Oct-2024 00:12:09.757 client @0x7f8b1c1a1318 127.0.0.1#33523: using view '_default'
11-Oct-2024 00:12:09.757 client @0x7f8b1c1a1318 127.0.0.1#33523: request is not signed
11-Oct-2024 00:12:09.757 client @0x7f8b1c1a1318 127.0.0.1#33523: recursion available
11-Oct-2024 00:12:09.757 client @0x7f8b1c1a1318 127.0.0.1#33523 (example.com): query (cache) 'example.com/A/IN' approved
11-Oct-2024 00:12:09.757 client @0x7f8b1c1a1318 127.0.0.1#33523 (example.com): reset client

测试 3 – 故障测试

只是为了彻底性,如果实例 A 被终止,对实例 B 的查询将按 SERVFAL 预期的那样失败,确认实例 B 正在使用实例 A 而没有找到不同的路径。

有人能指出发生了什么事以及如何让实例 A 向实例 B 提供 RPZ 响应吗?

1

  • 也许某些共享资源已损坏。无论如何,我建议您启动几个虚拟机以确保分离,而不是运行 2 个实例。


    – 

0