凌峰创科服务平台

Linux虚拟机如何配置DNS服务器?

第一部分:环境准备

在开始之前,请确保您的虚拟机环境满足以下条件:

Linux虚拟机如何配置DNS服务器?-图1
(图片来源网络,侵删)
  1. 操作系统: 一台安装好的 Linux 虚拟机,本教程以 Ubuntu 22.04 LTS 为例,但同样适用于 Debian、CentOS/RHEL 等其他发行版(命令可能略有不同)。
  2. 网络配置: 虚拟机必须拥有一个静态 IP 地址,因为 DNS 服务器需要一个固定的地址,客户端才能持续找到它。
    • 我们设定虚拟机的 IP 地址为 168.1.100,子网掩码为 255.255.0,网关为 168.1.1
  3. 主机名: 为虚拟机设置一个有意义的主机名,dns-server
  4. 权限: 您需要拥有 sudoroot 权限来安装软件和修改系统文件。

第二部分:安装和基础配置

步骤 1: 更新系统并安装 BIND9

登录到您的 Linux 虚拟机,打开终端。

# 更新软件包列表
sudo apt update
# 安装 BIND9 DNS 服务器软件包
sudo apt install bind9 -y

安装完成后,BIND9 服务会自动启动,我们可以检查其状态:

sudo systemctl status bind9

如果看到 active (running),则表示安装成功。

步骤 2: 配置静态 IP 地址

这一步至关重要,以 Ubuntu 为例,编辑 Netplan 的网络配置文件,文件通常位于 /etc/netplan/ 目录下,01-netcfg.yaml

Linux虚拟机如何配置DNS服务器?-图2
(图片来源网络,侵删)
sudo nano /etc/netplan/01-netcfg.yaml

可能如下,请根据您的网络环境进行修改:

# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
  version: 2
  renderer: networkd
  ethernets:
    # 将 enp0s3 替换为您自己的网卡名称,可以使用 ip a 命令查看
    enp0s3: 
      dhcp4: no
      addresses:
        - 192.168.1.100/24  # 您的静态IP地址和子网掩码
      gateway4: 192.168.1.1 # 您的网络网关
      nameservers:
          addresses: [8.8.8.8, 1.1.1.1] # 临时使用公共DNS,后面会改成本地DNS

保存文件后,应用新的网络配置:

sudo netplan apply

验证 IP 地址是否已更改:

ip a
# 或者
ip addr show

您应该能看到 enp0s3 接口已经分配了您设定的静态 IP 168.1.100

Linux虚拟机如何配置DNS服务器?-图3
(图片来源网络,侵删)

第三部分:核心 BIND9 配置

BIND9 的主要配置文件是 /etc/bind/named.conf,它包含了其他配置文件的引用,我们主要需要修改以下文件:

  1. 主配置文件: /etc/bind/named.conf
  2. 区域配置文件: /etc/bind/named.conf.local (我们在这里定义要管理的域名)
  3. 区域数据文件: 存储具体 DNS 记录的文件 (db.example.com)

步骤 3: 编辑主区域配置

编辑 /etc/bind/named.conf.local 文件,这是我们添加自己域名区域的地方。

sudo nano /etc/bind/named.conf.local

在文件末尾添加以下内容,这里我们创建一个名为 example.com正向区域和一个对应的反向区域

#
# Do any local configuration here
#
# Consider adding the 1918 zones here, if they are not used in your
# organization
# include "/etc/bind/zones.rfc1918";
#
# --- 正向区域配置 ---
zone "example.com" {
    type master;
    file "/etc/bind/db.example.com";  # 区域数据文件路径
    allow-update { none; };
};
# --- 反向区域配置 ---
# 注意:1.168.192.in-addr.arpa 是 192.168.1.0/24 网络的反向表示
zone "1.168.192.in-addr.arpa" {
    type master;
    file "/etc/bind/db.192.168.1";  # 反向区域数据文件路径
    allow-update { none; };
};

保存并关闭文件。

步骤 4: 创建正向区域数据文件

BIND9 提供了模板文件,我们可以基于它来创建自己的文件。

# 复制模板文件
sudo cp /etc/bind/db.local /etc/bind/db.example.com
# 编辑新文件
sudo nano /etc/bind/db.example.com

修改如下,请务必将 ns1.example.commail.example.com 修改为您自己的主机名,168.1.100 是您的 DNS 服务器 IP。

; BIND data file for example.com
;
$TTL    604800
@       IN      SOA     ns1.example.com. admin.example.com. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      ns1.example.com.
@       IN      A       192.168.1.100
@       IN      AAAA    ::1
; --- 添加您的 A 记录 ---
ns1     IN      A       192.168.1.100
www     IN      A       192.168.1.100
dev     IN      A       192.168.1.101  # 假设另一台服务器的IP
mail    IN      A       192.168.1.100
; --- 添加 CNAME 记录 (别名) ---
www2    IN      CNAME   www.example.com.

