dnsmasq运行时无需重启动态重载转发规则的方案咨询
dnsmasq 动态重载转发规则可行方案
dnsmasq 本身不支持直接重载普通配置文件内的转发规则,你之前通过普通conf-file引入配置后发送SIGHUP不生效,是因为SIGHUP信号默认不会重新读取普通引入的配置文件,可使用以下两类落地可用的替代方案:
方案1:使用内置--servers-file参数实现规则热加载
该参数是dnsmasq专门为动态加载转发规则设计的配置项,操作步骤如下:
- 启动dnsmasq时新增启动参数
--servers-file=/etc/dnsmasq.d/dynamic-servers.conf - 所有需要动态增删的
server=转发规则全部写入上述指定的独立文件中 - 每次修改完规则文件后,给dnsmasq进程发送
SIGHUP信号即可生效:kill -SIGHUP $(pidof dnsmasq) - 静态配置可继续放在默认
/etc/dnsmasq.conf或/etc/dnsmasq.d/下的其他静态配置文件中,不需要和动态规则混存
方案2:通过DBus接口动态增删规则(无需修改配置文件)
如果需要程序运行时直接调用修改规则、无需操作本地文件,可使用dnsmasq的DBus接口:
- 启动dnsmasq时新增启动参数
--enable-dbus - 新增转发规则命令示例:
dbus-send --system --dest=uk.org.thekelleys.dnsmasq /uk/org/thekelleys/dnsmasq uk.org.thekelleys.dnsmasq.SetServers array:string:"/a1.com/10.23.45.66" array:string:"/a2.com/20.45.24.55"
- 查询当前生效的转发规则命令:
dbus-send --system --dest=uk.org.thekelleys.dnsmasq /uk/org/thekelleys/dnsmasq uk.org.thekelleys.dnsmasq.GetServers
- 优势:规则修改即时生效,不需要发信号、不需要修改本地配置文件,适合高频动态调整规则的场景
以上两个方案均不需要重启dnsmasq进程,不会中断已有DNS查询服务。
内容的提问来源于stack exchange,提问作者Ashok Kumar
相关产品推荐
相关产品推荐

