温馨提示×

Debian Stream8如何配置DNS

小樊
44
2025-12-30 23:28:19
栏目: 智能运维

Debian Stream 8 配置 DNS 的正确做法

一、先确认网络管理方式

  • 查看是否存在 /etc/network/interfaces 且包含 iface eth0 inet static/dhcp:说明使用传统 ifupdown 管理网络。
  • 查看是否存在 /etc/netplan/*.yaml:说明使用 Netplan(部分云镜像常见)。
  • 查看是否存在 /etc/NetworkManager/NetworkManager.conf 或命令 nmcli 可用:说明使用 NetworkManager
  • 查看 /etc/resolv.conf 是否为符号链接及其指向:常见为 /run/systemd/resolve/resolv.conf(systemd-resolved)或 /run/NetworkManager/resolv.conf(NetworkManager)。
  • 接口名可用 ip -br link 查看(如 eth0、ens18、enp0s3)。

二、按所用网络管理方式配置

  • 传统 ifupdown(/etc/network/interfaces)

    • 编辑文件:
      • 静态地址示例:
        auto eth0
        iface eth0 inet static
          address 192.168.1.100/24
          gateway 192.168.1.1
          dns-nameservers 223.5.5.5 223.6.6.6
        
      • DHCP 并自定义 DNS:
        auto eth0
        iface eth0 inet dhcp
          dns-nameservers 1.1.1.1 8.8.8.8
        
    • 使配置生效:
      sudo systemctl restart networking
      
    • 说明:ifupdown 会在接口启动时把 dns-nameservers 写入 /etc/resolv.conf(由 resolvconf 或直接生成)。
  • Netplan(/etc/netplan/*.yaml)

    • 编辑 YAML(保持原有缩进):
      network:
        version: 2
        ethernets:
          eth0:
            dhcp4: no
            addresses: [192.168.1.100/24]
            gateway4: 192.168.1.1
            nameservers:
              addresses: [223.5.5.5, 223.6.6.6]
      
    • 应用配置:
      sudo netplan apply
      
    • 说明:Netplan 会生成/更新 /etc/resolv.conf 的符号链接与底层解析器配置。
  • NetworkManager(nmcli)

    • 设置连接 DNS 并禁止从 DHCP 自动获取:
      # 查看连接名
      nmcli con show
      # 假设连接名为 "Wired connection 1"
      nmcli con mod "Wired connection 1" ipv4.dns "1.1.1.1 8.8.8.8"
      nmcli con mod "Wired connection 1" ipv4.ignore-auto-dns yes
      nmcli con down "Wired connection 1" && nmcli con up "Wired connection 1"
      
    • 说明:配置会由 NetworkManager 写入其 resolv.conf 管理文件。
  • 使用 systemd-resolved(通用系统级解析器)

    • 临时为接口设置 DNS(重启后失效):
      sudo resolvectl dns eth0 9.9.9.9 149.112.112.112
      
    • 永久生效(推荐与网络管理方式配合写入):
      • 编辑 /etc/systemd/resolved.conf
        [Resolve]
        DNS=9.9.9.9 149.112.112.112
        # 可选:启用 DoT
        # DNSOverTLS=yes
        
      • 启用并重启服务:
        sudo systemctl enable --now systemd-resolved
        sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
        sudo systemctl restart systemd-resolved
        
    • 常用命令:
      resolvectl status
      resolvectl flush-caches
      
    • 说明:resolvectl 可查看/设置接口 DNS、刷新缓存,适合验证与临时调整。

三、验证与常见问题

  • 验证 DNS 是否生效
    cat /etc/resolv.conf
    resolvectl status
    dig example.com +short
    nslookup example.com
    
  • 若使用 systemd-resolved,检查统计与缓存
    resolvectl statistics
    resolvectl flush-caches
    
  • 防火墙放行 DNS 端口(UDP/TCP 53
    sudo ufw allow 53
    # 或 firewalld
    sudo firewall-cmd --permanent --add-service=dns --add-port=53/udp
    sudo firewall-cmd --reload
    
  • 常见问题处理
    • /etc/resolv.conf 被覆盖:确认是由 NetworkManager 还是 systemd-resolved 管理,避免多重写入;必要时使用其提供的管理方式或手动维护符号链接。
    • 配置不生效:检查接口名是否正确、是否重启了对应服务(如 networking、NetworkManager、systemd-resolved、netplan apply)。
    • 解析慢或不稳定:更换为公共 DNS(如 1.1.1.1、8.8.8.8、9.9.9.9),并测试直连解析:dig @8.8.8.8 example.com

0