[root@test-ansible002 ansible-dns]# tree
.
├── ansible.cfg
├── deploy.yml
├── hosts
├── README.md
└── roles
├── dns-master
│ ├── files
│ │ └── seetestdns.com.zone
│ ├── handlers
│ │ └── main.yaml
│ ├── tasks
│ │ └── main.yml
│ └── templates
│ ├── named.conf
│ └── named.rfc1912.zones
└── dns-slave
├── files
├── handlers
│ └── main.yaml
├── tasks
│ └── main.yml
└── templates
├── named.conf
└── named.rfc1912.zones
11 directories, 13 files
/etc/named.conf: #主配置文件,用于定义dns的全局配置,include其他配置文件片段
acl ACL_NAME { //用来定义ip或网络地址列表,后面配置需要应用该ip列表时可以通过ACL_NAME来引用
1.1.1.1;
192.168.0.0/24;
...
};
options {
listen-on port 53 { any; }; //指定dns服务的监听地址和端口,any表示在本机所有ip上监听53端口
directory "/var/named"; //指定区域解析数据库文件的根目录
notify yes; //master dns有修改时立即通知slave
allow-query { any; }; //设置允许哪些client做dns查询
forward only; //开启转发dns功能,可选项有first|only,first表示先让转发的dns服务器解析,如果没有得到结果,再由本地dns解析;only表示仅让转发目标dns去解析
forwarders {
114.114.114.114; //转发的目标dns地址列表
8.8.8.8;
};
allow-recursion { ACL_NAME; }; //指定接收递归的客户端ip列表
dnssec-enable no; //协议安全加密通信相关的,一般关闭
dnssec-validation no; //协议安全加密通信相关的,一般关闭
};
logging { //日志记录相关的
channel "named_log" {
file "/var/log/named/named.log" versions 10 size 20m;
severity info;
print-category yes;
print-severity yes;
print-time yes;
};
category default { named_log; };
};
include "/etc/named.rfc1912.zones"; //包含其他配置文件
include "/etc/named.root.key";
/etc/named.rfc1912.zones: #被主配置文件包含,一般用于定义每个zone的类型、zone数据库文件的路径及相关的安全策略
view VIEW_NAME { //设置视图,用于根据客户端源IP来选在不同的解析。如果使用了视图,那么所有的zone配置必须位于视图之内
match-clients { //指定匹配的客户端ip列表
internal;
};
zone "." IN { //定义根区域的配置
type hint; //根区域的类型为hint
file "named.ca"; //根区域的数据库文件
};
zone "gateray.org" IN { //自定义区域
type master; //类型为master,表示为该区域的主dns
file "seetestdns.com.zone"; //指定区域数据库文件的路径
allow-update { none; }; //指定允许哪些ip可以动态的更新区域数据的资源记录,none表示不允许更新
allow-transfer { slaves; }; //允许向哪些从dns服务器返回区域数据更新
};
};
/var/named/seetestdns.com.zone: #保存dns资源解析记录的文件数据库,一般以ZONE_NAME.zone方式命名
$TTL 1D
@ IN SOA @ admin (
2019021101 ;更新的序列号
2H ;主从同步间隔时长
10M ;同步失败的重试间隔
1W ;主dns挂掉时,从服务器能够提供服务的最大时长
6H ) ;用于告诉客户端,将解析失败的结果缓存多久
IN NS ns1 ;NS记录
IN NS ns2
ns1 IN A 192.168.1.68 ;权威dns的A记录
ns2 IN A 192.168.1.69
www IN A 192.168.1.68 ;主机A记录
m IN CNAME www ;主机别名记录
* IN A 192.168.1.69 ;泛域名A记录
yum -y install ansible
git clone https://github.com/see-sgm/ansible-dns.git
cd ansible-dns
#修改hosts文件
#1.修改masters/slaves主机地址
#2.修改ssh账户密码
#3.修改转发dns地址/zones等dns参数
#将roles/dns-master/files/seetestdns.com.zone 更改为自己的zones文件和内容
ansible all -m ping
ansible-playbook deploy.yml
[root@test-ansible002 ansible-dns]# ansible-playbook deploy.yml
PLAY [masters] ******************************************************************************************
TASK [dns-master : Install bind9] ***********************************************************************
[DEPRECATION WARNING]: Invoking "yum" only once while using a loop via squash_actions is deprecated.
Instead of using a loop to supply multiple items and specifying `name: "{{ item }}"`, please use `name:
['bind', 'bind-libs', 'bind-utils', 'libselinux-python']` and remove the loop. This feature will be
removed in version 2.11. Deprecation warnings can be disabled by setting deprecation_warnings=False in
ansible.cfg.
changed: [192.168.1.68] => (item=[u'bind', u'bind-libs', u'bind-utils', u'libselinux-python'])
TASK [dns-master : Create log dir] **********************************************************************
changed: [192.168.1.68]
TASK [dns-master : Config to bind9] *********************************************************************
changed: [192.168.1.68] => (item=named.conf)
changed: [192.168.1.68] => (item=named.rfc1912.zones)
TASK [dns-master : Add zone databases] ******************************************************************
changed: [192.168.1.68] => (item=seetestdns.com)
RUNNING HANDLER [dns-master : Restart named daemon] *****************************************************
changed: [192.168.1.68]
RUNNING HANDLER [dns-master : Reload named daemon] ******************************************************
changed: [192.168.1.68]
PLAY [slaves] *******************************************************************************************
TASK [dns-slave : Install bind9] ************************************************************************
[DEPRECATION WARNING]: Invoking "yum" only once while using a loop via squash_actions is deprecated.
Instead of using a loop to supply multiple items and specifying `name: "{{ item }}"`, please use `name:
['bind', 'bind-libs', 'bind-utils', 'libselinux-python']` and remove the loop. This feature will be
removed in version 2.11. Deprecation warnings can be disabled by setting deprecation_warnings=False in
ansible.cfg.
changed: [192.168.1.69] => (item=[u'bind', u'bind-libs', u'bind-utils', u'libselinux-python'])
TASK [dns-slave : Create log dir] ***********************************************************************
changed: [192.168.1.69]
TASK [dns-slave : Config to bind9] **********************************************************************
changed: [192.168.1.69] => (item=named.conf)
changed: [192.168.1.69] => (item=named.rfc1912.zones)
RUNNING HANDLER [dns-slave : Restart named daemon] ******************************************************
changed: [192.168.1.69]
PLAY RECAP **********************************************************************************************
192.168.1.68 : ok=6 changed=6 unreachable=0 failed=0
192.168.1.69 : ok=4 changed=4 unreachable=0 failed=0