内网主从智能DNS从此不再烦恼

简介: 内网主从智能DNS从此不再烦恼


大家好,我是小姜。


写在前面


随着云原生时代的快速发展,各行各业纷纷进军k8s,短短两三年,招聘上面就要求“至少有一年k8s实战经验”。以至于好多传统的、行业初期用的人非常多的一些技术被飞快的甩在后头。亦或者说技术更新迭代层出不穷,老技术会被很快代替,新技术会备受宠爱。而在域名解析领域,大家最熟悉的常用的云解析DNSPod、Godaddy、CloudFlare、阿里云的域名解析等,当然还有dnsmasq、powerdns以及在k8s中用的coreDNS。但是今天我这里就聊聊bind9。


可能目前的中小型公司都不会使用bind9,而且网上你去搜索,大多都是直接使用named服务,不会使用named-chroot。而且更少的是使用acl+view的。要么排版不够好,新手可能看懵逼,配置错误。要么就是没有说的很详细的。当然也有,可能我没有好好花时间搜索或者搜索能力有限。这里我就记录一下bind9使用chroot以及使用acl+view试图实现智能DNS过程。


环境说明


CentOS Linux release 8.4.2105

BIND Version:9.11.26

总网段:172.16.128.0/17

bind9主从所在网段:172.16.0.0/24


Host IP Role
named-srv1 172.16.0.55 named master
named-srv2 172.16.0.56 named slave


bind9 master节点部署


