欢迎光临
我们一直在努力

Linux 操作系统 DNS 服务

Linux 操作系统 DNS 服务

DNS(Domain Name System,域名系统)是将域名(如www.baidu.com)转换为 IP 地址的核心服务,Linux 系统中 DNS 解析分为客户端解析配置和服务端 DNS 搭建两部分,日常运维中以客户端解析配置为主,以下从解析原理、客户端解析配置、解析优先级、常用排查命令、服务端简易搭建五个维度讲解,内容通俗易懂、结构清晰,适配日常使用和问题排查。

一、Linux DNS 解析核心原理

Linux 客户端发起域名解析请求时,会按照本地缓存→本地配置文件→指定 DNS 服务器的顺序进行解析,核心逻辑是:

  • 先查询本地 DNS 缓存,若有对应域名 – IP 映射,直接返回结果,无需网络请求;
  • 缓存无结果时,读取本地 DNS 配置文件,获取指定的 DNS 服务器地址;
  • 向配置的 DNS 服务器发起递归查询,由 DNS 服务器完成根服务器→顶级域服务器→权威服务器的迭代查询,最终返回 IP 地址;
  • 将解析结果存入本地缓存,供后续重复查询使用。
  • 核心作用:替代人工记忆 IP 地址,实现域名的快速、自动化解析,是网络通信的基础。

    二、Linux 客户端 DNS 解析核心配置(最常用)

    Linux 客户端无需搭建 DNS 服务,仅需配置DNS 服务器地址和本地域名映射,即可实现域名解析,核心配置文件有 3 个,按「基础配置→临时配置→本地映射」分类,适配不同使用场景。

    2.1 永久配置:/etc/resolv.conf(核心 DNS 服务器配置)

    该文件是 Linux 客户端指定DNS 服务器地址的核心文件,系统默认从这里读取 DNS 服务器 IP,配置后永久生效(部分系统需配合网卡配置,防止重启被覆盖)。

    (1)文件格式

    每行以关键字开头,核心关键字仅 2 个,配置极简:

    bash

    运行

    # 格式:nameserver + DNS服务器IP(可配置多个,按顺序优先解析)
    nameserver 223.5.5.5 # 阿里公共DNS
    nameserver 8.8.8.8 # 谷歌公共DNS
    nameserver 114.114.114.114 # 114公共DNS
    # 可选:search 域名后缀(解析短域名时自动补全后缀,如解析www,自动变为www.baidu.com)
    search baidu.com

    (2)关键操作

    bash

    运行

    # 1. 编辑配置文件(vim/nano均可)
    vim /etc/resolv.conf
    # 2. 保存后无需重启服务,立即生效
    # 3. 防止重启被覆盖(部分系统如CentOS7+/Ubuntu,网卡配置会覆盖该文件)
    # CentOS:修改网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0(eth0为网卡名)
    BOOTPROTO=static
    DNS1=223.5.5.5
    DNS2=8.8.8.8
    # Ubuntu:修改/etc/netplan/xxx.yaml(xxx为网卡配置文件)
    nameservers:
    addresses: [223.5.5.5, 8.8.8.8]
    # 改完网卡配置后,重启网络服务
    systemctl restart network # CentOS
    netplan apply # Ubuntu

    (3)注意事项
    • 可配置多个 nameserver,系统按从上到下顺序尝试解析,前一个 DNS 服务器不可达时,自动切换下一个;
    • 公共 DNS 推荐使用阿里(223.5.5.5)、114(114.114.114.114),国内访问速度快、稳定性高;
    • 若配置内网 DNS 服务器(如公司内部 DNS),将内网 IP 放在第一个 nameserver,优先解析内网域名。

    2.2 本地映射:/etc/hosts(最高优先级,无需 DNS 服务器)

    该文件是本地域名 – IP 静态映射表,优先级高于 DNS 服务器解析,适合将常用域名(如内网服务域名)直接绑定到固定 IP,无需通过 DNS 服务器查询,解析速度最快。

    (1)文件格式

    bash

    运行

    # 格式:IP地址 + 域名 + 别名(别名可选,多个域名用空格分隔)
    127.0.0.1 localhost localhost.localdomain # 本地回环
    192.168.1.100 www.test.com test # 内网域名映射
    202.108.22.5 www.baidu.com # 手动绑定百度IP

    (2)关键操作

    bash

    运行

    # 编辑文件,添加映射关系
    vim /etc/hosts
    # 保存后立即生效,无需重启任何服务

    (3)典型场景
    • 内网服务无公共 DNS 解析时,通过 hosts 绑定内网域名和 IP;
    • 测试环境中,临时将域名指向测试服务器 IP,不影响正式环境;
    • 屏蔽恶意网站:将恶意域名绑定到 127.0.0.1,访问时直接指向本地,无法连接。

    2.3 临时配置:nslookup/dig 指定 DNS(仅单次查询生效)

    若需临时测试某个 DNS 服务器的解析结果,无需修改配置文件,可通过nslookup或dig命令直接指定 DNS 服务器,仅对当前查询生效,不影响系统全局配置。

    (1)使用格式

    bash

    运行

    # nslookup 域名 DNS服务器IP
    nslookup www.baidu.com 223.5.5.5
    # dig 域名 @DNS服务器IP
    dig www.baidu.com @8.8.8.8

    Linux 服务端 DNS 简易搭建(BIND9)

    若需搭建内网 DNS 服务器(如公司内部域名解析、多服务器域名管理),Linux 中最常用的是BIND9(Berkeley Internet Name Domain),是开源、稳定的 DNS 服务端软件,以下为内网简易主 DNS 服务器搭建步骤,适配 CentOS7+/Ubuntu20.04+。

    5.1 安装 BIND9

    bash

    运行

    # CentOS/RHEL
    yum install -y bind bind-utils
    # Ubuntu/Debian
    apt install -y bind9 bind9-utils

    5.2 核心配置(仅内网解析,极简版)

    (1)主配置文件:/etc/named.conf(CentOS)//etc/bind/named.conf(Ubuntu)

    修改核心配置,允许内网客户端查询,指定区域配置文件:

    bash

    运行

    # CentOS编辑主配置
    vim /etc/named.conf
    # 关键修改:
    options {
    listen-on port 53 { 127.0.0.1; 192.168.1.10; }; # 本机IP(DNS服务器IP)
    allow-query { localhost; 192.168.1.0/24; }; # 允许查询的内网网段
    recursion yes; # 开启递归查询(客户端必备)
    };
    # 添加区域配置(内网域名:test.com)
    zone "test.com" IN {
    type master; # 主DNS服务器
    file "test.com.zone"; # 区域解析文件(存放在/var/named/)
    allow-update { none; }; # 禁止动态更新
    };

    (2)创建区域解析文件:/var/named/test.com.zone(CentOS)

    创建域名 – IP 映射的解析文件,配置 A 记录(IPv4)、NS 记录(域名服务器)、MX 记录(可选):

    bash

    运行

    vim /var/named/test.com.zone
    # 写入以下内容(注意:所有域名末尾必须加.)
    $TTL 1D # 缓存时间1天
    @ IN SOA test.com. admin.test.com. (
    2024010101 ; 序列号(每次修改+1)
    1D ; 刷新时间
    1H ; 重试时间
    1W ; 过期时间
    3H ) ; 最小缓存时间
    IN NS ns.test.com. # NS记录:域名服务器
    ns IN A 192.168.1.10 # A记录:ns.test.com对应DNS服务器IP
    www IN A 192.168.1.100 # A记录:www.test.com对应内网服务器IP
    ftp IN A 192.168.1.101 # A记录:ftp.test.com对应内网FTP服务器IP

    (3)修改文件权限(BIND9 对权限要求严格)

    bash

    运行

    chown named:named /var/named/test.com.zone # 属主改为named用户
    chmod 640 /var/named/test.com.zone # 权限改为640

    5.3 启动并设置开机自启

    bash

    运行

    # CentOS
    systemctl start named
    systemctl enable named
    systemctl status named # 检查状态(active为正常)
    # Ubuntu
    systemctl start bind9
    systemctl enable bind9
    systemctl status bind9

    5.4 客户端测试

    将内网客户端的/etc/resolv.conf中 nameserver 改为 DNS 服务器 IP(192.168.1.10),然后测试解析:

    bash

    运行

    nslookup www.test.com 192.168.1.10
    # 解析成功会显示192.168.1.100

    核心总结

  • Linux 客户端 DNS 解析无需搭建服务,仅需配置/etc/resolv.conf(DNS 服务器)和/etc/hosts(本地映射),是日常使用的核心;
  • 解析优先级:本地缓存 > /etc/hosts > DNS 服务器,nsswitch.conf可修改解析源顺序;
  • 排查解析问题的核心步骤:ping测试→nslookup/dig详细排查→检查配置文件→清理缓存;
  • 内网 DNS 搭建优先使用 BIND9,核心配置为「主配置文件 + 区域解析文件」,仅需配置 A 记录和 NS 记录即可实现基础内网解析;
  • DNS 默认使用53 端口(UDP 用于解析,TCP 用于区域传输),搭建服务时必须开放该端口。
  • 赞(0)
    未经允许不得转载:171主机测评 » Linux 操作系统 DNS 服务
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址