源本科技 | 码上会

Linux 主机名、静态 IP 与 DNS 设置

2025/12/24
50
0

引言

在学习和开发分布式系统时,通常需要搭建由多台虚拟机构成的模拟集群环境。为确保各节点之间通信稳定、可识别且能正常访问网络,必须对每台虚拟机进行以下基础网络配置:

  • 设置唯一主机名(Hostname):便于识别不同节点;

  • 配置静态 IP 地址:避免 DHCP 分配导致 IP 变动,影响服务发现与连接;

  • 正确设置 DNS 解析:保证域名解析能力,支持访问外部资源或内部服务。

本文将指导你在 Ubuntu 22.04/24.04 系统中完成上述关键配置。


课程目标

完成本课程后,你将能够:

  • 理解主机名、IP 地址和 DNS 在分布式系统中的作用;

  • 在 Linux 中永久修改主机名并防止重启后还原;

  • 使用 Netplan 配置静态 IPv4 地址(适配 Ubuntu 22.x 与 24.x);

  • 正确配置系统级 DNS 解析,确保网络连通性。


永久修改主机名

默认情况下,某些云镜像或安装方式(如使用 cloud-init)会在每次启动时重置主机名。需禁用此行为。

禁用 cloud-init 的主机名管理

sudo vi /etc/cloud/cloud.cfg

找到 preserve_hostname 项,将其设为 true

preserve_hostname: true

若文件不存在或未启用 cloud-init,可跳过此步。

设置新主机名

sudo hostnamectl set-hostname deployment

deployment 替换为你希望的主机名(如 node1, master, worker01 等)。

更新 /etc/hosts 文件

确保本地能通过主机名解析自身 IP:

echo "192.168.60.135 deployment" | sudo tee -a /etc/hosts

建议同时保留 127.0.0.1 localhost127.0.1.1 <原主机名> 行,避免某些服务异常。


配置静态 IP 地址

Ubuntu 自 18.04 起使用 Netplan 作为默认网络配置工具。不同版本语法略有差异。

编辑 Netplan 配置文件

sudo vi /etc/netplan/00-installer-config.yaml

可通过 ip anmcli device show 查看网卡名称(如 ens33, eth0, enp0s3)。

根据 Ubuntu 版本选择配置模板

Ubuntu 22.04 及更早版本

network:
  version: 2
  ethernets:
    ens33: # 注意你的网卡名
      addresses: [192.168.60.135/24]
      gateway4: 192.168.60.2
      nameservers:
        addresses: [192.168.60.2, 8.8.8.8]

Ubuntu 24.04

network:
  version: 2
  renderer: networkd  # 或 NetworkManager,根据系统选择
  ethernets:
    ens33: # 注意你的网卡名
      dhcp4: false
      dhcp6: false
      addresses: [192.168.100.122/24]
      routes:
        - to: default
          via: 192.168.100.1
      nameservers:
        addresses: [192.168.100.1, 114.114.114.114]
        search: []

注意:

  • 子网掩码 /24 表示 255.255.255.0;

  • 网关和 DNS 通常由你的虚拟网络环境决定(如 VMware NAT 网关常为 .2,VirtualBox 常为 .1);

  • 可配置多个 DNS 服务器提高容错性。

应用配置

sudo netplan apply

若报错,可运行 sudo netplan generate + sudo netplan apply 分步调试,或查看日志:journalctl -u systemd-networkd


配置系统级 DNS 解析

虽然 Netplan 中可指定 DNS,但某些应用(如 systemd-resolved 管理的服务)可能仍需全局 DNS 设置。

编辑 resolved 配置

sudo vi /etc/systemd/resolved.conf

取消注释并设置 DNS:

[Resolve]
DNS=114.114.114.114 8.8.8.8
#FallbackDNS=1.1.1.1
#Domains=example.com

重启解析服务

sudo systemctl restart systemd-resolved

验证 DNS 是否生效(可选)

resolvectl status
nslookup baidu.com

注意:/etc/resolv.conf 通常是符号链接,指向 ../run/systemd/resolve/stub-resolv.conf,不建议直接编辑。


最终验证与重启

为确保所有配置持久生效,建议重启系统:

sudo reboot

重启后验证:

hostname          # 应显示新主机名
ip a              # 检查 IP 是否正确
ping -c 3 baidu.com  # 测试外网连通性
nslookup github.com  # 测试 DNS 解析

补充说明与最佳实践

项目

说明

主机名唯一性

所有节点主机名必须唯一,避免 SSH、Kubernetes、ZooKeeper 等系统混淆节点身份

静态 IP 必要性

动态 IP 会导致服务注册失效、配置文件失效等问题,生产 / 实验环境应固定 IP

DNS 冗余配置

至少配置两个 DNS 服务器(如内网 DNS + 公共 DNS),提升可用性

网络接口识别

使用 ip link showls /sys/class/net/ 确认网卡名称,避免配置错误接口

虚拟网络模式

推荐使用 桥接(Bridged)仅主机(Host-only)+ NAT 组合,便于内外网互通


完成配置后,你的虚拟机已具备稳定、可识别、可联网的分布式节点基础环境,可继续部署 Hadoop、Kubernetes、etcd 等分布式系统