去年我发现,家里部分手机会向路由器发送大量 DNS 查询。尤其是有人使用短视频 APP 时。
虽然 DNS 服务本身可以正常处理这些请求,但 conntrack 表经常达到数万条记录,影响性能。
NAT 和有状态防火墙需要 conntrack,而局域网的 DNS 流量其实并不需要它。
因此,我通过自定义防火墙规则,针对特定流量禁用 conntrack。以下适用于 OpenWRT 22.03 版本后的 fw4 防火墙。
步骤一:新建规则文件
在 /etc
目录下新建两个文件:
1. notrack_prerouting.nft
|
|
此规则用于禁用进入路由器的 DNS 流量的 conntrack。如果有 IPv6 DNS 服务,可添加类似的 ip6 daddr
规则。
2. notrack_output.nft
|
|
此规则用于禁用回环流量和 DNS 端口返回流量的 conntrack。
步骤二:配置防火墙
在 /etc/config/firewall
文件结尾添加如下内容:
|
|
步骤三:重启防火墙服务
|
|
这样配置后,针对指定流量的 conntrack 功能就会被禁用,有效优化路由器在大量 DNS 请求下的性能。