一、環境說明與準備工作
1.基礎信息
本次實驗用兩臺 Linux 主機,分別作為 DNS 服務端和客戶端,具體信息如下:
服務端IP | 客戶端IP | 網址 |
---|---|---|
192.168.120.130 | 192.168.120.128 | www.zy.com |
2.準備工作
- 關閉安全軟件:服務端和客戶端都要關閉防火墻和 SELinux,避免攔截 DNS 服務(端口 53):
- 修改主機名:方便區分兩臺機器,服務端改名為 “dns”,客戶端改名為 “web”:
# 關閉安全軟件:服務端和客戶端都要關閉防火墻和 SELinux,避免攔截 DNS 服務(端口 53):
[root@node1 ~]# systemctl stop firewalld
[root@node1 ~]# systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@node1 ~]# getenforce
Disabled
[root@node1 ~]# hostnamectl set-hostname dns
[root@node1 ~]# bash# 安裝 Bind 軟件:服務端需要安裝 Bind(提供 DNS 服務的核心軟件):
[root@dns ~]# yum install bind -y
- 配置靜態 IP:
服務端設置 IP 為 192.168.120.130,網關 192.168.120.2:
# 服務端配置靜態IP
[root@dns ~]# nmcli c modify ens32 ipv4.method manual ipv4.addresses 192.168.120.130/24 ipv4.gateway 192.168.120.2 ipv4.dns 114.114.114.114
[root@dns ~]# nmcli c reload
[root@dns ~]# nmcli c up ens32
連接已成功激活(D-Bus 活動路徑:/org/freedesktop/NetworkManager/ActiveConnection/2)
客戶端設置 IP 為 192.168.120.128,并指定 DNS 服務器為服務端 IP:
# 客戶端設置靜態IP(dns服務器為服務器端)
[root@web ~]# nmcli c modify ens32 ipv4.method manual ipv4.addresses 192.168.120.128/24 ipv4.gateway 192.168.120.2 ipv4.dns 192.168.120.130
[root@web ~]# nmcli c reload
[root@web ~]# nmcli c up ens32
[root@web ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens32
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=ens32
UUID=2d3438fd-d747-48d3-9c58-2af0e06c82db
DEVICE=ens32
ONBOOT=yes
IPADDR=192.168.120.128
PREFIX=24
GATEWAY=192.168.120.2
DNS1=192.168.120.130連接已成功激活(D-Bus 活動路徑:/org/freedesktop/NetworkManager/Act
二、DNS 服務端配置
Bind 的配置主要涉及 3 個文件:主配置文件(named.conf)、區域配置文件(named.rfc1912.zones)、數據配置文件(如zy.com.zone)。
1.修改主配置文件(named.conf)
主配置文件控制 DNS 服務的基本運行規則,需允許所有主機訪問:
找到并修改以下兩行(默認可能限制為本地訪問):
[root@dns ~]# vim /etc/named.conf
# 需改2行listen-on port 53 { any; }; # any為允許所有主機allow-query { any; };
2.配置區域文件(named.rfc1912.zones)
區域文件用來定義 “要解析哪些域名”,包括正向解析(域名→IP)和反向解析(IP→域名):
[root@dns ~]# vim /etc/named.rfc1912.zones
# 正向解析區域:負責zy.com域名的解析
zone "zy.com" IN { # 雙引號中輸入,表示管理那個區域type master; # 主服務器 file "zy.com.zone"; # 數據文件名稱(存儲在/var/named/目錄) allow-update { none; }; # 不允許動態更新
};# 反向解析區域:負責192.168.120網段的IP解析(注意網段倒寫為120.168.192.in-addr.arpa)
zone "120.168.192.in-addr.arpa" IN {type master;file "192.168.120.arpa";allow-update { none; };
};
3. 創建數據配置文件
數據文件是實際存儲 “域名→IP” 或 “IP→域名” 對應關系的地方,需要從模板復制并修改:
[root@dns ~]# cd /var/named # 切換到數據配置文件存儲路徑
[root@dns named]# ls
data dynamic named.ca named.empty named.localhost named.loopback slaves
[root@dns named]# cp -a named.localhost zy.com.zone 從 /var/named/ 目錄下的模板文件 named.localhost復制,保留文件權限:
[root@dns named]# vim zy.com.zone # 完整格式修改如下
$TTL 1D
zy.com. IN SOA ns.zy.com. rch.qq.com. (0 ; serial1D ; refresh1H ; retry1W ; expire3H ) ; minimumIN NS ns.zy.com. # NS記錄:指定該域名的DNS服務器是ns.zy.com
ns.zy.com. IN A 192.168.120.128 # A記錄:ns.zy.com對應的IP(服務端IP)
www.zy.com. IN A 192.168.120.128 # A記錄:www.zy.com對應的IP(客戶端IP)
ftp.zy.com. IN A 192.168.120.128 # 可選:添加其他子域名解析(如ftp、bbs)
bbs.zy.com. IN A 192.168.120.128[root@dns named]# cp -a named.loopback 192.168.120.arpa 從模板 named.loopback 復制,用于 IP 到域名的解析:
[root@dns named]# vim 192.168.120.arpa 修改內容如下(IP 最后一段寫在前面,比如 192.168.48.128 寫成 128):
$TTL 1D
@ IN SOA ns.zy.com. rch.qq.com. (0 ; serial1D ; refresh1H ; retry1W ; expire3H ) ; minimumIN NS ns.zy.com.
ns.zy.com. IN A 192.168.120.128
128 IN PTR www.zy.com.
128 IN PTR ftp.zy.com.
128 IN PTR bbs.zy.com.
4. 啟動 DNS 服務
配置完成后,啟動 Bind 服務(named)并設置開機自啟:
systemctl start named
systemctl enable named
# 檢查服務狀態,確保為active (running)
systemctl status named
三、測試
- 定義客戶端,下載nginx,并且使用xftp上傳代碼到/目錄下
[root@web ~]# yum install nginx -y
[root@web ~]# ls /
afs bin boot dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var zy
[root@web ~]# chmod -R 777 /zy
[root@web ~]# ls /zy
compat css img index.html js
[root@web ~]# vim /etc/nginx/nginx.conf
root /zy;
[root@web ~]# systemctl start nginx# 定位客戶端測試
[root@web ~]# nslookup www.zy.com #nslookup 命令:測試正向和反向解析
Server: 192.168.120.130
Address: 192.168.120.130#53Name: www.zy.com
Address: 192.168.120.128[root@web ~]# nslookup 192.168.120.128
128.120.168.192.in-addr.arpa name = ftp.zy.com.
128.120.168.192.in-addr.arpa name = bbs.zy.com.
128.120.168.192.in-addr.arpa name = www.zy.com.[root@web ~]# curl www.zy.com
<!DOCTYPE html>
<html id="html" debug="true">
<head lang="zh-CN">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">> # ctrl+d退出[root@web ~]# dig www.zy.com dig 命令:更詳細地查看解析過程; <<>> DiG 9.16.23 <<>> www.zy.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9522
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: eecb428312fa459d010000006884c8bfef1c80f209ab35b8 (good)
;; QUESTION SECTION:
;www.zy.com. IN A;; ANSWER SECTION:
www.zy.com. 86400 IN A 192.168.120.128;; Query time: 0 msec
;; SERVER: 192.168.120.130#53(192.168.120.130)
;; WHEN: Sat Jul 26 20:23:27 CST 2025
;; MSG SIZE rcvd: 83
四、總結
這次搭建 DNS 服務器,最容易出錯的地方是數據文件里的 “.”(比如域名后面漏寫 “.” 會導致解析失敗)和反向解析的網段倒寫。不過按照步驟一步步改配置,測試時看到解析結果的那一刻還是挺有成就感的。其實 DNS 原理不難,就是通過配置文件告訴服務器 “某個域名對應某個 IP”,學會了之后搭建自己的小網站時,就不用死記 IP 地址