如何为firewalld单独修改D-Bus的默认25秒超时时间?
我太懂你这种头疼的处境了——在跑着90台VM、300个VLAN的oVirt集群里,firewalld处理规则的速度慢到触发了D-Bus的25秒默认超时,firewall-cmd完全没法用,之前改了D-Bus配置还没效果,属实闹心。咱们一步步来搞定这个问题,专门给firewalld调整超时,不影响其他服务。
首先得搞明白:你之前的配置没生效,大概率是因为没找对firewalld对应的D-Bus服务配置文件,或者格式不对。D-Bus的超时配置是可以针对单个服务的,不用改全局设置,这才是最优解。
具体操作步骤:
复制firewalld的D-Bus配置到自定义目录
系统默认的firewalld D-Bus配置在/usr/share/dbus-1/system.d/firewalld.conf,但直接改这个会被系统更新覆盖。咱们先把它复制到/etc/dbus-1/system.d/下,这样自定义的配置不会丢:sudo cp /usr/share/dbus-1/system.d/firewalld.conf /etc/dbus-1/system.d/编辑firewalld的D-Bus配置文件
用你习惯的编辑器打开/etc/dbus-1/system.d/firewalld.conf,在<busconfig>这个根标签里面,添加针对firewalld服务的超时设置。比如要把超时改成60秒(也就是60000毫秒),就加这段:<service name="org.fedoraproject.FirewallD1"> <!-- 把超时设置为60秒,单位是毫秒,可根据实际需求调整 --> <method_call_timeout>60000</method_call_timeout> </service>注意要把这段放在现有配置的
<policy>块外面,或者和其他<service>标签同级的位置,别嵌套错了。重启服务让配置生效
改完配置后,得重启D-Bus和firewalld才能生效:sudo systemctl restart dbus sudo systemctl restart firewalld👉 小提醒:重启dbus可能会暂时影响其他依赖D-Bus的服务,测试环境随便造,生产环境最好挑业务低峰期操作。
验证效果
现在跑个耗时的firewall-cmd命令试试,比如firewall-cmd --list-all-zones,看看还会不会报D-Bus超时的错。要是还是超时,就把method_call_timeout的值调大一点,比如改成120000(120秒)。
为啥之前的配置没效果?
你之前在/etc/dbus-1/system.d/加的自定义conf文件,应该是没正确指定firewalld的服务名org.fedoraproject.FirewallD1,D-Bus根本识别不到这是给firewalld的配置,所以超时还是25秒。
额外小技巧(不推荐全局改)
如果你实在要改全局D-Bus超时(不建议,会影响所有服务),可以编辑/etc/dbus-1/system.conf,找到<default_method_call_timeout>标签,把默认的25000(25秒)改成你要的值,但这是下下策,优先用前面的单独配置方法。
要是操作完还是有问题,去看看D-Bus的日志journalctl -u dbus,里面会有配置错误的提示,帮你排查问题。
备注:内容来源于stack exchange,提问作者Saddam Xussein

