Linux中配置智能DNS(分离解析)的核心是利用BIND9的view机制,通过match-clients按客户端源IP匹配不同视图,并加载各自独立的区域文件,使同一域名返回不同IP地址;需双网卡部署、禁用冲突的默认区域包含、分view定义内/外网解析策略,并严格校验语法与权限。

Linux中配置智能DNS(即分离解析),核心是让同一域名对不同来源的客户端返回不同的IP地址,比如内网用户访问内网Web服务器,外网用户访问公网IP。这依赖BIND9的view机制,按match-clients条件分流请求,再加载对应区域文件。
确认环境与基础准备
确保已安装BIND9,并使用双网卡主机作为DNS服务器(如内网卡ens33: 192.168.153.20,外网卡ens36: 192.168.44.20)。需关闭SELinux或放行端口,防火墙开放UDP/TCP 53端口。同时开启IP转发(net.ipv4.ip_forward = 1)并用sysctl -p生效——这不是必须项,仅当DNS兼作网关时才需要。
主配置文件启用view分区
编辑/etc/named.conf,删除或注释掉默认的include "/etc/named.rfc1912.zones"(它会与view冲突)。按顺序定义两个view:
-
内网view(len):匹配内网网段,如
match-clients { 192.168.153.0/24; };,包含include "/etc/lan.zones"; -
外网view(wan):匹配其余所有地址,如
match-clients { any; };,包含include "/etc/wan.zones";
每个view内都保留zone "." IN { type hint; file "named.ca"; };,这是根提示必需项。全局options块中务必设置recursion no;(因分离解析通常用于权威服务),并确保allow-query允许对应网段查询。
分别配置正向区域文件
创建/etc/lan.zones,写入:
zone "example.com" IN {
type master;
file "lan/example.com.zone";
};
创建/etc/wan.zones,写入:
zone "example.com" IN {
type master;
file "wan/example.com.zone";
};
然后在/var/named/下建子目录lan/和wan/,分别放入内容不同的区域文件。例如:
-
/var/named/lan/example.com.zone中A记录指向192.168.153.30(内网Web) -
/var/named/wan/example.com.zone中同名A记录指向192.168.44.30(模拟公网IP)
注意SOA、NS记录格式要规范,TTL、序列号(Serial)需每次修改后递增。
验证与排错要点
配置完成后执行named-checkconf检查语法,用named-checkzone example.com /var/named/lan/example.com.zone验证各区域文件。启动服务:systemctl restart named。测试时务必从不同网段的客户端发起查询:
- 内网机执行
dig @192.168.153.20 example.com,应返回内网IP - 外网机执行
dig @192.168.44.20 example.com,应返回外网IP
若结果不符,优先检查match-clients是否精确匹配客户端真实源IP(注意NAT或代理可能干扰判断),以及named日志(/var/log/messages或journalctl -u named)中的view匹配提示。


















