通过Netplan为Ubuntu服务器新增DNS以解析内部域名

在企业网络环境中,Ubuntu服务器常常需要访问内部服务,这些服务通常通过内部域名进行寻址。如果服务器默认配置的DNS无法解析这些内部域名,就需要手动添加公司的内部DNS服务器地址。本章节将详细介绍如何在Ubuntu 22.04 LTS服务器上使用Netplan工具新增DNS服务器IP,并提供解决配置后可能遇到的常见问题的步骤,确保服务器能够顺利解析内部域名。

前提条件

  • 拥有一台运行Ubuntu 22.04 LTS(或使用Netplan进行网络管理的其它版本)的服务器。

  • 已获取公司内部DNS服务器的IP地址(例如 INTERNAL_DNS_IP)。

  • 知道目标服务器上负责网络连接的网卡接口名称(例如 eth0)及其当前的静态IP配置信息(IP地址、子网掩码、网关)。

步骤一:备份并编辑Netplan配置文件

Netplan的配置文件通常位于 /etc/netplan/ 目录下,文件名可能为 00-installer-config.yaml01-netcfg.yaml 或其他以 .yaml 结尾的文件。

  1. 备份现有配置文件(非常重要):

    在进行任何修改之前,务必备份当前的Netplan配置文件,以便在出现问题时可以恢复。

    sudo cp /etc/netplan/your-config-file.yaml /etc/netplan/your-config-file.yaml.backup
    

    请将 your-config-file.yaml 替换为实际的文件名。

  2. 编辑配置文件

    使用文本编辑器(如 nanovim)打开Netplan配置文件。

    sudo vim /etc/netplan/your-config-file.yaml
    

    找到负责服务器网络连接的接口配置段(例如 eth0)。如果该接口已配置了静态IP,其结构可能如下:

    # 原始配置示例 (仅供参考)
    network:
      ethernets:
        eth0: # 假设这是你的网卡接口
          addresses:
          - SERVER_IP/24      # 替换为服务器的静态IP和子网掩码
          routes:
          - to: default
            via: GATEWAY_IP    # 替换为服务器的网关IP
          nameservers:
            addresses: [PUBLIC_DNS1, PUBLIC_DNS2] # 可能已有的公共DNS
      version: 2
    
  3. 新增内部DNS服务器IP

    nameservers -> addresses 列表中,将获取到的内部DNS服务器IP (INTERNAL_DNS_IP) 添加进去。为了优先使用内部DNS解析内部域名,应将其放在列表的首位。

    修改后的配置可能如下:

    network:
      ethernets:
        eth0:
          addresses:
          - SERVER_IP/24
          routes:
          - to: default
            via: GATEWAY_IP
          nameservers:
            addresses:
            - INTERNAL_DNS_IP   # 新增的内部DNS,置于首位
            - PUBLIC_DNS1       # 原有的公共DNS 1 (可选,作为备用)
            - PUBLIC_DNS2       # 原有的公共DNS 2 (可选,作为备用)
            search: [company.com] # 建议添加公司的搜索域 (可选)
      version: 2
    
    • INTERNAL_DNS_IP: 替换为实际的内部DNS服务器IP。

    • PUBLIC_DNS1, PUBLIC_DNS2: 如果原来就有,可以保留作为备用。如果服务器主要用于内部服务访问,且内部DNS能正确转发外部请求,也可以只保留内部DNS。

    • search: [company.com]: 这是一个推荐的选项。将 company.com 替换为公司的域名后缀。这样,你可以直接使用如 ping internal-service 而不是完整的 ping internal-service.company.com

