Shell script-automatic deployment of DNS forward and reverse resolution

DNS forward and reverse resolution detailed explanation

DNS forward resolution and basic theory overview
DNS forward resolution and basic theory overview

One-click deployment of DNS forward resolution (Shell script)

[root@localhost /]# ./DNS.sh 
/dev/sr0                 4414592 4414592        0  100% /mnt
请输入你需要解析的域名:www.qz.com
www.qz.com has address 192.168.131.45
[root@localhost /]# ./DNS.sh 
/dev/sr0                 4414592 4414592        0  100% /mnt
请输入你需要解析的域名:qetqet1.qz.com
qetqet1.qz.com has address 192.168.131.40
[root@localhost /]# ./DNS.sh 
/dev/sr0                 4414592 4414592        0  100% /mnt
请输入你需要解析的域名:mail.qz.com
mail.qz.com has address 192.168.131.50
[root@localhost /]# vim DNS.sh 

#!/bin/bash

df | grep "sr0" &> /dev/null                     【用df+grep查看sr0使用情况】
      if [ $? -eq 0 ]                            【若果$?等于0则条件表达式】
        then          
        yum -y install bind &> /dev/null         【安装bind包】
        else
        mount /dev/cdrom /mnt &> /dev/null       【不成立则进行挂载后并安装bind包】
        yum -y install bind &> /dev/null
      fi

systemctl stop firewalld &> /dev/null          
setenforce 0 &> /dev/null  
sed -i 's/127.0.0.1/any/' /etc/named.conf       【将主配置文件里的127.0.0.1替换成any】
sed -i 's/localhost/any/' /etc/named.conf       【将主配置文件里的localhost替换成any】
sed -i 's/localhost.localdomain/qz.com/' /etc/named.rfc1912.zones 【替换正向区域配置里的相关内容】
sed -i 's/named.localhost/qz.com.zone/' /etc/named.rfc1912.zones  【替换正向区域配置里的相关内容】
sed -i '18,50d' /etc/named.rfc1912.zones         【将1850行删除】

cd /var/named
cp -p named.localhost qz.com.zone       
sed -i 's/@/qz.com./2p' /var/named/qz.com.zone   【替换正向区域数据文件里的第2个@为qz.com.
sed -i 's/rname.invalid./admin.qz.com./' /var/named/qz.com.zone
sed -i 's/127.0.0.1/192.168.131.9/' /var/named/qz.com.zone
sed -i '/AAAA/d' /var/named/qz.com.zone          【删除正向区域数据文件里的相关内容】
sed -i '/::1/d' /var/named/qz.com.zone           【删除正向区域数据文件里的相关内容】
sed -i '9a * IN A  192.168.131.40' /var/named/qz.com.zone      
sed -i '10a www IN A  192.168.131.45' /var/named/qz.com.zone
sed -i '11a mail IN A  192.168.131.50' /var/named/qz.com.zone
【分别在正向区域数据文件里的第9,1011行插入相关内容】

sed -i '1a nameserver 192.168.131.9' /etc/resolv.conf
【插入DNS服务器IP】
sed -i '3,50d' /etc/resolv.conf                  【删除3-50行内容】

systemctl restart named
chmod +x /DNS.sh
read -p "请输入你需要解析的域名:" qz
host $qz

The content of the relevant configuration file after the script is run

  • Forward zone configuration
[root@localhost /]# vim /etc/named.rfc1912.zones

// named.rfc1912.zones:
......
......
......
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

zone "qz.com" IN {
    
    
        type master;
        file "qz.com.zone";
        allow-update {
    
     none; };
};
  • Forward zone data file
[root@localhost /]# vim /var/named/qz.com.zone 

$TTL 1D
@       IN SOA  qz.com. admin.qz.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      qz.com.
        A       192.168.131.9
* IN A  192.168.131.40
www IN A  192.168.131.45
mail IN A  192.168.131.50
  • DNS server address
[root@localhost /]# vim /etc/resolv.conf 

# Generated by NetworkManager
nameserver 192.168.131.9

One-click deployment of DNS reverse resolution (Shell script)

  • The use of sed is basically similar to forward analysis, mainly because the modified configuration files are different, so I won’t comment too much here.
[root@localhost /]# ./DNS.sh 
请输入你需要解析的IP地址:192.168.131.88
88.131.168.192.in-addr.arpa domain name pointer www.qz.com.
[root@localhost /]# vim DNS.sh

#!/bin/bash
df | grep "sr0" &> /dev/null
      if [ $? -eq 0 ]
        then
        yum -y install bind &> /dev/null
        else
        mount /dev/cdrom /mnt &> /dev/null
        yum -y install bind &> /dev/null
      fi

systemctl stop firewalld &> /dev/null
setenforce 0 &> /dev/null
  sed -i '13 s/127.0.0.1/any/1' /etc/named.conf
  sed -i '19 s/localhost/any/1' /etc/named.conf
  sed -i '12a zone "131.168.192.in-addr.arpa" IN { \n type master; \n file "qz.com.zone.local"; \n allow-update { none; }; \n }; ' /etc/named.rfc1912.zones
  sed -i '18,100d' /etc/named.rfc1912.zones
  cp -p /var/named/named.localhost  /var/named/qz.com.zone.local
  sed -i '2 s/@ rname.invalid./qz.com. admin.qz.com./1' /var/named/qz.com.zone.local
  sed -i '8 s/@/qz.com./1' /var/named/qz.com.zone.local
  sed -i '9 s/127.0.0.1/192.168.131.10/1' /var/named/qz.com.zone.local
  sed -i '10d' /var/named/qz.com.zone.local
  sed -i '9a 88 IN PTR www.qz.com.' /var/named/qz.com.zone.local

sed -i '1a nameserver 192.168.131.10' /etc/resolv.conf
sed -i '3,50d' /etc/resolv.conf
systemctl restart named
read -p "请输入你需要解析的IP地址:" qz
host $qz

The content of the relevant configuration file after the script is run

  • Forward zone configuration
[root@localhost /]# vim /etc/named.rfc1912.zones

// named.rfc1912.zones:
......
......
......
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

zone "131.168.192.in-addr.arpa" IN {
    
    
 type master;
 file "qz.com.zone.local";
 allow-update {
    
     none; };
 };
  • Forward zone data file
[root@localhost /]# cd /var/named/
[root@localhost named]# vim qz.com.zone.local 

$TTL 1D
@       IN SOA  qz.com. admin.qz.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      qz.com.
        A       192.168.131.10
88 IN PTR www.qz.com.
  • DNS server address
[root@localhost /]# vim /etc/resolv.conf 

# Generated by NetworkManager
nameserver 192.168.131.10

If the yum source is not installed, you can add it to the script

cd /etc/yum.repos.d
if [ ! -e local.repo ]                         【通过-e查看该文件是否存在】
then
mkdir repos.bak
mv *.repo repos.bak
echo '[local]
name=local
baseurl=file:///mnt
gpgcheck=0
enabled=1' > local.repo
fi

Guess you like

Origin blog.csdn.net/TaKe___Easy/article/details/114896774