当前位置:首页>Linux>Linux 网络基础知识与网卡接口配置

Linux 网络基础知识与网卡接口配置

  • 2026-09-10 10:34:05
Linux 网络基础知识与网卡接口配置

Linux 网络基础知识与网卡接口配置

一、Linux网络协议栈核心原理(运维视角)

在运维工作中,必须深刻理解网络协议栈的层次,才能快速定位“ping不通”“丢包”“高延迟”等故障。

Linux网络协议栈从上到下分为:

  • 应用层:HTTP、SSH、MySQL等
  • 传输层:TCP/UDP(ss命令查看)
  • 网络层:IP、ICMP、路由(ip route)
  • 链路层:MAC地址、以太网帧(ip link)
  • 物理层:网卡驱动、PHY芯片

运维最常打交道的其实是链路层和网络层。
当你执行ip addr看到ens160或eth0时,它对应的是网络设备(net_device);lo是回环;br0、bond0是虚拟设备。

内核中最重要的两个表:

  1. 路由表(FIB - Forwarding Information Base):决定包往哪发(ip route)
  2. 邻居表(ARP/ND表):IP→MAC映射(ip neigh)

生产运维金句:
“所有网络问题,最终都能归结为三句话:

  1. 包发得出去吗?(路由+ARP)
  2. 包回得来吗?(反向路由+防火墙)
  3. 中间设备让不让过?(交换机、防火墙、云安全组)”

理解这三句话,你就已经比90%的初级运维强了。


二、网卡命名规则与设备识别

现代Linux(RHEL 7+、Ubuntu 16.04+)使用Predictable Network Interface Names,彻底告别混乱的eth0。

命名规则(udev):

  • en = Ethernet
  • o = onboard(主板集成)
  • p = PCI
  • s = slot
  • f = function
  • u = USB

常见名称示例:

  • eno1:主板集成网卡1
  • enp0s3:PCI槽位0总线3
  • ens160:VMware常见
  • eth0:老系统或手动禁用predictable

运维必备命令(强烈建议加入日常脚本):

# 查看所有网卡(最常用)
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(net-tools,已废弃)
ip(iproute2,推荐)
运维推荐
查看IP
ifconfig
ip addr
ip
临时改IP
ifconfig eth0 192.168.1.100
ip addr add ...
ip
路由
route -n
ip route
ip
ARP
arp -a
ip neigh
ip
统计流量
ifconfig
ip -s link
ip
启用/禁用网卡
ifconfig eth0 up/down
ip link set eth0 up/down
ip

运维建议:

  • 所有脚本、文档、自动化全部使用ip命令
  • ifconfig只在极老系统应急使用
  • 安装net-tools仅用于兼容历史脚本

四、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
排查步骤:

  1. ip link show ens160 → 是否UP?
  2. dmesg | grep -i ens160 → 看驱动报错
  3. ethtool ens160 | grep -E 'Link|Speed' → 链路状态
  4. nmcli device → connection是否active

故障现象2:能ping网关但不能ping外网

  1. ip route → 默认路由存在吗?
  2. ip neigh → ARP表是否正常?
  3. 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

九、安全加固:网卡层面最佳实践

  1. 禁用不必要网卡:nmcli device disconnect ens161

  2. MAC地址欺骗防护:在交换机端口开启port-security

  3. 关闭IPv6(如果不需要):

    sysctl -w net.ipv6.conf.all.disable_ipv6=1
    echo"net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
  4. 网卡驱动更新:dnf update kernel 或厂商驱动(Mellanox、Intel)

  5. SELinux + firewalld配合:网卡配置完成后立即`firewall-cmd --reload

最新文章

随机文章