通过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 等工具可以帮助诊断问题根源。始终记得在修改系统配置前进行备份。

我现在想多台上位机通过交换机与树莓派相连,我上位机与树莓派的系统都是ubuntu22.04ros2humble,现在已经有一台上位机与树莓派相连,# 默认配置 127.0.0.1 localhost 127.0.1.1 xyg-T6AD # IPv6 配置 ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters # 自定义设备映射(保留) 192.168.13.100 pc 192.168.13.161 raspberrypi # Steam++ 配置(精简版,仅保留核心域名) 127.0.0.1 steamcdn-a.akamaihd.net 127.0.0.1 steamuserimages-a.akamaihd.net 127.0.0.1 cdn.akamai.steamstatic.com # GitHub 及 ROS 必需域名新增,解决网络问题) # 获取最新 IP 方法:https://www.ipaddress.com/ 140.82.114.4 github.com 199.232.68.133 raw.githubusercontent.com 185.199.111.133 githubusercontent.com 140.82.112.20 api.github.com # 其他非必要域名(注释或删除,避免干扰 ROS 网络) # 127.0.0.1 community.akamai.steamstatic.com # 127.0.0.1 avatars.akamai.steamstatic.com # 127.0.0.1 store.akamai.steamstatic.com # ...(保留 Steam++ 核心配置,删除其余冗余映射) # 屏蔽rosdistro外网访问(强制离线模式) 127.0.0.1 raw.githubusercontent.com 127.0.0.1 github.com这是这台已经连好的上位机显示的,127.0.0.1 localhost 127.0.1.1 njj-desktop # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 192.168.13.100 pc 192.168.13.161 raspberrypi # Steam++ Start 127.0.0.1 huggingface.co 127.0.0.1 github.dev 127.0.0.1 api.github.com 127.0.0.1 gist.github.com 127.0.0.1 github.githubassets.com 127.0.0.1 support-assets.githubassets.com 127.0.0.1 education.github.com 127.0.0.1 resources.github.com 127.0.0.1 uploads.github.com 127.0.0.1 archiveprogram.github.com 127.0.0.1 raw.github.com 127.0.0.1 githubusercontent.com 127.0.0.1 raw.githubusercontent.com 127.0.0.1 camo.githubusercontent.com 127.0.0.1 cloud.githubusercontent.com 127.0.0.1 avatars.githubusercontent.com 127.0.0.1 avatars0.githubusercontent.com 127.0.0.1 avatars1.githubusercontent.com 127.0.0.1 avatars2.githubusercontent.com 127.0.0.1 avatars3.githubusercontent.com 127.0.0.1 user-images.githubusercontent.com 127.0.0.1 objects.githubusercontent.com 127.0.0.1 private-user-images.githubusercontent.com 127.0.0.1 github.com 127.0.0.1 pages.github.com 127.0.0.1 githubapp.com 127.0.0.1 hub.docker.com 127.0.0.1 greasyfork.org 127.0.0.1 update.greasyfork.org 127.0.0.1 github.io 127.0.0.1 www.github.io # Steam++ End这是树莓派显示的,请帮我给出我新上位机通过交换机另一个端口与树莓派相连的具体流程越详细越好
最新发布
06-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值