Linux 网络基础知识与网卡接口配置
一、Linux网络协议栈核心原理(运维视角)
在运维工作中,必须深刻理解网络协议栈的层次,才能快速定位“ping不通”“丢包”“高延迟”等故障。
Linux网络协议栈从上到下分为:
运维最常打交道的其实是链路层和网络层。
当你执行ip addr看到ens160或eth0时,它对应的是网络设备(net_device);lo是回环;br0、bond0是虚拟设备。
内核中最重要的两个表:
- 路由表(FIB - Forwarding Information Base):决定包往哪发(
ip route) - 邻居表(ARP/ND表):IP→MAC映射(
ip neigh)
生产运维金句:
“所有网络问题,最终都能归结为三句话:
理解这三句话,你就已经比90%的初级运维强了。
二、网卡命名规则与设备识别
现代Linux(RHEL 7+、Ubuntu 16.04+)使用Predictable Network Interface Names,彻底告别混乱的eth0。
命名规则(udev):
常见名称示例:
运维必备命令(强烈建议加入日常脚本):
# 查看所有网卡(最常用)
ip -brief link show
ip -brief addr show
# 按MAC地址找网卡(物理服务器最实用)
ip link | grep -E 'link/ether' -B 1
# 查看网卡驱动和固件
ethtool -i ens160
ethtool -P ens160 # 永久MAC地址
# 实时流量
watch -n 1 "ip -s link show ens160"
生产技巧:物理服务器建议在BIOS中把网卡MAC固定,或使用udev规则重命名成eth0/eth1,方便运维标准化。
三、传统ifconfig vs 现代ip命令全对比
| | | |
|---|
| | | |
| ifconfig eth0 192.168.1.100 | | |
| | | |
| | | |
| | | |
| | | |
运维建议:
四、NetworkManager(nmcli) vs netplan vs systemd-networkd 配置实战
不同发行版默认工具不同,必须掌握全部:
1. RHEL/CentOS/Rocky/AlmaLinux(推荐nmcli)
# 安装(默认已装)
dnf install NetworkManager
# 常用命令速查
nmcli device status
nmcli connection show
nmcli connection add con-name eth0 ifname ens160 type ethernet ip4 192.168.10.10/24 gw4 192.168.10.1
nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.10.10/24
nmcli connection up eth0
2. Ubuntu 22.04+(netplan)
配置文件/etc/netplan/01-netcfg.yaml:
network:
version:2
renderer:networkd
ethernets:
ens160:
addresses:[192.168.10.10/24]
routes:
-to:default
via:192.168.10.1
nameservers:
addresses:[114.114.114.114,8.8.8.8]
应用:netplan apply
3. Debian / 纯systemd-networkd
/etc/systemd/network/20-wired.network
[Match]
Name=ens160
[Network]
Address=192.168.10.10/24
Gateway=192.168.10.1
DNS=114.114.114.114
五、静态IP、DHCP、Bonding、Bridge、VLAN一站式配置
案例1:生产服务器静态多IP配置(nmcli)
nmcli con add con-name public type ethernet ifname ens160 ipv4.method manual \
ipv4.addresses "10.0.0.10/24,10.0.0.11/24" ipv4.gateway 10.0.0.1 \
ipv4.dns "114.114.114.114"
案例2:Bonding(Mode=4 LACP,最常用)
nmcli con add con-name bond0 type bond ifname bond0 bond.options "mode=802.3ad,miimon=100"
nmcli con add con-name bond0-slave1 type ethernet ifname ens160 master bond0
nmcli con add con-name bond0-slave2 type ethernet ifname ens161 master bond0
案例3:Bridge + VLAN(KVM虚拟化必备)
# 创建bridge
nmcli con add type bridge ifname br0 con-name br0
nmcli con add type ethernet ifname ens160 master br0 con-name br0-slave
# VLAN子接口
ip link add link br0 name br0.10 type vlan id 10
案例4:VLAN子接口(nmcli)
nmcli con add type vlan con-name ens160.10 ifname ens160.10 dev ens160 id 10 \
ipv4.method manual ipv4.addresses 192.168.10.10/24
六、生产环境网卡配置模板(直接复制可用)
我整理了一套标准化模板,可在所有RHEL/Ubuntu服务器直接使用(支持多网卡、多VLAN、Bonding):
#!/bin/bash
# filename: network-setup.sh
# 使用前请修改IP、网卡名
NIC="ens160"
IP="10.0.8.55/24"
GW="10.0.8.1"
DNS1="114.114.114.114"
DNS2="223.5.5.5"
nmcli con add con-name $NICtype ethernet ifname $NIC \
ipv4.method manual \
ipv4.addresses $IP \
ipv4.gateway $GW \
ipv4.dns "$DNS1$DNS2" \
ipv4.dns-search "" \
connection.autoconnect yes
nmcli con up $NIC
保存为/usr/local/bin/network-setup.sh,加入crontab或Ansible执行。
七、常见网卡故障与秒级排查流程(生产必备)
故障现象1:网卡突然Down
排查步骤:
ip link show ens160 → 是否UP?dmesg | grep -i ens160 → 看驱动报错ethtool ens160 | grep -E 'Link|Speed' → 链路状态nmcli device → connection是否active
故障现象2:能ping网关但不能ping外网
tcpdump -i ens160 icmp 抓包看方向
故障现象3:重启后配置丢失
99%是NetworkManager未托管或配置文件路径错误。解决:
nmcli con reload
systemctl restart NetworkManager
故障现象4:双网卡同时UP导致路由混乱
解决:nmcli con mod "Wired connection 2" connection.autoconnect no
八、监控与自动化:nmcli脚本 + systemd + Ansible
实时监控脚本(推荐放入/usr/local/bin/netmon.sh):
#!/bin/bash
whiletrue; do
echo"=== $(date) ==="
ip -s link show | grep -E 'ens|bond|br'
ss -tunlp | head -20
sleep 5
done
Ansible Playbook示例(批量配置100台服务器网卡):
-name:Configurenetwork
hosts:all
tasks:
-name:AddstaticIP
nmcli:
conn_name:ens160
type:ethernet
ifname:ens160
ip4:10.0.8.{{inventory_hostname|regex_replace('^.*-','')}}/24
gw4:10.0.8.1
state:present
九、安全加固:网卡层面最佳实践
禁用不必要网卡:nmcli device disconnect ens161
MAC地址欺骗防护:在交换机端口开启port-security
关闭IPv6(如果不需要):
sysctl -w net.ipv6.conf.all.disable_ipv6=1
echo"net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
网卡驱动更新:dnf update kernel 或厂商驱动(Mellanox、Intel)
SELinux + firewalld配合:网卡配置完成后立即`firewall-cmd --reload