在企业内网网络治理与信息安全合规审计中,DNS 访问记录(谁在什么时间查询了什么域名、解析结果是什么、来源客户端 IP)是追踪内部资产网络行为、排查合规风险的关键凭证。
本文将结合企业的合规审计需求,基于 Podman 容器化部署 SmartDNS,实现“企业内网私有域名与公网域名分流解析”以及“合规审计日志持久化归档与轮转”。
方案设计架构
整个解析流程基于域名规则进行策略路由:
+--------------------+
| 客户端 DNS 请求 |
+---------+----------+
|
[ SmartDNS 服务 ]
(Podman 容器运行)
|
+-----------------+-----------------+
| |
匹配内网域名列表 未匹配/通用域名
(如 *.corp.local) (如 *.qq.com)
| |
v v
+-----------------+ +-----------------+
| 企业内网权威 DNS | | 国内公共权威 DNS |
| 10.0.0.2 / .3 | | 223.5.5.5 / ... |
+-----------------+ +-----------------+
- 精准分流:企业私有域名(如
*.corp.local)严格路由至内网专用权威 DNS;公开业务域名通过合规公共 DNS 并发测速优选。 - 审计可追溯:记录客户端 IP、查询域名、请求时间及解析结果,日志持久化存储于宿主机
/var/log/smartdns,满足网络安全合规与排查审计需求。 - 隔离与规范:数据缓存独立存储在
/var/lib/smartdns,配置文件存储在/etc/smartdns,便于定期备份与权限加固。
基于容器化部署
第一步:准备配置与域名列表目录
在宿主机上创建专门的目录,用于存放主配置和分流规则列表:
# 创建配置、数据与审计日志目录 sudo mkdir -p /etc/smartdns/conf.d sudo mkdir -p /var/lib/smartdns sudo mkdir -p /var/log/smartdns # 建议加固日志目录权限,避免普通用户篡改审计记录 sudo chmod 750 /var/log/smartdns
第二步:配置企业内网域名分流规则
1. 编写内网专用域名清单
在 /etc/smartdns/conf.d/office-domains.conf 中填入公司内部的专属主域名或二级域名,将其绑定到名为 office 的分组:
# 格式:nameserver /域名/分组名 nameserver /corp.local/office nameserver /internal.example.cn/office nameserver /oa.local/office nameserver /git.local/office
2. 编写 SmartDNS 主配置文件
编辑 /etc/smartdns/smartdns.conf:
# 监听端口 bind [::]:53 bind-tcp [::]:53 # 基础缓存策略(持久化到 /var/lib/smartdns 目录) cache-size 10240 cache-persist yes cache-file /var/lib/smartdns/smartdns.cache prefetch-domain yes serve-expired yes serve-expired-ttl 86400 rr-ttl-min 60 rr-ttl-max 86400 # ========================================== # 安全与合规审计日志配置 (Audit Logging) # ========================================== # 系统运行日志级别:notice 级别记录启动、重载与常规事件 log-level notice log-file /var/log/smartdns/smartdns.log log-size 100M log-num 30 # 启用合规审计日志:记录每个客户端的域名请求及结果 audit-enable yes audit-file /var/log/smartdns/smartdns-audit.log audit-size 200M audit-num 30 # ========================================== # 上游 1:企业内网权威 DNS 组 (office) # 作用:仅解析内部私有资产,不参与默认公网查询 # ========================================== server 10.0.0.2 -group office -exclude-default-group server 10.0.0.3 -group office -exclude-default-group # ========================================== # 上游 2:国内合规公共 DNS (默认组) # 作用:通用公网解析,并发测速提升响应速度 # ========================================== server 223.5.5.5 server 223.6.6.6 server 119.29.29.29 server 180.76.76.76 # ========================================== # 加载分流清单 # ========================================== conf-file /etc/smartdns/conf.d/office-domains.conf
第三步:基于 Podman 启动 SmartDNS 服务
SmartDNS 官方在 Docker Hub 上提供了维护良好的容器镜像 docker.io/pymumu/smartdns。
1. 允许非 root 绑定 53 端口(Rootless 环境)
Linux 默认限制普通用户绑定 1024 以下端口,若使用普通用户权限运行 Podman,需调整系统参数:
sudo sysctl -w net.ipv4.ip_unprivileged_port_start=53 echo "net.ipv4.ip_unprivileged_port_start=53" | sudo tee /etc/sysctl.d/smartdns-port.conf
2. 运行容器
推荐端口映射模式 (推荐常规环境),最小化影响主机环境:
podman run -d \ --restart=always \ -p 53:53/udp \ -p 53:53/tcp \ -p 6080:6080 \ -v /etc/smartdns:/etc/smartdns \ -v /var/lib/smartdns:/var/lib/smartdns \ -v /var/log/smartdns:/var/log/smartdns \ docker.io/pymumu/smartdns:latest
参数说明:
-v /etc/smartdns:/etc/smartdns:Z:挂载配置目录,:Z确保适配 SELinux 安全标签,保障系统稳定运行。/var/lib/smartdns:/var/lib/smartdns:Z:UI数据文件目录,:Z确保适配 SELinux 安全标签,保障系统稳定运行。/var/log/smartdns:/var/log/smartdns:Z:日志存储,便于审计需要,:Z确保适配 SELinux 安全标签,保障系统稳定运行。
第四步:使用 Systemd 进行持久化守护
为保证宿主机重启后 DNS 容器自动拉起,可以使用 Podman 生成 systemd 单元文件:
# 生成 systemd 配置文件 podman generate systemd --new --files --name smartdns # 注册为系统级服务并启动 sudo mv container-smartdns.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now container-smartdns.service
连通性与分流验证
在终端使用 dig 工具分别对内网和公网域名进行解析测试:
1. 验证内网域名定向解析
dig @127.0.0.1 git.local +short
检查输出是否为企业内部网段 IP(例如 10.0.x.x 或 172.16.x.x)。
2. 验证公共域名测速与解析
dig @127.0.0.1 www.aliyun.com +stats
检查首次与再次查询的 Query time,确认缓存生效且解析结果符合就近接入原则。
企业部署建议
- 内网高可用建议:建议在内网至少部署两台独立的 SmartDNS 节点,并在企业主路由或 DHCP 服务器上将这两个节点的 IP 分别设为主、备 DNS。
- 自动化同步规则:若企业内部域名变更频繁,可通过自动化脚本(如 Ansible 或 Git Webhook)将内网域名清单同步至
/etc/smartdns/conf.d/office-domains.conf,并执行podman exec -it smartdns smartdns -c /etc/smartdns/smartdns.conf -r实现热重载,无需中断服务。
文章末尾固定信息
我的微信
微信号已复制
我的微信
微信扫一扫




