1. 网络配置的两种核心方式
在Linux系统中配置网络连接是每个运维人员和开发者的必备技能。不同于图形化界面操作,命令行方式提供了更精准的控制能力。经过多年实战,我发现nmcli和手动编辑配置文件这两种方法各有其适用场景。
nmcli是NetworkManager的命令行工具,它就像个智能管家,能帮我们快速完成大部分网络配置工作。而直接修改网卡配置文件则像手动调校发动机,虽然步骤繁琐但能实现更精细的控制。上周我就遇到一个案例:某台服务器需要配置多网卡绑定,先用nmcli测试参数效果,最后再固化到配置文件中,这种组合方案既高效又可靠。
2. nmcli命令全解析
2.1 基础网络状态管理
查看网络设备状态是最常用的操作,这个命令我每天都要用上十几遍:
bash复制nmcli device status
典型输出如下:
code复制DEVICE TYPE STATE CONNECTION
eth0 ethernet connected eth0
wlan0 wifi disconnected --
这里有个实用技巧:当STATE显示为"unavailable"时,通常意味着网卡被硬件禁用,需要先执行nmcli radio wifi on(无线网卡)或检查网线连接(有线网卡)。
2.2 连接配置实战
创建新连接时,我最推荐这种结构化命令:
bash复制nmcli con add con-name "office-static" ifname eth0 type ethernet \
ip4 192.168.1.100/24 gw4 192.168.1.1 \
dns 8.8.8.8 8.8.4.4
参数说明:
con-name:连接配置名称(建议包含用途信息)ifname:物理网卡名称(通过ip link查看)ip4/gw4:IP和网关(使用CIDR格式)dns:建议至少设置两个DNS服务器
重要提示:执行修改类命令后,务必用
nmcli con reload重新加载配置,否则可能遇到配置不同步的问题。
2.3 高级配置技巧
配置WiFi连接时,这个命令组合是我的首选:
bash复制nmcli dev wifi list # 扫描可用网络
nmcli dev wifi connect "SSID" password "PASSWORD" ifname wlan0
对于需要802.1x认证的企业网络,可以这样配置:
bash复制nmcli con add con-name "corp-wifi" ifname wlan0 type wifi ssid "CORP-NET" \
wifi-sec.key-mgmt wpa-eap 802-1x.eap peap \
802-1x.identity "user@domain" 802-1x.password "password"
3. 手动配置文件深度剖析
3.1 配置文件存储结构
CentOS/RHEL系的网络配置文件位于:
code复制/etc/sysconfig/network-scripts/ifcfg-<连接名>
Ubuntu/Debian系则使用netplan配置:
code复制/etc/netplan/*.yaml
以CentOS的ifcfg-eth0为例,关键参数解析:
ini复制TYPE=Ethernet
BOOTPROTO=none # static/dhcp/none
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.1.100
PREFIX=24
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4
3.2 多网卡绑定配置
这是我在生产环境常用的bonding配置示例:
ini复制# ifcfg-bond0
DEVICE=bond0
TYPE=Bond
BONDING_MASTER=yes
IPADDR=10.0.0.100
PREFIX=24
ONBOOT=yes
BONDING_OPTS="mode=4 miimon=100"
ini复制# ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
MASTER=bond0
SLAVE=yes
经验之谈:mode=4表示使用IEEE 802.3ad动态链路聚合,需要交换机支持LACP协议。miimon=100表示每100毫秒检查一次链路状态。
3.3 网络服务管理
修改配置文件后,需要重启网络服务:
bash复制# CentOS 7
systemctl restart network
# CentOS 8+
nmcli con reload
nmcli con up "connection-name"
# Ubuntu
netplan apply
4. 配置脚本实战参考
4.1 自动化配置脚本
这是我多年积累的万能配置脚本模板:
bash复制#!/bin/bash
# 网络配置自动化脚本 v2.1
# 参数:<网卡名> <IP地址/CIDR> <网关> <DNS1> <DNS2>
IFACE=$1
IP_CIDR=$2
GW=$3
DNS1=$4
DNS2=$5
# 备份原有配置
cp /etc/sysconfig/network-scripts/ifcfg-$IFACE /etc/sysconfig/network-scripts/ifcfg-$IFACE.bak
# 生成新配置
cat > /etc/sysconfig/network-scripts/ifcfg-$IFACE <<EOF
TYPE=Ethernet
BOOTPROTO=none
DEVICE=$IFACE
ONBOOT=yes
IPADDR=$(echo $IP_CIDR | cut -d/ -f1)
PREFIX=$(echo $IP_CIDR | cut -d/ -f2)
GATEWAY=$GW
DNS1=$DNS1
DNS2=$DNS2
EOF
# 应用配置
nmcli con reload
nmcli con down $IFACE && nmcli con up $IFACE
# 验证配置
echo -e "\n当前IP配置:"
ip addr show $IFACE | grep "inet "
echo -e "\n路由表:"
ip route show
echo -e "\nDNS配置:"
cat /etc/resolv.conf
4.2 脚本使用示例
为eth0配置静态IP:
bash复制./net-config.sh eth0 192.168.1.100/24 192.168.1.1 8.8.8.8 8.8.4.4
4.3 脚本增强功能
建议添加以下安全检查:
bash复制# 检查参数数量
if [ $# -lt 4 ]; then
echo "Usage: $0 <interface> <IP/CIDR> <gateway> <dns1> [dns2]"
exit 1
fi
# 验证IP地址格式
validate_ip() {
local ip=$1
local stat=1
if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
OIFS=$IFS
IFS='.'
ip=($ip)
IFS=$OIFS
[[ ${ip[0]} -le 255 && ${ip[1]} -le 255 && \
${ip[2]} -le 255 && ${ip[3]} -le 255 ]]
stat=$?
fi
return $stat
}
5. 常见故障排查指南
5.1 连接状态诊断
当网络异常时,我习惯按这个顺序排查:
- 物理层检查:
bash复制ethtool eth0 | grep "Link detected" - IP配置验证:
bash复制nmcli con show eth0 | grep -E "ipv4.addresses|ipv4.gateway|ipv4.dns" - 路由检查:
bash复制
ip route show - DNS测试:
bash复制
dig google.com +short
5.2 典型错误解决
问题1:nmcli修改配置后不生效
- 解决方案:
bash复制
nmcli con reload systemctl restart NetworkManager
问题2:网卡启动失败
- 检查日志:
bash复制journalctl -xe -u NetworkManager --no-pager | tail -n 50 - 常见原因:IP冲突、网关不可达
问题3:DNS解析缓慢
- 优化方案:
bash复制echo "options single-request-reopen" >> /etc/resolv.conf
6. 高级网络配置技巧
6.1 VLAN配置
通过nmcli配置VLAN接口:
bash复制nmcli con add type vlan con-name vlan10 ifname eth0.10 dev eth0 id 10
nmcli con mod vlan10 ipv4.addresses 192.168.10.100/24
nmcli con mod vlan10 ipv4.gateway 192.168.10.1
nmcli con up vlan10
对应的配置文件示例:
ini复制# ifcfg-eth0.10
DEVICE=eth0.10
VLAN=yes
PHYSDEV=eth0
IPADDR=192.168.10.100
PREFIX=24
ONBOOT=yes
6.2 网络调试工具
我的常用调试工具包:
bash复制# 实时流量监控
nload eth0
# 详细连接追踪
ss -tulnp
# 路由诊断
mtr -w 8.8.8.8
# 抓包分析
tcpdump -i eth0 -w capture.pcap port 80
6.3 网络性能优化
针对高流量服务器的优化建议:
bash复制# 增大TCP窗口大小
echo "net.ipv4.tcp_window_scaling = 1" >> /etc/sysctl.conf
# 优化本地端口范围
echo "net.ipv4.ip_local_port_range = 1024 65535" >> /etc/sysctl.conf
# 应用配置
sysctl -p
对于bonding网卡的进阶设置:
ini复制BONDING_OPTS="mode=4 xmit_hash_policy=layer3+4 miimon=100 downdelay=200 updelay=200"