/bin/chattr -i /etc/fstab /etc/passwd /etc/group /etc/shadow /etc/sudoers /etc/services
dnf -y install bind-chroot bind-utils
# 我要启用chroot,并且需要更改named的目录到/data/named/chroot
# 因此需要拷贝文件
mkdir -p /data/named
cp -ar /var/named/* /data/named/
# 创建存放日志的目录
mkdir -p /data/named/chroot/data/log/named/
### 在bind chroot 的目录中创建相关文件
touch /data/named/chroot/var/named/data/cache_dump.db
touch /data/named/chroot/var/named/data/named_stats.txt
touch /data/named/chroot/var/named/data/named_mem_stats.txt
touch /data/named/chroot/var/named/data/named.run
mkdir /data/named/chroot/var/named/dynamic
touch /data/named/chroot/var/named/dynamic/managed-keys.bind
# 到linux系统的/data/目录下,更改named目录的属主和数组为named
cd /data/
chown named.named -R named


编辑主named.conf文件


$ cat /data/named/chroot/etc/named.conf
acl telecom {
  172.17.10.0/24;
};
acl unicom {
  172.17.20.0/24;
};
acl mobile {
  172.17.30.0/24;
};
options {
 listen-on port 53 { 127.0.0.1; 172.16.0.55;};
 directory  "/var/named";
 dump-file  "/data/named/data/cache_dump.db";
 statistics-file "/data/named/data/named_stats.txt";
 memstatistics-file "/data/named/data/named_mem_stats.txt";
  // 允许查询的主机;白名单 
 allow-query     { any; };
  allow-query-cache  { any; };
  // 我这里买的是阿里云的ECS服务器,因此这里使用阿里的DNS
  forwarders { 223.5.5.5; 223.6.6.6; };
  recursive-clients  200000;
  check-names master warn;
  max-cache-ttl      60;
  max-ncache-ttl    0;
 //recursion yes;
 //dnssec-enable yes;
 //dnssec-validation yes;
 //managed-keys-directory "/var/named/dynamic";
 pid-file "/run/named/named.pid";
 //session-keyfile "/run/named/session.key";
};
logging {
       channel query_log {
               file "/data/log/named/query.log" versions 10 size 300m;
               severity info;
               print-category yes;
               print-time yes;
               print-severity yes;
               };
       channel client_log {
               file "/data/log/named/client.log" versions 3 size 200m;
               severity info;
               print-category yes;
               print-time yes;
               print-severity yes;
               };
       channel config {
               file "/data/log/named/config.log" versions 3 size 100m;
               severity info;
               print-category yes;
               print-time yes;
               print-severity yes;
               };
       channel default_log {
               file "/data/log/named/default.log" versions 3 size 100m;
               severity debug;
               print-category yes;
               print-time yes;
               print-severity yes;
               };
       channel general_log {
               file "/data/log/named/general.log" versions 3 size 200m;
               severity debug;
               print-category yes;
               print-time yes;
               print-severity yes;
               };
       category queries {
               query_log;
               };
       category client {
               client_log;
               };
       category general {
               general_log;
               };
       category config {
               config;
               };
       category default {
               default_log;
               };
};
view telcom_view {
  match-clients { telcom; };
  match-destinations { any; };
  recursion yes;
  include "/etc/named-telcome.zones";
};
view unicom_view {
  match-clients { unicom; };
  match-destinations { any; };
  recursion yes;
  include "/etc/named-unicome.zones";
};
view  mobile_view {
  match-clients      { any; };
  match-destinations { any; };
  recursion yes;
  include "/etc/named-mobile.zones";
};


注意:需要提醒大家的是:第一,启用了named-chroot服务以后,就必须关闭named服务,两者取其一。第二,如果启用了named-chroot,那么目录就都是相对目录,都是相对于/var/named/chroot而言的。


使用acl+view


上面已经定义好了三个acl和三个view。一般来说我们的acl都会放在最开头,也就是options的前面,也建议这样放。


接下来就需要生成三个view下面的include包含进来的区域文件了。这里只演示正向解析区域,一般内网bind9很少需要反向解析。


生成区域文件

$ vi /var/named/chroot/etc/named-telcome.zones
zone "ayunw.cn" IN {
        type master;
        file "ayunw.cn.zone";
        allow-update { none; };
        masterfile-format text;
        allow-transfer { 172.16.0.56; };
};
$ vi /var/named/chroot/etc/named-unicom.zones
zone "iyunw.cn" IN {
        type master;
        file "iyunw.cn.zone";
        allow-update { none; };
        masterfile-format text;
        allow-transfer { 172.16.0.56; };
};
$ vi /var/named/chroot/etc/named-mobile.zones
zone "allenjol.cn" IN {
        type master;
        file "allenjol.cn.zone";
        allow-update { none; };
        masterfile-format text;
        allow-transfer { 172.16.0.56; };
};


生成区域解析库文件


$ cd /var/named/chroot/var
$ vi ayunw.cn.zone
$TTL    86400
@       IN      SOA     ayunw.cn.       root.iyunw.cn.  (
                                        202111011       ; serial (d. adams)
                                        1H              ; refresh
                                        15M             ; retry
                                        1W              ; expiry
                                        1D )            ; minimum
                IN      NS              ns1.ayunw.cn.
                IN      NS              ns2.ayunw.cn.
ns1             IN      A 172.16.0.55
ns2             IN      A 172.16.0.56
www           IN      A 172.16.0.58
$ vi iyunw.cn.zone
$TTL    86400
@       IN      SOA     iyunw.cn.       root.iyunw.cn.  (
                                        202111011       ; serial (d. adams)
                                        1H              ; refresh
                                        15M             ; retry
                                        1W              ; expiry
                                        1D )            ; minimum
                IN      NS              ns1.iyunw.cn.
                IN      NS              ns2.iyunw.cn.
ns1             IN      A 172.16.0.55
ns2             IN      A 172.16.0.56
web            IN      A 172.16.0.59
$ vi allenjol.cn.zone
$TTL    86400
@       IN      SOA     allenjol.cn.       root.allenjol.cn.  (
                                        202111011       ; serial (d. adams)
                                        1H              ; refresh
                                        15M             ; retry
                                        1W              ; expiry
                                        1D )            ; minimum
                IN      NS              ns1.allenjol.cn.
                IN      NS              ns2.allenjol.cn.
ns1             IN      A 172.16.0.55
ns2             IN      A 172.16.0.56
allen           IN      A 172.16.0.60


启动服务并设置开机自启


/usr/libexec/setup-named-chroot.sh /var/named/chroot on
systemctl stop named
systemctl disable named
systemctl start named-chroot
systemctl enable named-chroot


bind9 slave节点部署


/bin/chattr -i /etc/fstab /etc/passwd /etc/group /etc/shadow /etc/sudoers /etc/services
dnf -y install bind-chroot bind-utils
# 我要启用chroot,并且需要更改named的目录到/data/named/chroot
# 因此需要拷贝文件
mkdir -p /data/named
cp -ar /var/named/* /data/named/
# 创建存放日志的目录
mkdir -p /data/named/chroot/data/log/named/
### 在bind chroot 的目录中创建相关文件
touch /data/named/chroot/var/named/data/cache_dump.db
touch /data/named/chroot/var/named/data/named_stats.txt
touch /data/named/chroot/var/named/data/named_mem_stats.txt
touch /data/named/chroot/var/named/data/named.run
mkdir /data/named/chroot/var/named/dynamic
touch /data/named/chroot/var/named/dynamic/managed-keys.bind
# 到linux系统的/data/目录下,更改named目录的属主和数组为named
cd /data/
chown named.named -R named


编辑从named.conf文件


$ cat /data/named/chroot/etc/named.conf
$ cat /data/named/chroot/etc/named.conf
acl telecom {
  172.17.10.0/24;
};
acl unicom {
  172.17.20.0/24;
};
acl mobile {
  172.17.30.0/24;
};
options {
 listen-on port 53 { 127.0.0.1; 172.16.0.55;};
 directory  "/var/named";
 dump-file  "/data/named/data/cache_dump.db";
 statistics-file "/data/named/data/named_stats.txt";
 memstatistics-file "/data/named/data/named_mem_stats.txt";
  // 允许查询的主机;白名单 
 allow-query     { any; };
  allow-query-cache  { any; };
  // 我这里买的是阿里云的ECS服务器,因此这里使用阿里的DNS
  forwarders { 223.5.5.5; 223.6.6.6; };
  recursive-clients  200000;
  check-names master warn;
  max-cache-ttl      60;
  max-ncache-ttl    0;
 //recursion yes;
 //dnssec-enable yes;
 //dnssec-validation yes;
 //managed-keys-directory "/var/named/dynamic";
 pid-file "/run/named/named.pid";
 //session-keyfile "/run/named/session.key";
};
logging {
       channel query_log {
               file "/data/log/named/query.log" versions 10 size 300m;
               severity info;
               print-category yes;
               print-time yes;
               print-severity yes;
               };
       channel client_log {
               file "/data/log/named/client.log" versions 3 size 200m;
               severity info;
               print-category yes;
               print-time yes;
               print-severity yes;
               };
       channel config {
               file "/data/log/named/config.log" versions 3 size 100m;
               severity info;
               print-category yes;
               print-time yes;
               print-severity yes;
               };
       channel default_log {
               file "/data/log/named/default.log" versions 3 size 100m;
               severity debug;
               print-category yes;
               print-time yes;
               print-severity yes;
               };
       channel general_log {
               file "/data/log/named/general.log" versions 3 size 200m;
               severity debug;
               print-category yes;
               print-time yes;
               print-severity yes;
               };
       category queries {
               query_log;
               };
       category client {
               client_log;
               };
       category general {
               general_log;
               };
       category config {
               config;
               };
       category default {
               default_log;
               };
};
view telcom_view {
  match-clients { telcom; };
  match-destinations { any };
  recursion yes;
  include "/etc/named-telcome.zones";
};
view unicom_view {
  match-clients { unicom; };
  match-destinations { any; };
  recursion yes;
  include "/etc/named-unicome.zones";
};
view  mobile_view {
  match-clients      { any; };
  match-destinations { any; };
  recursion yes;
  include "/etc/named-mobile.zones";
};


生成区域文件


$ vi /var/named/chroot/etc/named-telcome.zones
zone "ayunw.cn" IN {
        type master;
        file "ayunw.cn.zone";
        allow-update { none; };
        masterfile-format text;
        allow-transfer { 172.16.0.56; };
};
$ vi /var/named/chroot/etc/named-unicom.zones
zone "iyunw.cn" IN {
        type master;
        file "iyunw.cn.zone";
        allow-update { none; };
        masterfile-format text;
        allow-transfer { 172.16.0.56; };
};
$ vi /var/named/chroot/etc/named-mobile.zones
zone "allenjol.cn" IN {
        type master;
        file "allenjol.cn.zone";
        allow-update { none; };
        masterfile-format text;
        allow-transfer { 172.16.0.56; };
};


启动服务并设置开机自启


/usr/libexec/setup-named-chroot.sh /var/named/chroot on
systemctl stop named
systemctl disable named
systemctl start named-chroot
systemctl enable named-chroot


注意:从节点无需创建区域解析库文件,当主节点重启named-chroot服务的时候会自动同步解析库文件到从节点


测试解析


找了三台机器,内网ip分别为:172.16.10.1、172.16.20.1、172.16.30.1,分别解析www.ayunw.cn、web.iyunw.cn以及allen.allenjol.cn,都是能正常解析的。


$ dig -t A www.ayunw.cn
; <<>> DiG 9.11.26-RedHat-9.11.26-4.el8_4 <<>> -t A allen.ptcloud.t.home
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40756
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: e48c8996a6469b8d51d96afb61775ef045fa019e7ef2c4d6 (good)
;; QUESTION SECTION:
;www.ayunw.cn.  IN A
;; ANSWER SECTION:
www.ayunw.cn. 86400 IN A 172.16.0.58
;; AUTHORITY SECTION:
ayunw.cn. 86400 IN NS ns2.ayunw.cn.
ayunw.cn. 86400 IN NS ns1.ayunw.cn.
;; ADDITIONAL SECTION:
ns1.ayunw.cn. 86400 IN A 172.16.0.55
ns2.ayunw.cn. 86400 IN A 172.16.0.56
;; Query time: 0 msec
;; SERVER: 172.16.0.55#53(172.16.0.55)
;; WHEN: Tue Oct 26 09:50:40 CST 2021
;; MSG SIZE  rcvd: 161


$ dig -t A web.iyunw.cn
; <<>> DiG 9.11.26-RedHat-9.11.26-4.el8_4 <<>> -t A allen.ptcloud.t.home
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40756
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: e48c8996a6469b8d51d96afb61775ef045fa019e7ef2c4d6 (good)
;; QUESTION SECTION:
;web.iyunw.cn.  IN A
;; ANSWER SECTION:
web.iyunw.cn. 86400 IN A 172.16.0.59
;; AUTHORITY SECTION:
iyunw.cn. 86400 IN NS ns2.iyunw.cn.
iyunw.cn. 86400 IN NS ns1.iyunw.cn.
;; ADDITIONAL SECTION:
ns1.iyunw.cn. 86400 IN A 172.16.0.55
ns2.iyunw.cn.  86400 IN A 172.16.0.56
;; Query time: 0 msec
;; SERVER: 172.16.0.55#53(172.16.0.55)
;; WHEN: Tue Oct 26 09:50:40 CST 2021
;; MSG SIZE  rcvd: 161


$ dig -t A allen.allenjol.cn
; <<>> DiG 9.11.26-RedHat-9.11.26-4.el8_4 <<>> -t A allen.ptcloud.t.home
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40756
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: e48c8996a6469b8d51d96afb61775ef045fa019e7ef2c4d6 (good)
;; QUESTION SECTION:
;allen.allenjol.cn.  IN A
;; ANSWER SECTION:
allen.allenjol.cn. 86400 IN A 172.16.0.60
;; AUTHORITY SECTION:
allenjol.cn. 86400 IN NS ns2.allenjol.cn.
allenjol.cn. 86400 IN NS ns1.allenjol.cn.
;; ADDITIONAL SECTION:
ns1.allenjol.cn. 86400 IN A 172.16.0.55
ns2.allenjol.cn.   86400 IN A 172.16.0.56
;; Query time: 0 msec
;; SERVER: 172.16.0.55#53(172.16.0.55)
;; WHEN: Tue Oct 26 09:50:40 CST 2021
;; MSG SIZE  rcvd: 161


如果你有足够的机器,那么你换一不在172.16.10.0/24、172.16.20.0/24、

172.16.30.0/24这三个网段的机器,然后去任意解析 这三个zone文件中的域名,你会发现最终都是没有正常的A记录返回的。


或者如果你用172.16.10.1去解析web.iyunw.cn或者是allen.allenjol.cn,那么就无法正常解析了。这就是acl+view实现的智能DNS的效果。


相关文章
|
9月前
|
传感器 人工智能 物联网
穿戴科技新风尚:智能服装设计与技术全解析
穿戴科技新风尚:智能服装设计与技术全解析
742 85
|
机器学习/深度学习 安全 大数据
揭秘!企业级大模型如何安全高效私有化部署?全面解析最佳实践,助你打造智能业务新引擎!
【10月更文挑战第24天】本文详细探讨了企业级大模型私有化部署的最佳实践,涵盖数据隐私与安全、定制化配置、部署流程、性能优化及安全措施。通过私有化部署,企业能够完全控制数据,确保敏感信息的安全,同时根据自身需求进行优化,提升计算性能和处理效率。示例代码展示了如何利用Python和TensorFlow进行文本分类任务的模型训练。
808 6
|
9月前
|
监控 算法 安全
基于 C# 的内网行为管理软件入侵检测算法解析
当下数字化办公环境中,内网行为管理软件已成为企业维护网络安全、提高办公效率的关键工具。它宛如一位恪尽职守的网络守护者,持续监控内网中的各类活动,以确保数据安全及网络稳定。在其诸多功能实现的背后,先进的数据结构与算法发挥着至关重要的作用。本文将深入探究一种应用于内网行为管理软件的 C# 算法 —— 基于二叉搜索树的入侵检测算法,并借助具体代码例程予以解析。
155 4
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
DeepSeek 实践应用解析:合力亿捷智能客服迈向 “真智能” 时代
DeepSeek作为人工智能领域的创新翘楚,凭借领先的技术实力,在智能客服领域掀起变革。通过全渠道智能辅助、精准对话管理、多语言交互、智能工单处理、个性化推荐、情绪分析及反馈监控等功能,大幅提升客户服务效率和质量,助力企业实现卓越升级,推动智能化服务发展。
401 1
|
10月前
|
监控 算法 安全
内网桌面监控软件深度解析:基于 Python 实现的 K-Means 算法研究
内网桌面监控软件通过实时监测员工操作,保障企业信息安全并提升效率。本文深入探讨K-Means聚类算法在该软件中的应用,解析其原理与实现。K-Means通过迭代更新簇中心,将数据划分为K个簇类,适用于行为分析、异常检测、资源优化及安全威胁识别等场景。文中提供了Python代码示例,展示如何实现K-Means算法,并模拟内网监控数据进行聚类分析。
280 10
|
11月前
|
Serverless 对象存储 人工智能
智能文件解析:体验阿里云多模态信息提取解决方案
在当今数据驱动的时代,信息的获取和处理效率直接影响着企业决策的速度和质量。然而,面对日益多样化的文件格式(文本、图像、音频、视频),传统的处理方法显然已经无法满足需求。
444 4
智能文件解析:体验阿里云多模态信息提取解决方案
|
10月前
|
存储 算法 安全
基于 Go 语言的公司内网管理软件哈希表算法深度解析与研究
在数字化办公中,公司内网管理软件通过哈希表算法保障信息安全与高效管理。哈希表基于键值对存储和查找,如用户登录验证、设备信息管理和文件权限控制等场景,Go语言实现的哈希表能快速验证用户信息,提升管理效率,确保网络稳定运行。
186 0
|
12月前
|
存储 监控 算法
企业内网监控系统中基于哈希表的 C# 算法解析
在企业内网监控系统中,哈希表作为一种高效的数据结构,能够快速处理大量网络连接和用户操作记录,确保网络安全与效率。通过C#代码示例展示了如何使用哈希表存储和管理用户的登录时间、访问IP及操作行为等信息,实现快速的查找、插入和删除操作。哈希表的应用显著提升了系统的实时性和准确性,尽管存在哈希冲突等问题,但通过合理设计哈希函数和冲突解决策略,可以确保系统稳定运行,为企业提供有力的安全保障。
|
域名解析 存储 缓存
DNS是什么?内网电脑需要配置吗?
【10月更文挑战第22天】DNS是什么?内网电脑需要配置吗?
2064 1
|
机器学习/深度学习 存储 人工智能
政务部门人工智能OCR智能化升级:3大技术架构与4项核心功能解析
本项目针对政务服务数字化需求,建设智能文档处理平台,利用OCR、信息抽取和深度学习技术,实现文件自动解析、分类、比对与审核,提升效率与准确性。平台强调本地部署,确保数据安全,解决低质量扫描件、复杂表格等痛点,降低人工成本与错误率,助力智慧政务发展。
481 0

相关产品

  • 云解析DNS
  • 推荐镜像

    更多
  • DNS