搭建内网DNS服务器

​​​​​​1.1实验目的

在内网服务器可以实现使用域名进行上网

主机 角色 系统 IP
dns-client 客户端 redhat9.5 192.168.33.7
dns-server 域名解析服务器 rocky9.5 192.168.33.100

1.2环境准备

#rocky

#安装net-tools bash-completion vim(rocky未自带这些服务)

[root@dns-server ~]# dnf install net-tools bash-completion vim -y

#放行dns服务

[root@dns-server ~]# firewall-cmd --permanent --add-service=dns
success
[root@dns-server ~]# firewall-cmd --reload 
success
[root@dns-server ~]# nmcli c show
NAME   UUID                                  TYPE      DEVICE 
ens33  e5479932-6c8a-30ed-b68c-4c41768a6c8c  ethernet  ens33  
lo     41c05b83-686d-42bf-b6d6-492906aef1f8  loopback  lo     
[root@dns-server ~]# nmcli c modify ens33 ipv4.method manual ipv4.addresses 192.168.33.100/24 ipv4.dns 223.5.5.5 ipv4.gateway 192.168.33.2

[root@dns-server ~]# nmcli c up ens33

#重新连接后 ip改为192.168.33.100

[rocky@dns-server ~]$ ip add
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:94:1e:9d brd ff:ff:ff:ff:ff:ff
    altname enp2s1
    inet 192.168.33.100/24 brd 192.168.33.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe94:1e9d/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

#redhat

#修改client的IP地址

#注意客户端的dns必须指向到 dns-server 的IP

[root@dns-client ~]# nmcli c modify ens160 ipv4.method manual ipv4.addresses 192.168.33.7/24 ipv4.dns 192.168.33.100 ipv4.gateway 192.168.33.2 connection.autoconnect yes
[root@dns-client ~]# nmcli c up ens160

#重新连接后ip地址为192.168.33.7

[redhat@dns-client ~]$ ip add
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens160: mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:b2:f4:4d brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.33.7/24 brd 192.168.33.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:feb2:f44d/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

#

#配置仓库

[root@dns-client ~]# cat /etc/yum.repos.d/yum.repo
[baseos]
name=baseos
baseurl=/mnt/BaseOS
gpgcheck=0
[appstream]
name=appstream
baseurl=/mnt/AppStream
gpgcheck=0

[root@dns-client ~]# mount /dev/sr0 /mnt
mount: /mnt: WARNING: source write-protected, mounted read-only.
[root@dns-client ~]# dnf install net-tools bash-completion curl vim -y
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use "rhc" or "subscription-manager" to register.

BaseOS                                 1.9 MB/s | 2.7 kB     00:00    
AppStream                              3.0 MB/s | 3.2 kB     00:00    
baseos                                 2.7 MB/s | 2.7 kB     00:00    
appstream                              3.1 MB/s | 3.2 kB     00:00    
Package net-tools-2.0-0.64.20160912git.el9.x86_64 is already installed.
Package bash-completion-1:2.11-5.el9.noarch is already installed.
Package curl-7.76.1-31.el9.x86_64 is already installed.
Package vim-enhanced-2:8.2.2637-21.el9.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
 

2.1配置DNS-server

2.1.1安装bind

#本机之前已安装dns服务

[root@dns-server rocky]# dnf -y install bind
上次元数据过期检查:0:19:06 前,执行于 2025年03月17日 星期一 14时26分39秒。
软件包 bind-32:9.16.23-24.el9_5.3.x86_64 已安装。
依赖关系解决。
无需任何处理。
完毕!

2.1.2修改主配置文件

[root@dns-server ~]# vim /etc/named.conf 
[root@dns-server ~]# cat /etc/named.conf 
options {
    listen-on port 53 { 192.168.33.100; };
    directory     "/var/named";

};
zone "example.com" IN {
    type master;
    file "example.com";
};

2.1.3编写区域数据文件

[root@dns-server ~]# vim /var/named/example.com 
[root@dns-server ~]# cat /var/named/example.com 
$TTL    1D
@       IN      SOA             ns.example.com. admin.example.com. (
                                                0
                                                1D
                                                1H
                                                1W
                                                1D)
        IN      NS      ns.example.com.
ns      IN      A       192.168.33.100
www     IN      A       192.168.33.100

# 检查区域数据文件的语法
[root@dns-server ~]# named-checkzone example.com /var/named/example.com 
zone example.com/IN: loaded serial 0
OK

#重启服务

[root@dns-server ~]# systemctl restart named

2.1.4测试域名解析

[root@dns-server ~]# dig -t NS example.com @192.168.33.100

; <<>> DiG 9.16.23-RH <<>> -t NS example.com @192.168.33.100
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29656
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 7453574da368e4c00100000067d7c8eaa34d4754c6618cd5 (good)
;; QUESTION SECTION:
;example.com.            IN    NS

;; ANSWER SECTION:
example.com.        86400    IN    NS    ns.example.com.

;; ADDITIONAL SECTION:
ns.example.com.        86400    IN    A    192.168.33.100