步骤二:应用Netplan配置并验证

  1. 检查配置文件语法(可选但推荐):

    sudo netplan generate
    

    如果没有错误信息,说明YAML语法基本正确。

  2. 应用新的网络配置

    sudo netplan apply
    

    此命令会读取配置文件并使新的网络设置生效。在应用过程中,网络连接可能会短暂中断。

    注意潜在的警告信息

    • Permissions for /etc/netplan/your-config-file.yaml are too open...

      • 处理:出于安全考虑,Netplan配置文件不应被其他用户随意读写。执行 sudo chmod 600 /etc/netplan/your-config-file.yaml 来修正权限。此警告通常不影响功能。
  3. 检查 systemd-resolved 状态

    执行 resolvectl status 查看当前活动的DNS服务器。

    resolvectl status | less
    

    在输出中找到与配置的网络接口(如 eth0)相关的部分,关注 Current DNS ServerDNS Servers 列表。

    • 常见陷阱:如果 Current DNS Server 显示的不是你配置的 INTERNAL_DNS_IP,而是列表中的其他公共DNS,说明 systemd-resolved 没有优先使用内部DNS。
  4. 验证DNS解析

    resolvectl status  # 确认 Current DNS Server 是否为 INTERNAL_DNS_IP
    ping internal-service.company.com
    
  5. 强制 systemd-resolved 服务重新加载配置

    有时候 systemd-resolved 服务可能没有完全应用Netplan所做的更改,或者缓存了旧的状态。尝试重启该服务:

    sudo systemctl restart systemd-resolved.service
    

    重启后,再次执行 sudo netplan apply 以确保所有配置同步。

  6. 再次验证DNS解析

    resolvectl status  # 确认 Current DNS Server 是否为 INTERNAL_DNS_IP
    ping internal-service.company.com
    

避坑小结:系统工具缺失陷阱解决方案

问题描述

Ubuntu 18.04(35.19) 似乎未安装 resolvectl,执行命令会报错:

resolvectl status
# 报错:resolvectl: command not found
终极解决方案

采用双重配置法确保DNS设置永久生效:

  1. Netplan 配置

    编辑网络配置文件:

sudo vim /etc/netplan/*.yaml
# 报错:resolvectl: command not found

添加关键配置:

nameservers:
   addresses: [192.168.1.11]    # 内网DNS服务器
   search: [company.com]        # 关键搜索域(必须添加!)
  1. systemd-resolved 配置
# 备份配置文件
sudo cp /etc/systemd/resolved.conf /etc/systemd/resolved.conf.bak
# 编辑配置文件
sudo vim /etc/systemd/resolved.conf

修改内容:

 [Resolve]
 DNS=192.168.1.11               # 指定内网DNS
 Domains=~company.com           # 强制私有域名解析
  1. 应用配置
# 应用网络配置
sudo netplan apply
# 重启DNS服务
sudo systemctl restart systemd-resolved
# 验证解析
ping prefix.company.com
企业环境特别建议
  1. DNS搜索域是核心关键

    • 所有内部服务请求都依赖正确配置的search

    • 在Netplan和resolved.conf中必须双重配置

  2. 内网DNS优先策略

   # /etc/systemd/resolved.conf 最佳实践
   [Resolve]
   DNS=INTERNAL_DNS_IP    # 主内网DNS
   FallbackDNS=           # 清空公共DNS
   Domains=~company.com   # 私有域名空间
  1. 监控NXDOMAIN错误
# 创建实时监控脚本
while true; do
   sudo journalctl -u systemd-resolved --since "1 min ago" | grep NXDOMAIN
   sleep 60
done

最终验证:通过dig +trace prefix.company.com确认查询路径是否首跳内网DNS,这是判断配置成功的黄金标准。企业环境中,DNS配置错误导致的停机代价远高于配置验证的时间投入!

总结

通过Netplan为Ubuntu服务器添加内部DNS服务器是确保内部服务可访问性的常见操作。关键在于正确编辑YAML配置文件,将内部DNS置于优先位置,并通过 sudo netplan apply 应用。如果遇到解析问题,重启 systemd-resolved.service 服务是一个重要的排查步骤。同时,利用 resolvectl statusnslookup 等工具可以帮助诊断问题根源。始终记得在修改系统配置前进行备份。

你可能感兴趣的:(通过Netplan为Ubuntu服务器新增DNS以解析内部域名)