当你刚完成Red Hat Enterprise Linux 8.4的安装,准备大展拳脚时,突然发现SSH连接中断了——因为DHCP分配的IP地址又变了。这种场景对于需要在稳定网络环境中工作的开发者、运维工程师来说再熟悉不过。本文将彻底解决这个痛点,带你掌握Red Hat 8.4推荐的网络配置工具nmcli,从原理到实操,一步步构建稳定的静态IP环境。
在开发测试环境中,动态IP就像一把双刃剑。DHCP协议虽然简化了网络配置,但IP地址的频繁变更会导致:
特别是在以下场景中,静态IP几乎是必须的:
Red Hat 8.4提供了两种主流配置方式:传统ifcfg文件编辑和nmcli命令行工具。后者作为NetworkManager的客户端,具有以下优势:
在开始配置前,我们需要先了解当前网络状态。打开终端,执行以下诊断命令:
bash复制# 查看所有网络接口状态
nmcli device status
# 获取指定网卡(如ens160)的详细配置
nmcli device show ens160
典型输出如下:
code复制GENERAL.DEVICE: ens160
GENERAL.TYPE: ethernet
GENERAL.HWADDR: 00:0C:29:XX:XX:XX
IP4.ADDRESS[1]: 192.168.1.100/24
IP4.GATEWAY: 192.168.1.1
IP4.DNS[1]: 8.8.8.8
IP4.DNS[2]: 114.114.114.114
记录下关键信息:
提示:如果是在虚拟机环境,确保网络适配器设置为桥接模式或NAT模式,具体选择取决于你的网络拓扑需求。
要将动态IP改为静态,只需三个关键命令:
bash复制# 设置静态IP和子网掩码
nmcli connection modify ens160 ipv4.addresses '192.168.1.150/24'
# 指定默认网关
nmcli connection modify ens160 ipv4.gateway '192.168.1.1'
# 配置DNS服务器(可指定多个,空格分隔)
nmcli connection modify ens160 ipv4.dns '8.8.8.8 114.114.114.114'
默认情况下,Red Hat 8.4使用DHCP自动获取IP。我们需要显式声明使用静态配置:
bash复制nmcli connection modify ens160 ipv4.method manual
注意:
manual表示静态配置,auto表示DHCP自动获取。这个参数必须正确设置,否则之前的IP配置不会生效。
确保配置在重启后依然有效:
bash复制# 启用开机自动连接
nmcli connection modify ens160 connection.autoconnect yes
# 立即应用配置(无需重启)
nmcli connection up ens160
有时单网卡需要绑定多个IP:
bash复制nmcli connection modify ens160 +ipv4.addresses '192.168.1.151/24'
查看绑定结果:
bash复制ip addr show ens160
除了主DNS,还可以设置:
bash复制nmcli connection modify ens160 ipv4.dns '8.8.8.8 114.114.114.114'
nmcli connection modify ens160 ipv4.dns-search 'example.com'
nmcli connection modify ens160 ipv4.dns-options 'timeout:1 attempts:2'
备份当前网络配置:
bash复制nmcli connection export ens160 > ens160-backup.nmconnection
恢复配置:
bash复制nmcli connection import type ethernet file ens160-backup.nmconnection
配置完成后,按顺序执行以下验证步骤:
基础连通性测试:
bash复制ping -c 4 192.168.1.1 # 测试网关
ping -c 4 8.8.8.8 # 测试外网
DNS解析检查:
bash复制nslookup google.com
dig +short example.com
路由表验证:
bash复制ip route show
常见问题解决方案:
网络不可达:
bash复制# 检查防火墙规则
firewall-cmd --list-all
# 临时关闭防火墙测试
systemctl stop firewalld
DNS解析失败:
bash复制# 检查resolv.conf是否更新
cat /etc/resolv.conf
# 手动刷新DNS缓存
systemctl restart NetworkManager
配置未生效:
bash复制# 重新加载配置
nmcli connection reload
# 强制重新应用
nmcli device reapply ens160
对于需要批量部署的场景,可以将所有配置整合到一个脚本中:
bash复制#!/bin/bash
# 定义网络参数
INTERFACE="ens160"
IP_ADDR="192.168.1.150/24"
GATEWAY="192.168.1.1"
DNS_SERVERS="8.8.8.8 114.114.114.114"
# 执行配置
nmcli connection modify $INTERFACE ipv4.method manual
nmcli connection modify $INTERFACE ipv4.addresses $IP_ADDR
nmcli connection modify $INTERFACE ipv4.gateway $GATEWAY
nmcli connection modify $INTERFACE ipv4.dns "$DNS_SERVERS"
nmcli connection modify $INTERFACE connection.autoconnect yes
# 应用配置
nmcli connection down $INTERFACE
nmcli connection up $INTERFACE
# 验证配置
echo -e "\n当前网络配置:"
nmcli device show $INTERFACE | grep -E 'IP4.ADDRESS|IP4.GATEWAY|IP4.DNS'
保存为set_static_ip.sh后,通过chmod +x添加执行权限即可运行。
虽然直接编辑/etc/sysconfig/network-scripts/ifcfg-ens160文件也能达到相同目的,但两种方式各有优劣:
| 特性 | nmcli命令 | ifcfg文件编辑 |
|---|---|---|
| 实时生效 | ✓ 立即生效 | × 需要重启网络服务 |
| 原子性 | ✓ 单条命令对应单个修改 | × 需要编辑整个文件 |
| 可脚本化 | ✓ 适合自动化 | × 需要文件操作 |
| 状态查询 | ✓ 丰富的信息输出 | × 需要解析多个文件 |
| 错误恢复 | ✓ 自动回滚机制 | × 错误配置可能导致网络中断 |
| Red Hat推荐 | ✓ 8.4默认工具 | × 传统方式 |
在实际项目中,特别是需要频繁调整网络配置的CI/CD环境中,nmcli的命令行特性使其成为更优选择。