Linux 搭建dns主域解析,和反向解析

#!/bin/bash
# DNS主域名服务
# user li 20250325

# 检查当前用户是否为root用户
# 因为配置DNS服务通常需要较高的权限,只有root用户才能进行一些关键操作
if [ "$USER" != "root" ]; then
    # 如果不是root用户,输出错误信息
    echo "错误:非root用户,权限不足!"
    # 退出脚本,返回状态码0
    exit 0
fi

# 防火墙与高级权限部分
# 停止并禁用防火墙服务,因为防火墙可能会阻止DNS服务的网络通信
# 使用 && 连接命令,只有前一个命令执行成功才会执行下一个命令
systemctl stop firewalld && systemctl disable firewalld && echo "防火墙已经关闭"

# 修改SELinux配置文件,将SELinux设置为禁用状态
# sed -i 表示直接在原文件上进行修改
# s/SELINUX=*/SELINUX=disabled/g 是sed的替换命令,将SELINUX= 开头的内容替换为SELINUX=disabled
# setenforce 0 是临时禁用SELinux
sed -i 's/SELINUX=*/SELINUX=disabled/g' /etc/selinux/config && setenforce 0 && echo "关闭selinux"

# 安装BIND相关工具
# BIND(Berkeley Internet Name Domain)是常用的DNS服务器软件
yum install -y bind
# 检查上一个命令(yum install -y bind)的执行结果
if [ $? = 0 ]; then
    # 如果执行成功,输出安装成功的信息
    echo "安装成功"
else
    # 如果执行失败,输出安装失败的信息
    echo "安装失败"
    # 脚本暂停5秒,方便用户查看错误信息
    sleep 5
    # 退出脚本,返回状态码0
    exit 0
fi

# 设置变量部分
# 提示用户输入DNS区域名,例如 xiaomao.com
# -e 选项允许使用反斜杠转义字符,-p 选项用于指定提示信息
read -ep "请设置DNS区域名(如xiaomao.com):" a
# 提示用户输入本机IP地址
read -ep "请输入本机IP地址:" b
# 提示用户输入反向解析的IP地址,例如 1.168.192
read -ep "请输入反向解析的IP地址(如1.168.192):" c
# 将用户输入的本机IP地址赋值给变量 ip
ip="$b"
# 从本机IP地址中提取最后一段数字,用于反向解析
# cut -d '.' -f 4 表示以点号为分隔符,提取第4个字段
d=$(echo "$ip" | cut -d '.' -f 4)

# 配置BIND主配置文件部分
# 备份原有的BIND主配置文件
cp /etc/named.conf /etc/named/conf.bak
# 修改BIND主配置文件,将监听地址从 127.0.0.1 改为 any
# 这样可以让DNS服务器监听所有可用的网络接口
sed -i 's/listen-on port 53 { 127.0.0.1; };/listen-on port 53 { any; };/g' /etc/named.conf
# 修改BIND主配置文件,将允许查询的地址从 localhost 改为 any
# 这样可以让任何客户端都可以向该DNS服务器发起查询请求
sed -i 's/allow-query     { localhost; }/allow-query     { any; }/g' /etc/named.conf

# 向 /etc/named.rfc1912.zones 文件中追加正向和反向解析区域的配置信息
# 正向解析区域配置指定了域名对应的文件路径
# 反向解析区域配置指定了反向解析对应的文件路径
echo "zone "$a" IN {
    type master;
    file \"/var/named/$a.zone\";
};

zone "$c.in-addr.arpa" IN {
    type master;
    file \"/var/named/$c.rev\";
};" >> /etc/named.rfc1912.zones

# 创建正向解析区域文件
# 正向解析区域文件定义了域名到IP地址的映射关系
echo "\$TTL 86400
@   IN  SOA  ns.$a. admin.$a. (
            2025032501 ; Serial
            3600       ; Refresh
            1800       ; Retry
            604800     ; Expire
            86400      ; Minimum TTL
)
@   IN  NS   ns.$a.
$a. IN  A       $b
ns       IN  A       $b
" > /var/named/$a.zone

# 创建反向解析区域文件
# 反向解析区域文件定义了IP地址到域名的映射关系
echo "\$TTL 86400
@   IN  SOA  ns.$a. admin.$a. (
            2025032501 ; Serial
            3600       ; Refresh
            1800       ; Retry
            604800     ; Expire
            86400      ; Minimum TTL
)
@       IN  NS   ns.$a.
$d     IN  PTR  $a.
" > /var/named/$c.rev

# 调整权限部分
# 将正向和反向解析区域文件的所有者和所属组设置为 named
# named 是BIND服务运行的用户
chown named:named /var/named/$a.zone /var/named/$c.rev
# 设置正向和反向解析区域文件的权限为 640
# 即所有者有读写权限,所属组有读权限,其他用户没有权限
chmod 640 /var/named/$a.zone /var/named/$c.rev

# 启动BIND服务并设置为开机自启
# systemctl enable named 用于设置BIND服务开机自启
# systemctl start named 用于启动BIND服务
systemctl enable named && systemctl start named
# 检查上一个命令(启动BIND服务)的执行结果
if [ $? = 0 ]; then
    # 如果执行成功,输出服务启动成功的信息
    echo "服务启动成功"
else
    # 如果执行失败,输出失败信息
    echo "破产,10秒后退出"
    # 脚本暂停10秒,方便用户查看错误信息
    sleep 10
    # 退出脚本,返回状态码0
    exit 0
fi

测试结果

现实中做dns 一般都是为了提升效率,只借助路由器的解析人多了会变得很慢。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值