如何强制 BIND9 绑定到特定 IP?

如何强制 BIND9 绑定到特定 IP?

这是我的设置:

$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet 10.0.2.0/24 scope global lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever

“lo” 的神奇之处在于,10.0.2.0/24 行实际上创建了大约 250 个可绑定地址。大多数守护进程都可以毫无困难地绑定到这些地址。但是,这在我的 BIND9-config 中不起作用:

listen-on port 53 { 10.0.2.15; };

(我也尝试过不使用“端口 53”)。问题是,对于 BIND 来说,listen-on 就像一个“绑定白名单”,它会匹配它在所有接口上找到的所有 IP。在本例中,它在任何接口上都找不到 10.0.2.15,因此它不会绑定。

有人能推荐一种解决方法吗?我应该指出,这是一个测试设置,我一直在移动东西,所以我更喜欢一个不涉及太多移动部件的解决方案。

答案1

经过一些测试...Bind 似乎无法像您观察到的其他守护进程那样工作。我注意到了 2 个解决方法,第一个是添加一个额外的地址以lo允许 bind 绑定到它

ip addr add 10.0.2.15/32 dev lo

第二个是改变绑定监听的地址10.0.2.0

答案2

作为测试的解决方法,您可以创建一个虚拟接口 lo:1 并为其分配地址 10.0.2.15,然后启动它

答案3

我认为你做不到这一点。事实上loopback interface 回应在配置的子网上的每个 IP 上(即ping 10.0.2.15按预期工作),并不意味着每一个IP可绑定。

例如,尝试绑定到,127.0.0.2看看它是否有效。

我认为唯一的解决办法就是按照@m0ntassar 所说的去做。

相关内容