解释:

  • $TTL: 生存时间,604800 秒 = 7 天。
  • 代表当前区域名 example.com
  • SOA: 起始授权机构,包含域的管理信息。
  • NS: 域名服务器记录,指定此域由哪个 DNS 服务器解析。
  • A: 地址记录,将域名映射到 IPv4 地址。
  • AAAA: 地址记录,将域名映射到 IPv6 地址。
  • CNAME: 规范名称记录,为域名创建别名。

保存并关闭文件。

步骤 5: 创建反向区域数据文件

同样,复制反向区域的模板文件。

# 复制模板文件
sudo cp /etc/bind/db.127 /etc/bind/db.192.168.1
# 编辑新文件
sudo nano /etc/bind/db.192.168.1

修改如下,将 168.1.100 替换为您的 DNS 服务器 IP。

; BIND reverse data file for 192.168.1.0/24
;
$TTL    604800
@       IN      SOA     ns1.example.com. admin.example.com. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      ns1.example.com.
; --- 添加 PTR 记录 (指针记录) ---
100     IN      PTR     ns1.example.com.
100     IN      PTR     www.example.com.
100     IN      PTR     mail.example.com.
101     IN      PTR     dev.example.com.

解释:

  • PTR: 指针记录,将 IP 地址反向解析为域名,这是反向区域的核心。
  • 100 对应 IP 地址 168.1.100

重要提示: 正向区域数据文件中的 Serial (序列号) 必须是一个递增的数字,每次修改了区域文件后,都必须增加这个数字,否则 DNS 服务器不会重新加载区域数据。


第四部分:启动和测试

步骤 6: 检查配置语法并重启服务

在重启 BIND9 服务之前,务必检查配置文件是否有语法错误。

# 检查主配置文件
sudo named-checkconf
# 检查正向区域
sudo named-checkzone example.com /etc/bind/db.example.com
# 检查反向区域
sudo named-checkzone 1.168.192.in-addr.arpa /etc/bind/db.192.168.1

如果没有任何输出,说明语法正确,如果有错误,请根据提示返回修改文件。

配置无误后,重启 BIND9 服务使其加载新配置:

sudo systemctl restart bind9

步骤 7: 在虚拟机内部测试

我们需要将虚拟机自身的 DNS 查询请求指向我们刚刚创建的 DNS 服务器。

编辑 /etc/resolv.conf 文件:

sudo nano /etc/resolv.conf

修改为:

nameserver 127.0.0.1
# 或者 nameserver 192.168.1.100
# search example.com

注意: 在现代的 systemd-resolved 系统中,直接修改 /etc/resolv.conf 可能是临时的,要永久修改,需要配置 Netplan 或 systemd-resolved,但为了快速测试,这样修改是可行的。

使用 dignslookup 命令进行测试。

# 安装 dig (如果还没有)
sudo apt install dnsutils
# 测试正向解析
dig @192.168.1.100 www.example.com
# 测试反向解析
dig @192.168.1.100 -x 192.168.1.100
# 简单测试
nslookup www.example.com

如果一切正常,您应该能看到 www.example.com 解析到 168.1.100168.1.100 反向解析到 www.example.com


第五部分:在局域网内使用

要让局域网内的其他计算机(如您的物理主机)也能使用这台虚拟机作为 DNS 服务器,您需要:

  1. 在客户端设置 DNS 服务器: 将您物理机或另一台客户端的 DNS 设置为虚拟机的 IP 地址 168.1.100
  2. 配置虚拟机的网络: 确保虚拟机的网络模式设置为 “桥接模式” (Bridged Mode),这样虚拟机就会在您的局域网中获得一个独立的 IP,与您的物理机在同一网段,其他设备才能直接访问它。

第六部分:安全加固(可选但推荐)

默认情况下,您的 DNS 服务器可能被用于 DNS 放大攻击等恶意活动,为了安全,应该限制它只响应来自您局域网内部或特定客户端的查询。

编辑 BIND9 的主配置文件 /etc/bind/named.conf.options

sudo nano /etc/bind/named.conf.options

options 块中添加 allow-recursionlisten-on 指令:

options {
    directory "/var/cache/bind";
    // 只允许来自 192.168.1.0/24 网络的递归查询
    allow-recursion { 192.168.1.0/24; localhost; };
    // 只在 192.168.1.100 和本地回环地址上监听
    listen-on { 127.0.0.1; 192.168.1.100; };
    // 如果不需要 IPv6,可以禁用
    // listen-on-v6 { any; };
    dnssec-validation auto;
    auth-nxdomain no;    # conform to RFC1035
    listen-on-v6 { any; };
};

保存文件后,重启 BIND9 服务:

sudo systemctl restart bind9

只有您授权的客户端才能使用这台 DNS 服务器进行递归查询,大大提高了安全性。

分享:
扫描分享到社交APP
上一篇
下一篇