禁用 rsyslog 反向 dns 解析可彻底消除日志接收对内网 dns 的依赖,防止因 dns 延迟或宕机导致阻塞、丢日志或进程假死;需配置 $preservefqdn off、使用 %fromhost-ip% 模板、禁用 dns 相关模块选项,并通过停 dns 服务和抓包验证生效。

直接禁用 rsyslog 对远程日志源的 DNS 反向解析,能彻底切断日志接收环节对内网 DNS 的依赖,防止 DNS 响应慢或宕机时导致 rsyslog 阻塞、丢日志甚至进程假死。关键不是“不查 DNS”,而是让 rsyslog 放弃尝试解析发送端 IP 对应的主机名(即 PTR 查询),改用原始 IP 记录。
关闭 $PreserveFQDN 并显式禁用反向解析
rsyslog 默认在接收日志时,会对来源 IP 执行反向 DNS 查询(PTR),若 DNS 不可用,该操作会超时阻塞处理线程。需在服务端配置中明确禁止:
- 在 /etc/rsyslog.d/ 下新建或编辑配置文件(如 99-no-dns.conf),加入以下两行:
$ActionFileDefaultTemplate RSYSLOG_SyslogProtocol23Format
第一行确保 rsyslog 不尝试将 IP 转为 FQDN;第二行启用新版格式模板,其默认行为已跳过反向解析,比传统格式更可靠。
一款AI数据处理工具,主要用于用于查询 Massive 市场数据端点的 Bash CLI 封装和 OpenClaw 技能,适用于 Codex 或 OpenClaw 代理从 shell 调用,适合需要提升相关任务效率的用户。
使用 %fromhost-ip% 替代 %hostname% 模板变量
所有日志写入规则中,避免使用 %hostname% 或 %fromhost% —— 它们会触发 DNS 查询。改用 %fromhost-ip%,它始终输出原始 IPv4/IPv6 地址,无解析开销:
- 例如,将原规则:*.* /var/log/remote/%HOSTNAME%/app.log
- 改为:template(name="ByIP" type="string" string="/var/log/remote/%fromhost-ip%/app.log")
*.* ?ByIP
确认 imtcp/imudp 模块不启用 DNS 相关选项
现代 rsyslog(v8+)默认不开启反向解析,但仍需检查是否误启用了旧参数:
- 确保配置中没有 $ModLoad imtcp 后跟 $InputTCPServerRunDNSLookup on(已废弃)或类似指令
- 若使用 imudp,无需额外设置;imtcp 在 v8.2000+ 中默认关闭 DNS 查找,无需加 -x 参数(该参数仅适用于极老版本 syslogd)
- 验证当前加载模块:运行 rsyslogd -N1 检查配置语法,无 “DNS” 相关警告即表示未启用
验证与兜底加固
配置生效后,需快速验证是否真正绕过 DNS:
- 临时停掉本机及内网 DNS 服务(如 systemctl stop named 或断开 DNS 服务器网络)
- 从另一台机器用 logger -n -P 514 -T "test no-dns" 发送 TCP 日志(-n 表示不经过本地 rsyslog,直连远端)
- 检查服务端 /var/log/remote/ 下是否按 IP(如 192.168.5.100/)生成目录并写入日志,且无延迟
- 抓包确认:执行 tcpdump -i any port 514 and src host 192.168.5.100 -c 2,应立刻捕获到数据包,无 DNS 查询流量










