每次重启服务器后网络设置就失效?临时修改的IP地址在关键时刻掉链子?作为Linux系统管理员或开发者,掌握永久性网络配置是必备技能。本文将彻底解析CentOS 7/8系统中那些藏在/etc/sysconfig/network-scripts/目录下的配置文件秘密,让你告别反复配置的烦恼。
CentOS的网络配置文件主要分布在三个关键位置,构成了一个完整的配置体系:
/etc/sysconfig/network-scripts/ - 网卡接口配置核心目录/etc/resolv.conf - DNS解析配置文件/etc/hosts - 本地主机名映射文件这些文件共同决定了系统启动时的网络行为。与ifconfig、ip等临时命令不同,文件配置具有持久性,服务器重启后依然有效。
以最常见的以太网卡ens33为例,其配置文件/etc/sysconfig/network-scripts/ifcfg-ens33通常包含以下关键参数:
ini复制TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.1.100"
PREFIX="24"
GATEWAY="192.168.1.1"
DNS1="8.8.8.8"
DNS2="8.8.4.4"
关键参数详解表:
| 参数名 | 取值示例 | 作用说明 | 是否必需 |
|---|---|---|---|
| BOOTPROTO | none/static/dhcp | 指定获取IP方式(静态/动态) | 是 |
| ONBOOT | yes/no | 系统启动时是否激活网卡 | 是 |
| IPADDR | 192.168.1.100 | 静态IP地址(BOOTPROTO=static时) | 条件必需 |
| PREFIX | 24 | 子网掩码长度(等同于NETMASK) | 条件必需 |
| GATEWAY | 192.168.1.1 | 默认网关地址 | 推荐 |
| DNS1 | 8.8.8.8 | 主DNS服务器 | 推荐 |
| DNS2 | 8.8.4.4 | 备用DNS服务器 | 可选 |
注意:当BOOTPROTO=dhcp时,IPADDR、PREFIX等参数应由DHCP服务器分配,手动指定可能造成冲突
现代服务器通常配备多个网络接口,合理配置能实现网络分流或冗余。假设我们有两块网卡ens33和ens34:
场景1:双网卡独立工作
bash复制# ens33配置(连接内网)
cat > /etc/sysconfig/network-scripts/ifcfg-ens33 <<EOF
TYPE="Ethernet"
BOOTPROTO="static"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.1.100"
PREFIX="24"
EOF
# ens34配置(连接外网)
cat > /etc/sysconfig/network-scripts/ifcfg-ens34 <<EOF
TYPE="Ethernet"
BOOTPROTO="static"
NAME="ens34"
DEVICE="ens34"
ONBOOT="yes"
IPADDR="203.0.113.50"
PREFIX="24"
GATEWAY="203.0.113.1"
DNS1="8.8.8.8"
EOF
场景2:网卡绑定(bonding)实现冗余
bash复制# 创建bond0主接口
cat > /etc/sysconfig/network-scripts/ifcfg-bond0 <<EOF
DEVICE="bond0"
TYPE="Bond"
BONDING_MASTER="yes"
IPADDR="192.168.1.100"
PREFIX="24"
GATEWAY="192.168.1.1"
DNS1="8.8.8.8"
BONDING_OPTS="mode=1 miimon=100"
EOF
# 配置ens33作为bond0成员
cat > /etc/sysconfig/network-scripts/ifcfg-ens33 <<EOF
DEVICE="ens33"
TYPE="Ethernet"
BOOTPROTO="none"
ONBOOT="yes"
MASTER="bond0"
SLAVE="yes"
EOF
# 配置ens34作为bond0成员(配置类似ens33)
许多管理员直接修改/etc/resolv.conf添加DNS服务器,却发现配置被意外覆盖。这是因为NetworkManager服务会动态管理此文件。正确做法是:
方法1:通过ifcfg文件指定DNS
ini复制# 在ifcfg-ens33中添加
DNS1="8.8.8.8"
DNS2="1.1.1.1"
方法2:禁用NetworkManager的DNS管理
bash复制# 修改NetworkManager配置
echo -e "[main]\ndns=none" > /etc/NetworkManager/conf.d/no-dns.conf
systemctl restart NetworkManager
方法3:使用chattr锁定文件
bash复制# 先修改resolv.conf
echo "nameserver 8.8.8.8" > /etc/resolv.conf
# 然后锁定文件
chattr +i /etc/resolv.conf
临时修改(重启失效)
bash复制hostname newhostname
传统永久配置
bash复制# 编辑/etc/hostname
echo "newhostname" > /etc/hostname
# 同时更新/etc/hosts
127.0.0.1 newhostname localhost
推荐方式:hostnamectl
bash复制hostnamectl set-hostname newhostname
提示:完整的主机名配置应包括
/etc/hosts中的对应记录,否则可能导致某些服务异常
CentOS提供了两套网络管理机制:
对比表:
| 特性 | network服务 | NetworkManager |
|---|---|---|
| 适用场景 | 服务器环境 | 桌面/移动设备 |
| 配置方式 | 直接修改文件 | 图形界面/nmcli |
| 动态调整 | 不支持 | 支持 |
| 复杂性 | 简单直接 | 功能丰富 |
| 默认状态 | 启用 | 服务器版可能禁用 |
生产环境建议:
bash复制# 禁用NetworkManager(适用于服务器)
systemctl stop NetworkManager
systemctl disable NetworkManager
# 启用传统network服务
systemctl enable network
修改配置后,需要重载服务使更改生效。但不同场景下操作有差异:
安全的重启方式:
bash复制# 最佳实践:先检查配置语法
nmcli con reload # 如果使用NetworkManager
# 然后优雅重启
systemctl restart network
危险操作警示:
bash复制# 远程连接时慎用ifdown
ifdown ens33 # 可能导致连接立即中断!
替代方案:
bash复制# 使用nmcli更安全(如果使用NetworkManager)
nmcli con down ens33 && nmcli con up ens33
临时路由(route add)重启会丢失,永久化方法:
方法1:创建route-
bash复制# 为ens33添加永久路由
cat > /etc/sysconfig/network-scripts/route-ens33 <<EOF
192.168.2.0/24 via 192.168.1.254
10.0.0.0/8 via 192.168.1.253
EOF
方法2:使用ip命令配合rc.local
bash复制# 在/etc/rc.local中添加
ip route add 192.168.2.0/24 via 192.168.1.254
当网络出现问题时,系统化排查步骤:
检查物理连接
bash复制ethtool ens33 | grep "Link detected"
验证IP配置
bash复制ip -4 addr show ens33
测试网关连通性
bash复制ping -c 4 192.168.1.1
检查DNS解析
bash复制dig www.baidu.com +short
追踪网络路径
bash复制traceroute -n 8.8.8.8
常见故障处理表:
| 故障现象 | 可能原因 | 排查命令 |
|---|---|---|
| 无法ping通网关 | 物理连接问题/IP错误 | ip addr, ethtool |
| 能ping通IP但无法访问网站 | DNS问题 | dig +trace example.com |
| 特定端口不可达 | 防火墙/服务未监听 | `ss -tulnp |
| 间歇性断连 | 网络拥塞/ARP问题 | arp -an, ping -f |
完整备份方案:
bash复制# 备份网络配置
BACKUP_DIR=/root/network_backup_$(date +%F)
mkdir -p $BACKUP_DIR
cp -a /etc/sysconfig/network-scripts $BACKUP_DIR/
cp /etc/resolv.conf /etc/hosts $BACKUP_DIR/
# 打包压缩
tar czf /root/network_config.tar.gz $BACKUP_DIR
快速迁移技巧:
bash复制# 在新服务器上恢复
tar xzf network_config.tar.gz -C /
# 检查MAC地址差异
sed -i '/HWADDR/d' /etc/sysconfig/network-scripts/ifcfg-ens*
# 重启网络
systemctl restart network
掌握这些配置文件的操作技巧后,你会发现原本复杂的网络管理变得清晰可控。记得每次修改前做好备份,特别是在生产环境中,一个小小的配置错误就可能导致服务中断。建议先在测试环境验证配置,然后再应用到关键系统。