;; Query time: 0 msec
;; SERVER: 192.168.33.100#53(192.168.33.100)
;; WHEN: Mon Mar 17 15:02:02 CST 2025
;; MSG SIZE  rcvd: 101

#域名

[root@dns-server ~]# dig -t A www.example.com @192.168.33.100

; <<>> DiG 9.16.23-RH <<>> -t A www.example.com @192.168.33.100
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48081
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 7dc439f83ca883050100000067d7c968176305ddf95a70b4 (good)
;; QUESTION SECTION:
;www.example.com.        IN    A

;; ANSWER SECTION:
www.example.com.    86400    IN    A    192.168.33.100

;; Query time: 0 msec
;; SERVER: 192.168.33.100#53(192.168.33.100)
;; WHEN: Mon Mar 17 15:04:08 CST 2025
;; MSG SIZE  rcvd: 88
 

2.1.5客户端测试

[root@dns-client ~]# ping www.baidu.com
PING www.a.shifen.com (183.2.172.17) 56(84) bytes of data.
64 bytes from 183.2.172.17 (183.2.172.17): icmp_seq=1 ttl=128 time=29.0 ms
64 bytes from 183.2.172.17 (183.2.172.17): icmp_seq=2 ttl=128 time=27.9 ms
64 bytes from 183.2.172.17 (183.2.172.17): icmp_seq=3 ttl=128 time=30.5 ms
64 bytes from 183.2.172.17 (183.2.172.17): icmp_seq=4 ttl=128 time=28.3 ms
64 bytes from 183.2.172.17 (183.2.172.17): icmp_seq=5 ttl=128 time=28.5 ms
64 bytes from 183.2.172.17 (183.2.172.17): icmp_seq=6 ttl=128 time=28.3 ms
^C
--- www.a.shifen.com ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 7914ms
rtt min/avg/max/mdev = 27.872/28.753/30.526/0.864 ms
 

#之前已下载complete

[root@dns-client ~]# dnf install bind-utils -y
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use "rhc" or "subscription-manager" to register.

Last metadata expiration check: 0:22:14 ago on Mon 17 Mar 2025 02:44:27 PM CST.
Package bind-utils-32:9.16.23-24.el9_5.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
 

[root@dns-client ~]# dig -t A www.example.com

; <<>> DiG 9.16.23-RH <<>> -t A www.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19332
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 3a0898b98f03ae630100000067d7ca4b5299ab08c9b70daf (good)
;; QUESTION SECTION:
;www.example.com.        IN    A

;; ANSWER SECTION:
www.example.com.    86400    IN    A    192.168.33.100

;; Query time: 0 msec
;; SERVER: 192.168.33.100#53(192.168.33.100)
;; WHEN: Mon Mar 17 15:07:55 CST 2025
;; MSG SIZE  rcvd: 88

实验完成!!!

3.1总结

本次实验旨在在内网服务器环境中实现通过域名进行上网的功能。实验构建了一个包含客户端(dns-client,系统为 redhat9.5,IP 为 192.168.33.7)和域名解析服务器(dns-server,系统为 rocky9.5,IP 为 192.168.33.100)的网络环境。

3.1.1环境准备

  1. Rocky 系统(dns-server):安装了 net-tools、bash-completion、vim 等工具;放行 dns 服务并配置防火墙规则;通过 nmcli 命令手动配置了 IP 地址、DNS 服务器和网关,将 IP 设为 192.168.33.100。

  2. Redhat 系统(dns-client):修改了客户端的 IP 地址,将其设置为 192.168.33.7,并将 DNS 指向 dns-server 的 IP 地址 192.168.33.100;配置了本地 yum 仓库,安装了 net-tools、bash-completion、curl、vim 等工具。

3.1.2DNS 服务器配置

  1. 安装 bind:使用 dnf 命令安装 bind 软件包,因之前已安装,系统提示无需处理。

  2. 修改主配置文件:编辑 /etc/named.conf,设置监听端口为 53,监听地址为 192.168.33.100,并定义了区域 "example.com"为主区域,数据文件为"example.com"。

  3. 编写区域数据文件:在 /var/named 目录下创建并编辑 example.com 文件,定义了 SOA 记录、NS 记录和 A 记录,指定了域名服务器和相关主机的 IP 地址。

  4. 检查与重启:使用 named-checkzone 命令检查区域数据文件语法无误后,重启 named 服务以使配置生效。

3.1.3实验测试

  1. 服务器端测试:使用 dig 命令分别测试了 "example.com"的 NS 记录和"www.example.com" 的 A 记录,均成功获取到预期的解析结果,表明 DNS 服务器配置正确且工作正常。

  2. 客户端测试:客户端使用 ping 命令测试了 "www.baidu.com",能正常解析并获得响应,说明客户端网络连接正常;安装 bind-utils 工具后,使用 dig 命令测试"www.example.com",同样成功获取到正确的 A 记录解析结果,证明内网中客户端能够通过配置的 DNS 服务器实现域名解析并上网。

你可能感兴趣的:(服务器,linux,运维)