iproute2笔记250714

333 阅读1小时+

iproute2 详解:Linux 网络管理的终极工具

iproute2 是现代 Linux 系统网络管理的核心工具套件,取代了传统的 net-tools(ifconfig/route/arp)。它提供了更精细的网络控制能力,支持所有高级网络功能(VLAN、隧道、策略路由等)。以下是深度解析:


一、核心组件架构

命令功能配置文件
ip主命令(接口/路由/邻居管理)/etc/iproute2/ 目录
ssSocket 统计(替代 netstat)
bridge网桥管理(替代 brctl)
tc流量控制(QoS)/etc/iproute2/tc.conf
rtacct路由统计

所有命令需 root 权限执行:sudo ip [命令]sudo -i 后操作


二、核心模块详解

1. 接口管理 (ip link)
# 查看所有接口(简洁模式)
ip -br link show

# 启用/禁用接口
ip link set eth0 up
ip link set wlan0 down

# 修改接口属性
ip link set eth0 mtu 9000                  # 设置MTU
ip link set eth0 address 00:11:22:33:44:55 # 修改MAC地址
ip link set eth0 promisc on                # 开启混杂模式
2. IP地址管理 (ip address)
# 添加/删除IP
ip addr add 192.168.1.100/24 dev eth0
ip addr add 2001:db8::1/64 dev eth0        # IPv6
ip addr del 192.168.1.100/24 dev eth0

# 别名地址(多IP)
ip addr add 192.168.1.200/24 label eth0:0 dev eth0

# 清除所有IP配置
ip addr flush dev eth0
3. 路由管理 (ip route)
# 查看路由表
ip route show

# 添加静态路由
ip route add 10.0.0.0/24 via 192.168.1.1
ip route add default via 192.168.1.1       # 默认网关

# 多路由表操作
echo "200 custom" >> /etc/iproute2/rt_tables # 创建新路由表
ip route add default via 10.0.0.1 table custom
4. ARP/邻居表 (ip neighbour)
# 查看ARP缓存
ip -s neigh show

# 静态ARP绑定
ip neigh add 192.168.1.50 lladdr 00:0c:29:xx:xx:xx dev eth0 nud permanent

# 删除条目
ip neigh del 192.168.1.50 dev eth0
5. 网桥管理 (bridge)
# 创建网桥
ip link add name br0 type bridge

# 添加端口到网桥
ip link set eth0 master br0
ip link set tap0 master br0

# 查看网桥信息
bridge link show        # 端口状态
bridge fdb show         # MAC地址表
bridge vlan show        # VLAN配置
6. 策略路由 (ip rule)
# 查看策略规则
ip rule show

# 创建策略路由
ip rule add from 192.168.2.0/24 lookup 100   # 源IP策略
ip rule add fwmark 0x1 lookup 200            # 防火墙标记策略

# 策略路由表示例
ip route add default via 10.0.0.1 table 100
7. 流量控制 (tc)
# 限制eth0出口带宽为10Mbps
tc qdisc add dev eth0 root tbf rate 10mbit burst 32kbit latency 400ms

# 添加优先级队列
tc qdisc add dev eth0 handle 1: root htb
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 30mbit ceil 50mbit
8. 网络诊断 (ss)
ss -tunlp4                # 查看所有TCP/UDPv4监听端口
ss -o state established   # 查看所有已建立连接
ss -it '( dport = :443 )' # 监控443端口实时流量

三、高级功能配置示例

VLAN + Bonding + Bridge 集成配置
# 创建Bond接口
ip link add bond0 type bond mode 802.3ad

# 添加物理接口到Bond
ip link set eth0 master bond0
ip link set eth1 master bond0

# 在Bond上创建VLAN
ip link add link bond0 name bond0.100 type vlan id 100

# 创建网桥并添加VLAN接口
ip link add br100 type bridge
ip link set bond0.100 master br100

# 激活所有接口
ip link set bond0 up
ip link set bond0.100 up
ip link set br100 up
GRE隧道配置
# 创建GRE隧道
ip tunnel add gre0 mode gre local 203.0.113.1 remote 198.51.100.1 ttl 255

# 分配IP地址
ip addr add 10.10.10.1/30 dev gre0

# 启用隧道
ip link set gre0 up

四、配置持久化方法

iproute2 命令临时生效,重启后丢失。持久化方法:

  1. Debian/Ubuntu
    /etc/network/interfaces:

    auto bond0
    iface bond0 inet manual
      bond-mode 802.3ad
      bond-slaves eth0 eth1
    
    auto br0
    iface br0 inet static
      bridge_ports bond0
      address 192.168.1.10/24
    
  2. RHEL/CentOS
    /etc/sysconfig/network-scripts/ifcfg-bond0:

    DEVICE=bond0
    TYPE=Bond
    BONDING_MASTER=yes
    BONDING_OPTS="mode=802.3ad miimon=100"
    
  3. Systemd-networkd
    /etc/systemd/network/br0.netdev:

    [NetDev]
    Name=br0
    Kind=bridge
    

五、故障排查技巧

  1. 查看详细接口信息
    ip -d link show eth0:显示驱动信息、VLAN配置等

  2. 路由跟踪
    ip route get 8.8.8.8 from 192.168.1.50:检查特定源IP的路由路径

  3. 监控路由缓存
    ip -s route show cache:查看路由缓存命中情况

  4. TC 队列统计
    tc -s qdisc show dev eth0:查看流量控制统计


六、与传统工具对比

功能iproute2net-tools
接口信息ip linkifconfig
路由表ip routeroute -n
ARP表ip neighbourarp -an
网桥管理bridgebrctl
多路由表原生支持不支持
VRF支持原生支持不支持

ℹ️ 完整文档:man ip 或访问 iproute2 官方文档

掌握 iproute2 可实现对 Linux 网络的全方位精细控制,是现代运维和网络工程师的核心技能。建议在实际环境中结合 ip -s(统计信息)和 -d(调试信息)参数进行深度探索。



























Linux iproute2 命令详解:ip, ss, bridge, tc, rtacct

以下是 Linux iproute2 套件核心命令的全面解析,涵盖网络接口、路由、套接字、网桥、流量控制和路由统计:


一、ip 命令:全能网络管理工具

功能:管理网络接口、IP地址、路由、邻居表(ARP)、隧道等

1. 接口管理 (ip link)
# 查看接口状态
ip -c -br link show                # 彩色简洁输出
ip -d link show eth0               # 显示驱动详情(含VLAN/绑定信息)

# 配置接口属性
ip link set eth0 mtu 9000          # 设置MTU
ip link set eth0 txqueuelen 1000   # 设置传输队列长度
ip link set eth0 promisc on        # 开启混杂模式
2. IP地址管理 (ip address)
# 多IP地址管理
ip addr add 192.168.1.100/24 dev eth0 primary  # 主地址
ip addr add 192.168.1.200/24 dev eth0 label eth0:0  # 别名地址

# IPv6操作
ip -6 addr add 2001:db8::1/64 dev eth0
ip addr flush dev eth0 scope global # 清除全局地址
3. 路由管理 (ip route)
# 多路由表配置
echo "200 vpn" >> /etc/iproute2/rt_tables  # 创建路由表
ip route add default via 10.8.0.1 table vpn

# 策略路由
ip rule add from 192.168.2.0/24 lookup vpn
ip rule add fwmark 0x1 lookup 100

# 路由缓存
ip route get 8.8.8.8 from 192.168.1.50  # 查询特定源IP的路由
4. 邻居表管理 (ip neighbour)
ip neigh show nud reachable         # 仅显示可达邻居
ip neigh add 10.0.0.1 lladdr 00:11:22:33:44:55 dev eth0 nud permanent
ip neigh flush dev eth0             # 清空ARP缓存
5. 隧道管理 (ip tunnel)
# 创建IPIP隧道
ip tunnel add tun0 mode ipip local 203.0.113.1 remote 198.51.100.1 ttl 64

# 创建VXLAN隧道
ip link add vxlan0 type vxlan id 42 local 192.168.1.1 dev eth0 dstport 4789

二、ss 命令:套接字统计工具

功能:替代 netstat,提供详细的套接字统计信息

常用命令组合:
ss -tunp4                  # 所有TCP/UDPv4连接(含进程)
ss -s                      # 摘要统计
ss -lt                     # 所有监听TCP端口
ss -o state established    # 所有已建立连接
ss -it '( dport = :443 )'  # 监控443端口实时流量
高级过滤:
ss -nt dst 192.168.1.0/24  # 目标IP段连接
ss -nt sport = :80         # 源端口80的连接
ss -nt dport \> :1024      # 目标端口>1024
输出解释:
Recv-Q     Send-Q     Local Address:Port     Peer Address:Port     State
0          0          192.168.1.10:22        203.0.113.5:54321     ESTAB
  • Recv-Q:接收队列中等待应用读取的字节数
  • Send-Q:发送队列中等待ACK的字节数

三、bridge 命令:网桥管理工具

功能:管理网桥、VLAN、MAC地址表(替代 brctl)

1. 网桥管理
# 创建网桥
ip link add name br0 type bridge

# 端口管理
bridge link set dev eth0 learning on   # 启用MAC学习
bridge link set dev eth0 hairpin on    # 启用端口环回

# 查看端口状态
bridge -c link show                    # 紧凑输出
2. FDB(MAC地址表)管理
bridge fdb add 00:11:22:33:44:55 dev eth0 master static # 静态条目
bridge fdb del 00:11:22:33:44:55 dev eth0
bridge fdb show dynamic                 # 仅显示动态条目
3. VLAN管理
bridge vlan add dev eth0 vid 100        # 添加VLAN
bridge vlan add dev eth0 vid 200 pvid   # 设置PVID
bridge vlan show                        # 显示所有VLAN配置

四、tc 命令:流量控制工具

功能:实现QoS(服务质量控制)、流量整形、优先级调度

核心概念:
  • qdisc:队列规则(调度算法)
  • class:流量分类容器
  • filter:流量分类器
1. 基本队列规则
# 添加HTB队列(分层令牌桶)
tc qdisc add dev eth0 root handle 1: htb default 10

# 添加TBF(令牌桶过滤器)
tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms
2. 分类与带宽控制
# 创建父类(总带宽100Mbps)
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit

# 创建子类(保证30Mbps,最大50Mbps)
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 30mbit ceil 50mbit
3. 过滤器应用
# 基于端口分类
tc filter add dev eth0 protocol ip parent 1: prio 1 u32 \
  match ip dport 80 0xffff flowid 1:10

# 基于DSCP标记
tc filter add dev eth0 parent 1: protocol ip prio 1 \
  basic match "ip_dscp 46" flowid 1:20
4. 监控与统计
tc -s qdisc show dev eth0         # 队列统计
tc -s class show dev eth0         # 类统计
tc filter show dev eth0           # 过滤器列表

五、rtacct 命令:路由统计工具

功能:查看按路由表分类的网络流量统计

基本用法:
rtacct                       # 显示所有路由表统计
rtacct -n                    # 数值格式(非人类可读)
rtacct -r                   # 实时刷新(类似top)
输出解析:
Destination    Gateway       Interface   BytesIn   PktsIn   BytesOut  PktsOut 
default        192.168.1.1   eth0        15.4GB    12M      8.2GB     6.5M
10.0.0.0/24    10.0.0.1      tun0        2.1GB     1.2M     3.7GB     2.8M
高级过滤:
rtacct 192.168.1.0/24        # 特定子网统计
rtacct -f inet6              # IPv6统计

注意:在较新内核中,部分功能已被 ip -s route 替代


六、命令对比与使用场景

功能主要命令替代传统工具典型场景
接口管理ip linkifconfig配置MTU、MAC、状态
IP地址分配ip addressifconfig多IP、IPv6配置
路由管理ip routeroute多路由表、策略路由
ARP管理ip neighbourarp静态ARP绑定
套接字监控ssnetstat连接故障排查、性能分析
网桥管理bridgebrctl虚拟交换机配置
QoS流量控制tc无直接替代带宽限制、优先级调度
路由流量统计rtacct流量路径分析、计费

七、实用技巧与注意事项

  1. 持久化配置

    # 保存tc配置
    tc qdisc save dev eth0 > /etc/tc-eth0.conf
    # 恢复配置
    tc qdisc restore dev eth0 < /etc/tc-eth0.conf
    
  2. JSON输出(iproute2 5.0+)

    ip -j link show | jq '.[] | {ifname, mtu, operstate}'
    
  3. 网络命名空间操作

    ip netns add vpn
    ip -n vpn link set lo up
    ip netns exec vpn ip addr add 10.8.0.1/24 dev eth0
    
  4. VXLAN高级配置

    ip link add vxlan42 type vxlan id 42 \
      local 192.168.1.1 \
      remote 192.168.1.2 \
      dstport 4789 \
      learning ageing 300
    
  5. TC限速组合

    # 组合HTB+TBF实现精确控制
    tc qdisc add dev eth0 root handle 1: htb
    tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit
    tc qdisc add dev eth0 parent 1:1 handle 10: tbf rate 50mbit burst 50kb latency 50ms
    

掌握这些命令可实现对 Linux 网络的全面控制,建议结合 man 手册深入学习:

man ip-route
man tc-htb
man bridge



























Linux的iproute2的ip,ss,bridge,tc,rtacct命令详解

以下是 Linux iproute2 工具集中核心命令的深度解析,涵盖 ipssbridgetcrtacct 的功能、使用场景和示例:


一、ip 命令:全能网络管理工具

功能:替代 ifconfig/route/arp,管理接口、地址、路由、策略路由、隧道等。
常用对象

  • link:物理/虚拟接口管理
  • address:IP地址配置
  • route:路由表操作
  • neighbor:ARP/NDISC缓存
  • rule:策略路由
  • tunnel:隧道接口
关键操作示例:
# 1. 接口管理
ip link show                      # 显示所有接口状态
ip link set eth0 mtu 9000         # 修改MTU
ip link add br0 type bridge       # 创建网桥

# 2. IP地址配置
ip addr add 192.168.1.10/24 dev eth0  # 添加IP
ip addr flush eth0                 # 清除所有IP

# 3. 路由管理
ip route add 10.0.0.0/24 via 192.168.1.1  # 添加静态路由
ip route add default via 192.168.1.1      # 设置默认网关
ip route get 8.8.8.8               # 检测目标路由路径

# 4. 策略路由
ip rule add from 192.168.2.0/24 table 100  # 源IP使用自定义路由表
ip route add default via 10.0.0.1 table 100

# 5. 隧道配置
ip tunnel add gre1 mode gre local 10.1.1.1 remote 20.2.2.1 ttl 64

二、ss 命令:套接字统计(Socket Statistics)

功能:替代 netstat,高效监控套接字连接状态,支持大规模连接分析。
优势:直接读取内核数据,速度比 netstat 快 10 倍以上。

关键参数:
ss -t -a      # 所有TCP连接 (-u: UDP)
ss -l         # 监听端口
ss -p         # 显示进程信息
ss -s         # 统计摘要
ss -o state established '( dport = :80 )'  # 过滤HTTP连接
输出解析:
ESTAB  0  0  192.168.1.10:ssh   203.0.113.5:59284  
# 状态 | 接收队列 | 发送队列 | 本地地址:端口 | 远端地址:端口

三、bridge 命令:二层网桥管理

功能:替代 brctl,管理网桥、VLAN、MAC地址表(FDB)。

核心操作:
# 1. 网桥管理
bridge link show              # 显示桥接端口
bridge link set dev eth0 cost 10  # 设置端口路径开销

# 2. VLAN配置
bridge vlan add vid 10 dev eth0  # 添加VLAN成员
bridge vlan del vid 10 dev eth0

# 3. MAC地址表操作
bridge fdb add 00:11:22:33:44:55 dev eth0 master  # 添加静态MAC
bridge fdb flush dev eth0      # 清除动态MAC条目

四、tc 命令:流量控制(Traffic Control)

功能:实现 QoS(服务质量控制),包括限速、优先级调度、延迟模拟等。

核心概念:
  • qdisc (队列规则):接口的流量调度算法(如 htb, pfifo, netem
  • class (类):流量分类容器
  • filter (过滤器):流量分类规则
典型场景:
# 1. 限速 (HTB算法)
tc qdisc add dev eth0 root handle 1: htb default 10
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 50mbit ceil 100mbit

# 2. 网络模拟 (netem)
tc qdisc add dev eth0 root netem delay 100ms loss 1%  # 添加100ms延迟+1%丢包

# 3. 优先级调度
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 80 0xffff flowid 1:10

五、rtacct 命令:路由统计监控

功能:查看按路由条目的流量统计(替代旧版 rtstat)。
数据源/proc/net/rt_acct

使用示例:
rtacct  # 显示所有路由流量统计

输出格式

Destination    Packets    Bytes 
192.168.1.0/24  12045   15 MB
10.0.0.0/8       8942    8 MB
现代替代方案:
ip -s route  # 显示带统计的路由表

六、命令对比总结表

功能传统命令iproute2命令优势
接口管理ifconfigip link支持VLAN/Bond等虚拟设备
路由管理routeip route支持多路由表、策略路由
ARP缓存arpip neighbor支持IPv6邻居发现(NDISC)
套接字统计netstatss速度更快,支持复杂过滤
网桥管理brctlbridge统一VLAN/FDB管理
流量控制无直接替代tc完整QoS支持
路由流量统计rtstat (旧版)rtacct按目标网络统计

七、高级技巧

  1. 批量操作

    ip -batch <<EOF
    link set eth0 up
    addr add 192.168.1.10/24 dev eth0
    route add default via 192.168.1.1
    EOF
    
  2. JSON输出 (需较新版本)

    ip -j link show | jq  # 结合jq解析
    
  3. 网络命名空间

    ip netns add ns1
    ip -n ns1 link set lo up  # 在命名空间内操作
    

注意:所有 iproute2 命令需 root 权限,配置重启后失效,持久化需写入网络配置文件(如 /etc/network/interfaces 或 Netplan/NM)。



























Linux iproute2 全套命令终极详解:ipssbridgetcrtacct

iproute2 是 Linux 网络管理的现代化工具集,取代了陈旧的 net-tools。以下是五大核心命令的深度解析:


一、ip - 全能网络配置工具

功能:接口管理、路由配置、邻居表操作、策略路由、隧道设置

# 接口管理
ip link set eth0 up                     # 启用接口
ip addr add 192.168.1.10/24 dev eth0    # 添加IP地址
ip -s link show                         # 查看接口统计信息

# 路由管理
ip route add default via 192.168.1.1    # 添加默认网关
ip route show table 100                 # 查看自定义路由表

# 策略路由
ip rule add from 10.0.0.0/24 table 200  # 源IP匹配策略
ip rule show                            # 显示路由策略

# 邻居表(ARP)
ip neigh add 192.168.1.5 lladdr aa:bb:cc:dd:ee:ff nud perm # 添加永久ARP
ip -s neigh show                        # 显示ARP表及统计

核心功能

  • 链路层:ip link
  • 网络层:ip addrip route
  • 策略路由:ip rule
  • 邻居发现:ip neigh
  • 网络命名空间:ip netns

二、ss - 高级套接字统计工具

功能:实时监控网络连接、诊断连接问题、分析性能瓶颈

# 常用组合
ss -tulpn                              # 查看监听端口及进程
ss -ti dst 192.168.1.100               # 查看目标IP的TCP内部状态
ss -o state time-wait                  # 显示TIME-WAIT状态连接

# 高级过滤
ss -nt '( dport = :80 or dport = :443 )' # 查看HTTP/HTTPS连接
ss -e src 10.0.0.0/24 sport = :22      # 查看来自子网的SSH连接详情

关键特性

  • TCP内部状态:ss -ti 显示cwnd/rtt等拥塞控制参数
  • 进程关联:-p 参数显示占用端口的进程
  • 毫秒级响应:直接读取内核数据,比netstat快10倍

三、bridge - 专业网桥管理

功能:VLAN配置、STP管理、MAC地址表操作

# VLAN配置
bridge vlan add dev eth0 vid 10 pvid untagged  # 添加VLAN10为PVID
bridge vlan add dev eth0 vid 20                # 添加标记VLAN20

# MAC地址管理
bridge fdb add aa:bb:cc:dd:ee:ff dev eth0 vlan 10 static # 静态MAC
bridge fdb flush dev eth0                      # 清空MAC表

# STP管理
bridge link set dev eth0 cost 50               # 设置端口开销
bridge link set dev eth0 state blocking        # 手动阻塞端口

典型应用场景

  1. KVM/QEMU 虚拟机网络
  2. Docker 容器网络
  3. 企业级VLAN划分
  4. SDN网络基础架构

四、tc - 流量控制大师

功能:带宽分配、流量整形、QoS策略、流量监控

# 创建HTB队列
tc qdisc add dev eth0 root handle 1: htb default 30
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit

# 添加子类
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 30mbit ceil 50mbit

# 流量分类
tc filter add dev eth0 protocol ip parent 1: u32 \
  match ip dport 80 0xffff flowid 1:10       # HTTP流量分类

# 监控统计
tc -s class show dev eth0                    # 查看带宽使用情况

核心组件

graph TD
    A[Root Qdisc] --> B[Class 1:1]
    B --> C[Class 1:10]
    B --> D[Class 1:20]
    C --> E[SFQ]
    D --> F[SFQ]
    G[Filter] --> C
    H[Filter] --> D

流量控制模型

  1. Qdisc:队列规则(HTB/TBF/SFQ)
  2. Class:流量类别
  3. Filter:流量分类器(u32/fwmark)
  4. Policer:流量策略器

五、rtacct - 路由统计监控

功能:按路由表统计流量、监控网络使用情况

# 查看所有路由表流量统计
rtacct

# 查看指定路由表(table 100)
rtacct -t 100

# 实时监控
watch -n 1 rtacct

输出示例

Route table: default
Destination    Packets    Bytes    Src Packets    Src Bytes
192.168.1.0/24    150K    180MB        200K        240MB
10.0.0.0/8         50K     60MB         70K         84MB

应用场景

  1. 多线路负载均衡统计
  2. VPN流量监控
  3. 策略路由流量分析
  4. 网络计费数据采集

六、命令对比表

功能主要命令替代命令优势
接口管理ip linkifconfig支持VXLAN/GRE等新型接口
路由管理ip routeroute支持多路由表和策略路由
连接监控ssnetstat速度更快,信息更详细
网桥管理bridgebrctl完善的VLAN支持
流量控制tcLinux唯一原生QoS方案
路由统计rtacct按路由表分类统计

七、高级应用场景

场景1:企业级QoS部署

# VoIP优先 (EF流量)
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 1mbit ceil 2mbit prio 1
tc filter add dev eth0 protocol ip parent 1: u32 \
  match ip dport 5060 0xffff flowid 1:10

# 关键业务保障
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 10mbit ceil 20mbit prio 2

场景2:多租户VLAN网络

# 创建VLAN感知网桥
ip link add name br-tenant type bridge vlan_filtering 1

# 配置VLAN
bridge vlan add dev eth0 vid 100 pvid untagged
bridge vlan add dev eth1 vid 200 pvid untagged

# 隔离租户流量
bridge fdb flush dev br-tenant vlan 100

场景3:双线负载均衡监控

# 添加策略路由
ip rule add from 192.168.1.0/24 table 100
ip rule add from 192.168.2.0/24 table 200

# 监控流量
watch "rtacct -t 100; rtacct -t 200"

八、调试技巧

  1. tc可视化

    tc -graph qdisc show dev eth0 | dot -Tpng > qdisc.png
    
  2. SS实时分析

    ss -t -i state established -o | grep -E 'cwnd|rtt'
    
  3. bridge诊断

    bridge -d vlan show  # 显示详细VLAN信息
    
  4. 内核日志

    dmesg | grep -i 'tc\|qdisc'
    
  5. 流量重放

    tc qdisc add dev eth0 handle ffff: ingress
    tc filter add dev eth0 parent ffff: matchall action mirred egress mirror dev eth1
    

掌握这五大工具,您将能应对从基础网络配置到高级流量工程的任何挑战!



























Linux ip 命令终极详解

ip 是 iproute2 套件的核心命令,提供 Linux 系统的全栈网络管理能力。它取代了传统的 ifconfigroutearp 等工具,支持现代网络的所有高级特性。以下是深度解析:


一、命令结构

ip [OPTIONS] OBJECT COMMAND [PARAMETERS]
  • OBJECTlink (接口), address (地址), route (路由), neigh (邻居/ARP), tunnel (隧道)
  • OPTIONS
    • -4/-6:IPv4/IPv6
    • -s:显示统计信息
    • -d:详细信息(显示内核参数)
    • -j:JSON 输出(5.0+)
    • -c:彩色输出
    • -br:简洁表格输出

二、核心模块详解

1. 接口管理 (ip link) - 物理/虚拟接口控制
# 查看接口
ip -c -br link show                    # 彩色简洁列表
ip -d link show eth0                   # 显示驱动详情(含VLAN/绑定信息)

# 接口操作
ip link set eth0 up                    # 启用接口
ip link set eth0 mtu 9000              # 设置MTU
ip link set eth0 txqueuelen 1000       # 队列长度
ip link set eth0 name wan0             # 重命名接口
ip link set eth0 address 00:11:22:33:44:55 # 修改MAC

# 虚拟接口
ip link add veth0 type veth peer name veth1 # 创建veth对
ip link add dummy0 type dummy          # 创建虚拟接口
2. IP地址管理 (ip address) - IP配置
# 地址操作
ip addr add 192.168.1.100/24 dev eth0      # 添加IPv4
ip -6 addr add 2001:db8::1/64 dev eth0     # 添加IPv6
ip addr add 192.168.1.200/24 dev eth0 label eth0:backup # 别名地址
ip addr del 192.168.1.100/24 dev eth0      # 删除地址

# 地址查看
ip -br addr show                          # 简洁显示
ip addr show dev eth0                     # 指定接口
ip addr show to 192.168.1.0/24            # 显示子网地址

# 批量操作
ip addr flush dev eth0                    # 清除所有地址
ip addr flush to 192.168.1.0/24           # 清除子网地址
3. 路由管理 (ip route) - 路由表控制
# 查看路由
ip route show                          # 主表
ip route show table local              # local表
ip route get 8.8.8.8 from 192.168.1.50 # 检查特定路由

# 路由操作
ip route add 10.0.0.0/24 via 192.168.1.1 metric 100 # 静态路由
ip route add default via 192.168.1.1   # 默认网关
ip route replace default via 10.0.0.1  # 替换默认路由
ip route del 10.0.0.0/24               # 删除路由

# 多路由表
echo "200 vpn" >> /etc/iproute2/rt_tables # 创建新表
ip route add default via 10.8.0.1 table vpn
4. 邻居表管理 (ip neighbour) - ARP/NDP
# 查看邻居
ip neigh show                          # ARP缓存
ip -s neigh show nud reachable         # 仅显示可达邻居

# 邻居操作
ip neigh add 192.168.1.50 lladdr 00:0c:29:xx:xx:xx dev eth0 nud permanent # 永久ARP
ip neigh change 192.168.1.50 lladdr 00:0c:29:yy:yy:yy dev eth0 # 修改条目
ip neigh del 192.168.1.50 dev eth0     # 删除条目
ip neigh flush dev eth0                # 清空接口缓存
5. 隧道管理 (ip tunnel) - 隧道接口
# 创建隧道
ip tunnel add gre0 mode gre local 203.0.113.1 remote 198.51.100.1 ttl 64
ip tunnel add ipip0 mode ipip local 203.0.113.1 remote 198.51.100.1
ip link add vxlan42 type vxlan id 42 local 192.168.1.1 dstport 4789

# 隧道操作
ip tunnel show                         # 显示隧道
ip link set gre0 up                    # 启用隧道
ip addr add 10.0.0.1/30 dev gre0       # 分配隧道IP
ip tunnel del gre0                     # 删除隧道
6. 策略路由 (ip rule) - 高级路由
# 规则管理
ip rule show                           # 显示规则
ip rule add from 192.168.2.0/24 lookup vpn # 源IP策略
ip rule add fwmark 0x1 lookup 100      # 防火墙标记
ip rule add iif eth0 lookup 200        # 入接口策略
ip rule del priority 32765             # 删除规则

# 结合路由表
ip route add default via 10.0.0.1 table 100

三、高级功能

1. VRF (虚拟路由转发)
# 创建VRF
ip link add vrf-red type vrf table 10
ip link set dev eth0 master vrf-red

# 在VRF中执行命令
ip vrf exec vrf-red ping 10.0.0.1
2. 网络命名空间
# 命名空间操作
ip netns add ns1                      # 创建命名空间
ip netns exec ns1 ip link set lo up   # 在命名空间中操作
ip link set veth1 netns ns1           # 移动接口到命名空间

# 跨命名空间连接
ip link add veth0 type veth peer name veth1
ip link set veth1 netns ns1
3. 多路径路由 (ECMP)
# 添加多路径路由
ip route add default \
    nexthop via 192.168.1.1 weight 1 \
    nexthop via 192.168.2.1 weight 2
4. Anycast 地址
# 多节点配置相同Anycast地址
ip addr add 203.0.113.100/32 dev eth0 scope global

四、监控与诊断

1. 实时监控
watch -n1 "ip -s link"                # 接口统计
ip -s -s link show eth0               # 详细统计
tc -s qdisc show dev eth0             # 流量控制统计
2. 路由诊断
ip route get 8.8.8.8 from 192.168.1.50 # 检查路由路径
ip route show cache                   # 查看路由缓存
3. 连接跟踪
conntrack -L                          # 查看NAT连接

五、与传统命令对比

功能ip 命令传统命令
接口状态ip link showifconfig
IP地址配置ip addr addifconfig eth0 add
路由表ip route showroute -n
ARP缓存ip neigh showarp -an
隧道管理ip tunnel addiptunnel add
策略路由ip rule add无直接对应
VRF支持原生支持不支持

六、生产环境示例

1. 绑定+ VLAN + 网桥
# 创建绑定
ip link add bond0 type bond mode 802.3ad
ip link set eth0 master bond0
ip link set eth1 master bond0

# 创建VLAN
ip link add link bond0 name bond0.100 type vlan id 100

# 创建网桥
ip link add br100 type bridge
ip link set bond0.100 master br100

# 激活
ip link set bond0 up
ip link set bond0.100 up
ip link set br100 up
ip addr add 192.168.100.1/24 dev br100
2. 多WAN策略路由
# 创建路由表
echo "200 wan1" >> /etc/iproute2/rt_tables
echo "201 wan2" >> /etc/iproute2/rt_tables

# 添加默认路由
ip route add default via 192.168.1.1 table wan1
ip route add default via 192.168.2.1 table wan2

# 创建策略规则
ip rule add from 192.168.10.0/24 lookup wan1
ip rule add from 192.168.20.0/24 lookup wan2

七、注意事项

  1. 临时配置ip 命令的配置重启后失效,持久化需:

    • NetworkManager:nmcli
    • systemd-networkd:/etc/systemd/network/
    • Debian/Ubuntu:/etc/network/interfaces
    • RHEL/CentOS:/etc/sysconfig/network-scripts/
  2. 权限要求:所有操作需 root 权限

  3. 危险操作

    ip link set eth0 down  # 断网风险
    ip route flush table main # 清空主路由表
    
  4. 诊断工具

    ethtool -i eth0         # 驱动信息
    tc -s qdisc show        # QoS统计
    ss -tinp                # 连接诊断
    
  5. 新特性支持

    ip link add macvlan0 link eth0 type macvlan mode bridge # MACVLAN
    ip link add ipvlan0 link eth0 type ipvlan mode l2      # IPVLAN
    

完整文档:man ip 或访问 iproute2 官方文档

掌握 ip 命令是 Linux 网络管理的核心技能,建议结合 -d(调试)和 -s(统计)选项进行深度探索,并在测试环境中实践复杂配置。



























Linux ip 命令终极详解:网络管理的瑞士军刀

ip 是 iproute2 工具集的核心命令,完全取代了 ifconfig/route/arp/netstat 等传统工具,提供统一的网络栈管理接口。它能操作 Linux 内核的网络子系统,实现从物理层到应用层的全面控制。


一、命令结构

ip [OPTIONS] OBJECT COMMAND [PARAMS]
核心 OBJECT:
对象功能描述示例命令片段
link网络接口管理ip link set eth0 up
addressIP地址管理ip addr add 192.168.1.2/24 dev eth0
route路由表管理ip route add default via 192.168.1.1
neighborARP/NDISC缓存管理ip neigh show
rule策略路由管理ip rule add from 10.0.0.0/24 table 100
tunnel隧道接口管理ip tunnel add tun0 mode gre
netns网络命名空间管理ip netns add ns1
maddress多播地址管理ip maddr show
xfrmIPsec策略管理ip xfrm state
常用 OPTIONS:
-4/-6        # IPv4/IPv6专用模式
-s           # 显示统计信息
-d           # 显示详细信息
-j           # JSON格式输出
-p           # 美化输出(可读性更强)
-b           # 从文件批量执行命令

二、核心功能详解

1. 接口管理 (ip link)
# 创建虚拟接口
ip link add veth0 type veth peer name veth1

# 启用/禁用接口
ip link set eth0 up
ip link set wlan0 down

# 修改MAC地址
ip link set eth0 address 00:11:22:33:44:55

# 设置MTU
ip link set eth0 mtu 9000

# 重命名接口
ip link set eth0 name wan0

# 查看接口详情
ip -s -d link show eth0
2. IP地址管理 (ip address)
# 添加IP地址
ip addr add 192.168.1.100/24 dev eth0
ip addr add 2001:db8::1/64 dev eth0

# 删除IP地址
ip addr del 192.168.1.100/24 dev eth0

# 添加辅助IP
ip addr add 192.168.1.101/24 dev eth0 label eth0:secondary

# 查看地址配置
ip -br addr show  # 简洁格式
3. 路由管理 (ip route)
# 添加默认网关
ip route add default via 192.168.1.1

# 添加静态路由
ip route add 10.8.0.0/16 via 192.168.2.1

# 添加黑洞路由
ip route add blackhole 203.0.113.0/24

# 多路由表操作
echo "100 custom" >> /etc/iproute2/rt_tables
ip route add 192.168.3.0/24 via 10.0.0.1 table custom

# 查看路由缓存
ip route get 8.8.8.8
4. ARP邻居表 (ip neighbor)
# 查看ARP缓存
ip -s neigh show

# 添加静态ARP条目
ip neigh add 192.168.1.5 lladdr 00:0c:29:xx:xx:xx dev eth0 nud perm

# 删除ARP条目
ip neigh del 192.168.1.5 dev eth0

# 刷新ARP缓存
ip neigh flush dev eth0
5. 策略路由 (ip rule)
# 查看策略规则
ip rule show

# 基于源IP的路由
ip rule add from 192.168.2.0/24 table 200

# 基于服务类型的路由
ip rule add tos 0x10 table voip

# 基于防火墙标记的路由
ip rule add fwmark 0x1 table vpn

# 删除规则
ip rule del pref 32765
6. 网络命名空间 (ip netns)
# 创建命名空间
ip netns add ns1

# 在命名空间中执行命令
ip netns exec ns1 ip addr show

# 将接口移到命名空间
ip link set veth1 netns ns1

# 命名空间间通信
ip link add veth0 netns ns0 type veth peer name veth1 netns ns1
7. 隧道管理 (ip tunnel)
# 创建GRE隧道
ip tunnel add gre0 mode gre remote 203.0.113.1 local 192.168.1.1 ttl 255
ip link set gre0 up
ip addr add 10.0.0.1/30 dev gre0

# 创建IPIP隧道
ip tunnel add ipip0 mode ipip remote 198.51.100.1

三、高级功能

1. VRF(虚拟路由转发)
# 创建VRF
ip link add vrf-blue type vrf table 10
ip link set vrf-blue up

# 将接口分配到VRF
ip link set eth0 master vrf-blue
2. 网络诊断组合技
# 路由追踪 + 接口检测
ip route get 8.8.8.8 && ping -c1 8.8.8.8

# TCP连接问题诊断
ip route get $IP && ip neigh show $IP && ss -nt dst $IP

# MTU路径检测
ping -M do -s 1500 8.8.8.8
3. 批量操作
# 批量配置脚本
ip -b - <<EOF
link set eth0 up
addr add 192.168.1.100/24 dev eth0
route add default via 192.168.1.1
EOF
4. 策略路由实战
# 创建路由表
echo "200 wan2" >> /etc/iproute2/rt_tables

# 添加规则
ip rule add from 192.168.2.0/24 table wan2
ip rule add fwmark 0x2 table wan2

# 配置路由表
ip route add default via 203.0.113.1 table wan2

四、与传统命令对比

功能iproute2net-tools优势
接口信息ip -s linkifconfig -a更详细的统计信息
路由表ip routeroute -n支持多路由表
ARP缓存ip neigharp -n显示邻居状态
多播地址ip maddrnetstat -g按接口显示更清晰
网络命名空间ip netns不支持容器网络基础
VLAN接口ip link add eth0.10 type vlanvconfig内核原生支持

五、性能监控技巧

1. 实时接口统计
watch -n1 'ip -s link show eth0'
2. 路由缓存监控
ip -s route show cache
3. 邻居表状态监控
ip -s neigh show nud reachable
4. 网络故障诊断流程
graph TD
    A[连接问题] --> B{ip link show}
    B -->|接口DOWN| C[启用接口]
    B -->|接口UP| D{ip addr show}
    D -->|无IP| E[配置IP地址]
    D -->|有IP| F{ping网关}
    F -->|不通| G{ip neigh show}
    G -->|无ARP| H[检查物理连接]
    G -->|有ARP| I{ip route get}
    I -->|路由错误| J[修复路由]
    I -->|路由正确| K[检查防火墙]

六、最佳实践

  1. 永久配置ip命令修改即时生效但重启丢失,持久化需写入配置文件:

    • Debian/Ubuntu: /etc/network/interfaces
    • RHEL/CentOS: /etc/sysconfig/network-scripts/ifcfg-*
  2. 脚本安全:重要操作前备份配置

    ip link save > network-backup.txt
    
  3. 生产环境建议

    # 使用-4/-6避免歧义
    ip -4 route add 192.168.1.0/24 via 10.0.0.1
    
    # 重要操作使用-n模拟
    ip -n netns exec test ping 8.8.8.8
    
  4. 容器网络配置

    # 为容器创建网络
    ip netns add container1
    ip link add veth-host type veth peer name veth-container
    ip link set veth-container netns container1
    ip netns exec container1 ip addr add 172.17.0.2/16 dev veth-container
    

ip 命令是现代 Linux 网络管理的基石,掌握它能让你:

  • 轻松配置复杂网络拓扑
  • 精准诊断网络问题
  • 实现高级路由策略
  • 构建容器/虚拟化网络
  • 优化网络性能

通过 man ipip help 可获取完整文档,实践时建议从基础操作开始,逐步深入高级功能。



























Linux iproute2ip 命令详解

ip 命令是 Linux 网络管理的瑞士军刀,属于 iproute2 工具集的核心组件,用于替代传统的 ifconfigroutearp 等命令。它提供了统一接口管理网络设备、地址、路由、邻居等所有网络层功能。

一、命令结构

ip [OPTIONS] OBJECT COMMAND [ARGUMENTS]

常用 OBJECT(对象):

  • link:网络接口管理
  • address:IP地址管理
  • route:路由表管理
  • neighbor:ARP/NDP邻居缓存
  • rule:策略路由规则
  • tunnel:隧道管理
  • maddress:组播地址
  • monitor:网络事件监控

常用 OPTIONS:

  • -s, -stats, -statistics:显示详细统计信息
  • -d, -details:显示详细信息
  • -4:仅IPv4操作
  • -6:仅IPv6操作
  • -b, -batch:从文件读取命令
  • -br, --brief:简洁表格输出
  • -j, -json:JSON格式输出
  • -p, -pretty:美化输出格式

二、核心功能详解

1. ip link - 网络接口管理

功能:管理物理/虚拟网络接口状态和属性

常用命令:
# 显示所有接口
ip link show
ip -br link show  # 简洁模式

# 启用/禁用接口
ip link set eth0 up
ip link set eth0 down

# 修改接口属性
ip link set eth0 mtu 9000
ip link set eth0 address 00:11:22:33:44:55
ip link set eth0 name wan  # 重命名(需先down)

# 创建虚拟接口
ip link add br0 type bridge        # 创建网桥
ip link add bond0 type bond        # 创建bond
ip link add veth1 type veth peer name veth2  # 创建veth对

# 删除接口
ip link del br0

2. ip address - IP地址管理

功能:管理IPv4/IPv6地址配置

常用命令:
# 显示地址
ip address show
ip -br addr show  # 简洁模式

# 添加/删除地址
ip addr add 192.168.1.10/24 dev eth0
ip addr add 2001:db8::1/64 dev eth0
ip addr del 192.168.1.10/24 dev eth0

# 特殊操作
ip addr flush dev eth0  # 清除所有地址
ip addr add 10.0.0.1/24 dev eth0 label eth0:0  # 别名地址

3. ip route - 路由表管理

功能:管理IPv4/IPv6路由表

常用命令:
# 显示路由
ip route show
ip route show table local  # 查看local表

# 添加/删除路由
ip route add 10.0.0.0/24 via 192.168.1.1
ip route add default via 192.168.1.1
ip route del 10.0.0.0/24

# 多路由表操作
ip route add 10.0.0.0/24 via 10.1.1.1 table 100
ip route show table 100

# 路由缓存
ip route flush cache  # 刷新路由缓存
ip route get 8.8.8.8  # 查询特定目标的路由路径

4. ip neighbor - 邻居表管理

功能:管理ARP表(IPv4)和NDP表(IPv6)

常用命令:
# 显示邻居表
ip neighbor show
ip neigh show dev eth0

# 添加/删除静态条目
ip neigh add 192.168.1.100 lladdr 00:11:22:33:44:55 dev eth0 nud permanent
ip neigh del 192.168.1.100 dev eth0

# 修改状态
ip neigh change 192.168.1.100 lladdr 00:11:22:33:44:55 dev eth0 nud reachable

5. ip rule - 策略路由规则

功能:管理策略路由规则数据库

常用命令:
# 显示规则
ip rule show

# 添加规则
ip rule add from 192.168.2.0/24 table 100
ip rule add to 10.0.0.0/24 table 200
ip rule add iif eth0 table 300
ip rule add fwmark 1 table 100

# 删除规则
ip rule del from 192.168.2.0/24

6. ip tunnel - 隧道管理

功能:创建和管理IP隧道

示例:
# 创建GRE隧道
ip tunnel add gre1 mode gre local 203.0.113.1 remote 198.51.100.1 ttl 255
ip link set gre1 up
ip addr add 10.0.0.1/30 dev gre1

# 删除隧道
ip tunnel del gre1

7. ip maddress - 组播地址管理

功能:管理组播地址

示例:
ip maddr show dev eth0
ip maddr add 01:00:5e:00:00:01 dev eth0

8. ip monitor - 网络事件监控

功能:实时监控网络事件

示例:
ip monitor all  # 监控所有事件
ip monitor route  # 监控路由变化

三、高级用法

1. 网络命名空间操作

# 创建命名空间
ip netns add ns1

# 在命名空间中执行命令
ip netns exec ns1 ip link show

# 将接口移到命名空间
ip link set veth0 netns ns1

2. VRF管理

# 创建VRF
ip link add vrf-blue type vrf table 10

# 关联接口
ip link set dev eth0 master vrf-blue

3. 批量操作

# 从文件执行命令
ip -b commands.txt

# 文件内容示例:
link set eth0 up
addr add 192.168.1.10/24 dev eth0
route add default via 192.168.1.1

4. JSON输出

ip -j link show | jq  # 需要jq工具

四、实用命令组合

功能命令
查看所有接口状态ip -br link show
查看所有接口IPip -br addr show
查看路由表ip route show
查看ARP表ip -br neigh show
跟踪路由路径ip route get <目标IP>
创建VLANip link add link eth0 name eth0.10 type vlan id 10
查看统计信息ip -s link show eth0
监控网络事件ip monitor all

五、与传统命令对比

功能传统命令ip命令
接口状态ifconfigip link show
IP地址ifconfigip addr show
路由表route -nip route show
ARP表arp -nip neigh show
添加路由route addip route add
隧道管理iptunnelip tunnel
VLAN管理vconfigip link add..vlan

六、注意事项

  1. ip 命令需要 root 权限执行
  2. 配置变更在重启后失效,需持久化配置:
    • Debian/Ubuntu: /etc/network/interfaces
    • RHEL/CentOS: /etc/sysconfig/network-scripts/
    • 通用方法: NetworkManager 或 systemd-networkd
  3. 修改网络配置可能导致连接中断
  4. 使用 -s 选项查看统计信息有助于故障排查

ip 命令是 Linux 网络管理的核心工具,掌握它可以高效地配置和诊断复杂网络环境。



























Linux ip link 命令详解

ip link 是 iproute2 套件中用于管理网络接口(数据链路层)的核心命令,负责物理和虚拟接口的创建、配置和监控。它替代了传统的 ifconfig 命令,提供更强大的接口控制能力。


一、命令结构与常用选项

ip [OPTIONS] link {COMMAND} [PARAMETERS]
常用选项:
  • -s, --stats:显示接口统计信息
  • -d, --details:显示详细信息(驱动参数等)
  • -c, --color:彩色输出
  • -br, --brief:简洁表格输出
  • -j, --json:JSON 格式输出
  • -4 / -6:IPv4/IPv6 相关接口

二、核心功能详解

1. 查看接口信息 (show/list)
# 查看所有接口
ip link show

# 简洁表格输出(最常用)
ip -br link show
# 输出示例:eth0 UP 00:0c:29:3d:5e:8e 1500

# 查看指定接口
ip link show dev eth0

# 显示详细信息(含驱动参数)
ip -d link show eth0

# 显示统计信息
ip -s link show eth0
ip -s -s link show eth0  # 更详细统计
2. 接口状态控制
# 启用接口
ip link set eth0 up

# 禁用接口
ip link set eth0 down

# 重启接口(禁用后启用)
ip link set eth0 down && ip link set eth0 up
3. 接口属性配置
# 修改MTU值
ip link set eth0 mtu 9000

# 修改MAC地址
ip link set eth0 address 00:11:22:33:44:55

# 修改接口名称
ip link set eth0 name wan0

# 设置传输队列长度
ip link set eth0 txqueuelen 1000

# 启用/禁用混杂模式
ip link set eth0 promisc on
ip link set eth0 promisc off

# 启用/禁用ARP协议
ip link set eth0 arp on
ip link set eth0 arp off

# 设置别名描述
ip link set eth0 alias "Primary Network Interface"
4. 虚拟接口管理
# 创建VLAN接口
ip link add link eth0 name eth0.10 type vlan id 10

# 创建MACVLAN接口
ip link add macvlan0 link eth0 type macvlan mode bridge

# 创建IPVLAN接口
ip link add ipvlan0 link eth0 type ipvlan mode l2

# 创建虚拟以太网对(veth pair)
ip link add veth0 type veth peer name veth1

# 创建网桥接口
ip link add br0 type bridge

# 创建绑定接口(Bonding)
ip link add bond0 type bond mode 802.3ad

# 创建Dummy接口
ip link add dummy0 type dummy
5. 接口关系管理
# 将接口加入网桥
ip link set eth0 master br0

# 将接口从网桥移除
ip link set eth0 nomaster

# 将接口加入绑定组
ip link set eth0 master bond0

# 设置VLAN接口的父接口
ip link set vlan10 link eth0
6. 接口删除
# 删除虚拟接口
ip link delete eth0.10
ip link delete br0
ip link delete veth0

# 删除前需关闭接口
ip link set eth0.10 down && ip link delete eth0.10

三、输出详解与示例

示例输出:
$ ip -d -s link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:3d:5e:8e brd ff:ff:ff:ff:ff:ff promiscuity 0 
    addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 
    RX: bytes  packets  errors  dropped missed  mcast   
    12567289   85632    0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns 
    9876543    65432    0       0       0       0
字段解析:
  1. 接口标识

    • 2::接口索引号
    • eth0::接口名称
  2. 接口状态

    • <BROADCAST,MULTICAST,UP,LOWER_UP>:接口标志
      • BROADCAST:支持广播
      • MULTICAST:支持组播
      • UP:接口已启用
      • LOWER_UP:物理链路已连接
    • state UP:操作状态
  3. 配置参数

    • mtu 1500:最大传输单元
    • qdisc fq_codel:队列规则
    • group default:接口组
    • qlen 1000:传输队列长度
  4. 链路层信息

    • link/ether:MAC地址
    • brd ff:ff:ff:ff:ff:ff:广播地址
  5. 驱动信息

    • promiscuity 0:非混杂模式
    • addrgenmode eui64:地址生成模式
    • gso_max_size:TCP分段卸载最大值
  6. 统计信息

    • RX:接收统计(字节/包/错误/丢弃等)
    • TX:发送统计

四、高级功能与使用场景

1. 绑定接口配置
# 创建绑定接口
ip link add bond0 type bond mode 802.3ad

# 添加成员接口
ip link set eth0 master bond0
ip link set eth1 master bond0

# 设置绑定参数
ip link set bond0 type bond miimon 100 lacp_rate fast
2. 网桥高级配置
# 创建网桥
ip link add br0 type bridge

# 设置网桥参数
ip link set br0 type bridge stp_state 1 forward_delay 1500

# 添加端口
ip link set eth0 master br0
ip link set veth1 master br0
3. 网络命名空间操作
# 创建命名空间
ip netns add ns1

# 移动接口到命名空间
ip link set veth1 netns ns1

# 在命名空间中操作
ip netns exec ns1 ip link set veth1 up
4. VRF(虚拟路由转发)管理
# 创建VRF
ip link add vrf-red type vrf table 100

# 将接口关联到VRF
ip link set dev eth0 master vrf-red
5. XDP程序附加
# 附加XDP程序
ip link set dev eth0 xdp obj xdp_prog.o

五、常用组合命令

1. 接口状态监控
watch -n1 "ip -c -br link"  # 实时监控接口状态
2. 批量启用所有接口
ip -o link show | awk -F': ' '{print $2}' | xargs -I{} ip link set {} up
3. 查找断开连接的接口
ip -br link | grep DOWN
4. 虚拟接口快速创建
# 创建并立即启用VLAN接口
ip link add link eth0 name eth0.10 type vlan id 10 && ip link set eth0.10 up

六、注意事项与排错

  1. 权限要求:所有修改操作需 root 权限

  2. 状态依赖

    • 修改名称/MAC需先禁用接口
    • 删除接口前需先禁用
  3. 持久化

    # Debian/Ubuntu
    /etc/network/interfaces
    
    # RHEL/CentOS
    /etc/sysconfig/network-scripts/ifcfg-eth0
    
    # systemd-networkd
    /etc/systemd/network/*.network
    
  4. 常见错误

    # 接口忙时无法删除
    RTNETLINK answers: Device or resource busy
    # 解决方案:先禁用接口
    
    # 无效参数
    RTNETLINK answers: Invalid argument
    # 检查参数兼容性(如MTU值是否超出硬件限制)
    
  5. 驱动问题诊断

    ethtool -i eth0      # 查看驱动信息
    dmesg | grep eth0    # 查看内核日志
    

七、与传统命令对比

功能ip link 命令ifconfig 命令
查看接口ip link showifconfig -a
启用接口ip link set eth0 upifconfig eth0 up
禁用接口ip link set eth0 downifconfig eth0 down
修改MACip link set eth0 address ...ifconfig eth0 hw ether
修改MTUip link set eth0 mtu 9000ifconfig eth0 mtu 9000
VLAN接口原生支持需vconfig工具
网桥管理原生支持需brctl工具
绑定接口原生支持需ifenslave工具
接口统计详细分层统计基础统计

完整文档:man ip-linkip link help

ip link 提供了从基础接口管理到高级虚拟化网络的全套解决方案,是现代 Linux 网络管理的基石命令。掌握它可以高效完成服务器网络配置、容器网络设置、虚拟化环境搭建等复杂任务。



























Linux iproute2ip link 命令详解

ip link 是 Linux 网络配置的基础命令,用于管理网络接口的数据链路层(OSI 第 2 层),包括物理接口、虚拟接口和接口属性。它替代了传统的 ifconfig 命令,提供了更强大的功能。

一、命令结构

ip [OPTIONS] link COMMAND [ARGUMENTS] dev DEVICE

常用子命令:

  • show:显示接口信息
  • set:修改接口属性
  • add:创建虚拟接口
  • delete:删除接口
  • help:显示帮助信息

常用选项:

  • -s, -stats, -statistics:显示统计信息
  • -d, -details:显示详细信息
  • -br:简洁表格输出
  • -j:JSON 格式输出
  • -c:彩色输出
  • -p:美化输出格式

二、核心功能详解

1. 显示接口信息 (ip link show)

功能:查看网络接口状态和属性

基本用法:
# 显示所有接口
ip link show

# 简洁格式显示
ip -br link show

# 显示特定接口
ip link show eth0

# 显示详细统计
ip -s link show eth0
输出解析示例:
1: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped missed  mcast   
    1256789    15678    0       0       0       1200
    TX: bytes  packets  errors  dropped carrier collsns 
    987654     12345    0       0       0       0
  • 状态标志
    • UP:接口已启用
    • LOWER_UP:物理链路已连接
    • BROADCAST:支持广播
    • MULTICAST:支持组播
    • LOOPBACK:回环接口
  • 关键属性
    • mtu:最大传输单元
    • qdisc:队列规则
    • state:状态(UP/DOWN)
    • mode:模式(DEFAULT/ARP等)
  • 统计信息
    • RX:接收统计
    • TX:发送统计

2. 修改接口属性 (ip link set)

功能:更改接口状态和参数

基本语法:
ip link set dev DEVICE [PARAMETER] [VALUE]
常用属性修改:
# 启用/禁用接口
ip link set eth0 up
ip link set eth0 down

# 修改MTU值
ip link set eth0 mtu 9000

# 修改MAC地址
ip link set eth0 address 00:11:22:33:44:55

# 重命名接口
ip link set eth0 name wan

# 设置传输队列长度
ip link set eth0 txqueuelen 1000

# 启用/禁用ARP
ip link set eth0 arp on
ip link set eth0 arp off

# 启用/禁用组播
ip link set eth0 multicast on

# 启用/禁用混杂模式
ip link set eth0 promisc on

3. 创建虚拟接口 (ip link add)

功能:创建各种类型的虚拟网络设备

基本语法:
ip link add [name] NAME type TYPE [options]
常用虚拟接口类型:
# 创建网桥
ip link add name br0 type bridge

# 创建bond接口
ip link add name bond0 type bond mode 802.3ad

# 创建VLAN接口
ip link add link eth0 name eth0.10 type vlan id 10

# 创建veth对(用于容器网络)
ip link add name veth0 type veth peer name veth1

# 创建dummy接口(虚拟空设备)
ip link add name dummy0 type dummy

# 创建MACVLAN接口
ip link add link eth0 name macvlan0 type macvlan mode bridge

# 创建IPVLAN接口
ip link add link eth0 name ipvlan0 type ipvlan mode l2

# 创建GRE隧道
ip link add name gre0 type gre local 192.168.1.1 remote 203.0.113.1

4. 删除接口 (ip link delete)

功能:移除网络接口

基本语法:
ip link delete dev DEVICE [type TYPE]
示例:
# 删除普通接口
ip link delete dev eth0.10

# 删除网桥
ip link delete dev br0

# 删除veth对(删除一端即可)
ip link delete dev veth0

# 删除GRE隧道
ip link delete dev gre0

三、高级功能

1. 网络命名空间操作

# 创建命名空间
ip netns add ns1

# 将接口移到命名空间
ip link set eth0 netns ns1

# 在命名空间中查看接口
ip netns exec ns1 ip link show

# 创建veth对连接命名空间
ip link add veth0 type veth peer name veth1 netns ns1

2. VRF管理

# 创建VRF
ip link add vrf-blue type vrf table 10

# 关联接口
ip link set dev eth0 master vrf-blue

3. 组播控制

# 显示组播组
ip link show multicast

# 加入组播组
ip link set eth0 multicast on
ip maddr add 01:00:5e:00:00:01 dev eth0

4. 接口重命名与MAC地址克隆

# 安全重命名(需先禁用)
ip link set eth0 down
ip link set eth0 name wan
ip link set wan up

# MAC地址克隆
ip link set eth0 address $(ip link show br0 | awk '/link\/ether/{print $2}')

5. 批量操作

# 批量创建VLAN
for id in {10..20}; do
    ip link add link eth0 name eth0.$id type vlan id $id
    ip link set eth0.$id up
done

四、实用命令组合

1. 快速查看所有接口状态

ip -br -c link show

输出示例:

lo               UNKNOWN        00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP> 
eth0             UP             52:54:00:12:34:56 <BROADCAST,MULTICAST,UP,LOWER_UP> 
br0              DOWN           5a:3d:9a:01:2e:7b <BROADCAST,MULTICAST> 

2. 创建带STP的网桥

ip link add name br0 type bridge stp_state 1
ip link set dev eth0 master br0
ip link set dev eth1 master br0
ip link set br0 up

3. 接口统计监控

watch -n 1 'ip -s link show eth0'

4. 创建带负载均衡的bond

ip link add name bond0 type bond mode 802.3ad miimon 100
ip link set eth0 master bond0
ip link set eth1 master bond0
ip link set bond0 up

5. 高级veth配置

ip link add veth0 type veth peer name veth1
ip link set veth0 mtu 9000
ip link set veth1 mtu 9000
ethtool -K veth0 tx off rx off  # 关闭校验和卸载

五、状态标志详解

标志含义
UP接口已启用
LOWER_UP物理链路已连接
BROADCAST支持广播
MULTICAST支持组播
LOOPBACK回环接口
POINTOPOINT点对点连接
PROMISC混杂模式启用
ALLMULTI接收所有组播包
NOARP不使用ARP协议
DYNAMIC动态接口
MASTER绑定主设备
SLAVE绑定从设备
RUNNING接口正在运行

六、与传统 ifconfig 对比

功能ifconfigip link
显示接口ifconfigip link show
启用接口ifconfig eth0 upip link set eth0 up
禁用接口ifconfig eth0 downip link set eth0 down
修改MTUifconfig eth0 mtu 9000ip link set eth0 mtu 9000
修改MACifconfig eth0 hw ether 00:11:22:33:44:55ip link set eth0 address 00:11:22:33:44:55
创建网桥brctl addbr br0ip link add name br0 type bridge
创建VLANvconfig add eth0 10ip link add link eth0 name eth0.10 type vlan id 10
创建bondmodprobe bonding + 配置文件ip link add name bond0 type bond
显示统计ifconfig eth0ip -s link show eth0
命名空间支持不支持完全支持



























Linux ip link 命令终极详解:网络接口管理权威指南

ip link 是 iproute2 工具集中用于管理网络接口(数据链路层)的核心命令,它完全取代了传统的 ifconfig 命令,提供了更强大的接口控制能力。以下是深度解析:


一、命令结构与基本概念

ip [OPTIONS] link COMMAND [PARAMS]

核心子命令:

命令功能描述示例
show显示接口信息ip link show
set修改接口属性ip link set eth0 up
add创建虚拟接口ip link add veth0 type veth peer name veth1
delete删除接口ip link delete br0
help显示帮助信息ip link help

常用选项:

-s              # 显示统计信息(收发包计数)
-d              # 显示详细信息(驱动信息、特性等)
-j              # JSON 格式输出(适合脚本处理)
-p              # 美化输出(可读性更强)
-b              # 从文件批量执行命令
-4              # 仅显示IPv4相关接口
-6              # 仅显示IPv6相关接口
-br             # 简洁模式输出(最佳可读性)

二、核心功能详解

1. 查看网络接口信息

# 查看所有接口信息
ip link show

# 简洁模式查看(推荐)
ip -br link show
# 输出示例:
# lo               UNKNOWN        00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
# eth0             UP             52:54:00:12:34:56 <BROADCAST,MULTICAST,UP,LOWER_UP>
# wlan0            DOWN           68:54:5a:aa:bb:cc <NO-CARRIER,BROADCAST,MULTICAST,UP>

# 查看特定接口详情
ip -s -d link show eth0

输出关键字段解析

  • UP/DOWN:接口管理状态
  • UNKNOWN:接口类型未知
  • LOWER_UP:物理链路状态
  • NO-CARRIER:无物理连接
  • RX/TX packets:收发包统计
  • mtu:最大传输单元
  • qlen:传输队列长度

2. 控制接口状态

# 启用接口
ip link set eth0 up

# 禁用接口
ip link set wlan0 down

# 重启接口(禁用后启用)
ip link set eth0 down && ip link set eth0 up

3. 修改接口属性

# 修改MTU(最大传输单元)
ip link set eth0 mtu 9000  # Jumbo frames支持

# 修改MAC地址
ip link set eth0 address 00:11:22:33:44:55

# 修改传输队列长度
ip link set eth0 txqueuelen 1000

# 重命名接口
ip link set eth0 name wan0

# 开启/关闭混杂模式
ip link set eth0 promisc on  # 监听所有流量
ip link set eth0 promisc off

4. 创建虚拟接口

# 创建虚拟以太网对(容器网络常用)
ip link add veth0 type veth peer name veth1

# 创建VLAN接口
ip link add link eth0 name eth0.100 type vlan id 100

# 创建网桥接口
ip link add name br0 type bridge

# 创建MACVLAN接口
ip link add macvlan0 link eth0 type macvlan mode bridge

# 创建IP隧道
ip link add gre0 type gretap local 192.168.1.1 remote 203.0.113.1

5. 管理主从关系

# 将接口加入网桥
ip link set eth0 master br0

# 从网桥移除接口
ip link set eth0 nomaster

# 将接口加入绑定(Bond)
ip link set eth1 master bond0

# 查看接口所属主设备
ip -d link show eth0 | grep master

6. 删除接口

# 删除虚拟接口
ip link delete veth0

# 删除VLAN接口
ip link delete eth0.100

# 删除网桥
ip link delete br0

警告:删除物理接口可能导致网络中断!


三、高级功能与技巧

1. 接口统计监控

# 实时监控接口统计
watch -n1 'ip -s link show eth0'

# 仅显示错误统计
ip -s -s link show eth0 | grep error

2. 批量操作接口

# 批量配置多个接口
ip -b - <<EOF
link set eth0 mtu 9000
link set eth1 txqueuelen 2000
link set wlan0 up
EOF

# 从文件批量操作
echo "link set eth0 mtu 1500" > commands.txt
ip -b commands.txt

3. 高级接口创建

# 创建带特定MTU的VLAN接口
ip link add link eth0 name eth0.200 type vlan id 200 mtu 1500

# 创建带MAC地址的虚拟接口
ip link add veth0 address 00:de:ad:be:ef:00 type veth peer name veth1

# 创建持久化虚拟接口(重启保留)
ip link add dummy0 type dummy 2>/dev/null || ip link set dummy0 up

4. 接口状态检测

# 检查接口物理状态
ip -o link show eth0 | grep -q 'LOWER_UP' && echo "物理连接正常"

# 检测接口是否启用
if [ "$(ip -o -4 link show eth0 | awk '{print $9}')" = "UP" ]; then
    echo "eth0 已启用"
fi

5. 网络命名空间操作

# 创建网络命名空间
ip netns add ns1

# 将接口移到命名空间
ip link set veth1 netns ns1

# 在命名空间中查看接口
ip netns exec ns1 ip link show

四、实战场景示例

场景 1:服务器双网卡绑定

# 创建绑定接口
ip link add bond0 type bond mode 802.3ad

# 配置绑定参数
echo 1 > /sys/class/net/bond0/bonding/mode
echo 100 > /sys/class/net/bond0/bonding/miimon

# 添加物理接口
ip link set eth0 master bond0
ip link set eth1 master bond0

# 启用绑定接口
ip link set bond0 up
ip address add 192.168.1.100/24 dev bond0

场景 2:容器网络配置

# 创建虚拟以太网对
ip link add veth-host type veth peer name veth-container

# 配置容器端(在容器命名空间内)
ip netns add container1
ip link set veth-container netns container1
ip netns exec container1 ip link set veth-container name eth0
ip netns exec container1 ip link set eth0 up
ip netns exec container1 ip address add 172.17.0.2/16 dev eth0

场景 3:VLAN 隔离网络

# 创建VLAN接口
ip link add link eth0 name eth0.10 type vlan id 10
ip link add link eth0 name eth0.20 type vlan id 20

# 配置IP地址
ip address add 192.168.10.1/24 dev eth0.10
ip address add 192.168.20.1/24 dev eth0.20

# 启用接口
ip link set eth0.10 up
ip link set eth0.20 up

场景 4:高级隧道配置

# 创建GRE隧道
ip link add gre0 type gre local 203.0.113.1 remote 198.51.100.1 ttl 255

# 配置IP地址
ip address add 10.0.0.1/30 dev gre0

# 启用隧道
ip link set gre0 up

五、与传统 ifconfig 对比

功能ip linkifconfig优势
接口创建支持创建各种虚拟接口仅能管理现有接口现代网络架构支持
接口统计更详细的收发包统计基础统计信息深度故障诊断
VLAN支持原生支持VLAN创建需要vconfig等工具简化配置流程
命名空间支持完整支持网络命名空间不支持容器网络基础
主从关系管理直接支持master/nomaster需要复杂命令组合网桥/Bond配置简化
输出格式支持简洁模式(-br)和JSON输出固定格式脚本处理和可读性更佳



























Linux ip link add 命令详解

ip link add 是 iproute2 套件中用于创建虚拟网络接口的核心命令,能够创建各种类型的虚拟网络设备。它是构建复杂网络架构的基础工具。


一、命令基本结构

ip link add [OPTIONS] NAME type TYPE [PARAMETERS]
核心参数:
  • NAME:新接口名称(如 vlan10, br0
  • type TYPE:指定接口类型
  • PARAMETERS:类型特有参数

二、支持的虚拟接口类型

1. VLAN 接口
ip link add link PHYS_DEV name VLAN_NAME type vlan id VLAN_ID [protocol PROTO]
  • 参数
    • id:VLAN ID (1-4094)
    • protocol:封装协议(默认 802.1q,可选 802.1ad)
  • 示例
    ip link add link eth0 name eth0.10 type vlan id 10
    
2. VETH 对(虚拟以太网对)
ip link add name VETH1 type veth peer name VETH2
  • 特性
    • 创建成对接口,一端输入,另一端立即输出
    • 常用于容器网络或命名空间间通信
  • 示例
    ip link add veth-host type veth peer name veth-guest
    
3. 网桥接口
ip link add name BRIDGE_NAME type bridge [parameters]
  • 可选参数
    • stp_state:生成树协议(0/1)
    • forward_delay:转发延迟(毫秒)
    • hello_time:HELLO 包间隔
  • 示例
    ip link add name br0 type bridge stp_state 1
    
4. 绑定接口(Bonding)
ip link add name BOND_NAME type bond [parameters]
  • 关键参数
    • mode:绑定模式
      • balance-rr (0)
      • active-backup (1)
      • 802.3ad (4, LACP)
      • balance-alb (6)
    • miimon:链路监测间隔(毫秒)
  • 示例
    ip link add bond0 type bond mode 802.3ad miimon 100
    
5. MACVLAN/IPVLAN
# MACVLAN
ip link add name MACVLAN_NAME link PHYS_DEV type macvlan mode MODE

# IPVLAN
ip link add name IPVLAN_NAME link PHYS_DEV type ipvlan mode MODE
  • 模式
    • private:隔离模式
    • vepa:虚拟以太网端口聚合
    • bridge:网桥模式
    • passthru:直通模式
  • 示例
    ip link add macvlan0 link eth0 type macvlan mode bridge
    
6. 虚拟隧道接口
# GRE 隧道
ip link add name TUN_NAME type gre local LOCAL_IP remote REMOTE_IP [ttl TTL]

# VXLAN 隧道
ip link add name VXLAN_NAME type vxlan id VNI [local LOCAL_IP] [remote REMOTE_IP] dstport PORT
  • 参数
    • id:VXLAN 网络标识符 (VNI)
    • dstport:UDP 端口(默认 4789)
    • dev:底层物理设备
  • 示例
    ip link add vxlan42 type vxlan id 42 local 192.168.1.1 dev eth0 dstport 4789
    
7. Dummy 接口
ip link add name DUMMY_NAME type dummy
  • 用途:测试、占位、无实际流量
8. VRF(虚拟路由转发)
ip link add name VRF_NAME type vrf table TABLE_ID
  • 参数
    • table:关联的路由表 ID
  • 示例
    ip link add vrf-red type vrf table 100
    

三、通用可选参数

1. 基本属性
ip link add ... address MAC_ADDRESS  # 设置MAC地址
ip link add ... mtu MTU_VALUE       # 设置MTU值
ip link add ... txqueuelen LENGTH   # 设置传输队列长度
2. 命名空间关联
ip link add ... netns NETNS_NAME    # 创建时指定网络命名空间
  • 示例
    ip link add veth0 type veth peer name veth1 netns container1
    

四、创建后管理

1. 启用接口
ip link set DEV_NAME up
2. 配置IP地址
ip addr add IP_ADDR dev DEV_NAME
3. 删除接口
ip link delete DEV_NAME

五、高级配置示例

1. 复杂网络拓扑(VLAN + Bond + Bridge)
# 创建绑定接口
ip link add bond0 type bond mode 802.3ad

# 添加物理接口到绑定
ip link set eth0 master bond0
ip link set eth1 master bond0

# 创建VLAN接口
ip link add link bond0 name bond0.100 type vlan id 100

# 创建网桥
ip link add br100 type bridge

# 添加VLAN接口到网桥
ip link set bond0.100 master br100

# 启用所有接口
ip link set bond0 up
ip link set bond0.100 up
ip link set br100 up
2. 容器网络连接
# 创建命名空间
ip netns add container1

# 创建veth对
ip link add veth-host type veth peer name veth-guest

# 将一端移到容器命名空间
ip link set veth-guest netns container1

# 配置主机端
ip link set veth-host up
ip addr add 10.0.0.1/24 dev veth-host

# 配置容器端
ip netns exec container1 ip link set lo up
ip netns exec container1 ip link set veth-guest up
ip netns exec container1 ip addr add 10.0.0.2/24 dev veth-guest
3. VXLAN 多播网络
ip link add vxlan100 type vxlan \
    id 100 \
    group 239.1.1.100 \
    dev eth0 \
    dstport 4789 \
    local 192.168.1.1

ip link set vxlan100 up
ip addr add 10.100.0.1/24 dev vxlan100

六、错误排查

1. 常见错误
# 接口已存在
Cannot create device: File exists

# 无效参数
RTNETLINK answers: Invalid argument

# 无权限
RTNETLINK answers: Operation not permitted
2. 诊断技巧
# 查看创建详情
ip -d link show DEV_NAME

# 检查内核支持
ls /proc/sys/net/ipv4/conf/*/ | grep rp_filter

# 查看内核日志
dmesg | tail

七、持久化配置

ip link add 创建的接口重启后消失,需持久化:

1. systemd-networkd
# /etc/systemd/network/vlan.netdev
[NetDev]
Name=eth0.10
Kind=vlan

[VLAN]
Id=10
2. NetworkManager
nmcli con add type vlan ifname eth0.10 dev eth0 id 10
3. Debian/Ubuntu
# /etc/network/interfaces
auto eth0.10
iface eth0.10 inet manual
    vlan-raw-device eth0

八、注意事项

  1. 命名规范:避免使用系统保留名称(如 ethX, wlanX
  2. 依赖关系:父接口需存在(如创建 VLAN 前物理接口需存在)
  3. 启用顺序:先创建虚拟接口,再启用并配置
  4. 性能影响:复杂虚拟接口可能增加 CPU 负载
  5. 安全考虑
    • 限制特权用户使用
    • 避免过度暴露隧道接口

完整文档:man ip-linkip link help

掌握 ip link add 命令能够高效创建各种虚拟网络接口,是构建云网络、容器网络和复杂网络架构的核心技能。建议在测试环境中充分实践各种接口类型组合。



























Linux iproute2ip link add 命令详解

ip link add 是 Linux 网络配置中最强大的命令之一,用于创建各种虚拟网络设备,如 VLAN、网桥、绑定接口、veth 对等。它是构建复杂网络架构的基础工具。

一、命令结构

ip link add [link DEVICE] [name] NAME type TYPE [options]

核心参数:

  • link DEVICE:指定父设备(用于 VLAN、macvlan 等)
  • name NAME:指定新设备名称(必需)
  • type TYPE:指定设备类型(必需)
  • options:类型相关的附加参数

二、支持的设备类型(TYPE)

1. vlan - 802.1Q VLAN 接口

ip link add link <父设备> name <名称> type vlan id <VLAN_ID>
  • id <1-4094>:VLAN ID(必需)
  • protocol <802.1q|802.1ad>:VLAN 协议(默认 802.1q)
  • egress-qos-map:出口 QoS 映射
  • ingress-qos-map:入口 QoS 映射

示例

# 在 eth0 上创建 VLAN 10
ip link add link eth0 name eth0.10 type vlan id 10

# 创建 QinQ (802.1ad)
ip link add link eth0 name eth0.100 type vlan protocol 802.1ad id 100

2. veth - 虚拟以太网对

ip link add name <设备1> type veth peer name <设备2>
  • 总是成对创建
  • 一端发送的数据会从另一端接收
  • netns <命名空间>:将一端放入指定命名空间

示例

# 创建 veth0-veth1 对
ip link add name veth0 type veth peer name veth1

# 创建并放入命名空间
ip link add name veth-host type veth peer name veth-guest netns ns1

3. bridge - 网桥设备

ip link add name <名称> type bridge [options]
  • stp_state <0|1>:STP 生成树协议(默认 0)
  • forward_delay <秒>:转发延迟(默认 15)
  • hello_time <秒>:Hello 时间(默认 2)
  • vlan_filtering <0|1>:VLAN 过滤(默认 0)

示例

# 创建带 STP 的网桥
ip link add name br0 type bridge stp_state 1 forward_delay 4

4. bond - 绑定接口

ip link add name <名称> type bond [options]
  • mode <模式>:绑定模式(默认 balance-rr)
    • balance-rr (0):轮询
    • active-backup (1):主备
    • balance-xor (2):哈希负载均衡
    • 802.3ad (4):LACP 动态聚合
  • miimon <毫秒>:链路监控间隔(建议设置)
  • lacp_rate <slow|fast>:LACP 速率(仅 802.3ad)
  • xmit_hash_policy <策略>:负载均衡策略

示例

# 创建 LACP 绑定
ip link add name bond0 type bond mode 802.3ad miimon 100 lacp_rate fast

5. macvlan - MACVLAN 接口

ip link add link <父设备> name <名称> type macvlan mode <模式>
  • mode
    • private:隔离模式(默认)
    • vepa:虚拟以太网端口聚合
    • bridge:网桥模式
    • passthru:直通模式

示例

# 在 eth0 上创建桥接模式 macvlan
ip link add link eth0 name macvlan0 type macvlan mode bridge

6. dummy - 虚拟空设备

ip link add name <名称> type dummy
  • 不关联物理设备
  • 用于测试或占位

示例

ip link add name dummy0 type dummy

7. tunnel - 隧道接口

ip link add name <名称> type <隧道类型> [options]
  • 隧道类型gre, sit, ipip, ip6gre
  • local <IP>:本地隧道端点
  • remote <IP>:远端隧道端点
  • ttl <值>:生存时间

示例

# 创建 GRE 隧道
ip link add name gre0 type gre local 192.168.1.1 remote 203.0.113.1 ttl 255

三、通用可选参数

1. 接口属性

# 设置 MAC 地址
ip link add ... address 00:11:22:33:44:55

# 设置 MTU
ip link add ... mtu 9000

# 设置传输队列长度
ip link add ... txqueuelen 1000

2. 初始状态

# 创建后自动启用
ip link add ... up

# 创建后保持禁用
ip link add ... down

3. 高级控制

# 设置网络命名空间
ip link add ... netns ns1

# 设置别名
ip link add ... alias "Primary Network Bridge"

四、完整使用示例

1. 创建带 VLAN 的网桥

# 创建 VLAN 10
ip link add link eth0 name eth0.10 type vlan id 10

# 创建网桥
ip link add name br-vlan10 type bridge

# 将 VLAN 加入网桥
ip link set eth0.10 master br-vlan10

# 启用所有设备
ip link set br-vlan10 up
ip link set eth0.10 up

2. 创建容器网络

# 创建命名空间
ip netns add container1

# 创建 veth 对
ip link add name veth-host type veth peer name veth-guest netns container1

# 创建网桥
ip link add name br-container type bridge

# 主机端加入网桥
ip link set veth-host master br-container

# 启用设备
ip link set br-container up
ip link set veth-host up

# 容器内配置
ip netns exec container1 ip link set veth-guest up
ip netns exec container1 ip addr add 192.168.10.2/24 dev veth-guest

3. 创建带 LACP 的绑定接口

# 创建绑定接口
ip link add name bond0 type bond mode 802.3ad miimon 100 lacp_rate fast

# 添加物理接口
ip link set eth0 master bond0
ip link set eth1 master bond0

# 启用绑定
ip link set bond0 up

# 添加 IP 地址
ip addr add 192.168.1.100/24 dev bond0

五、查看创建结果

1. 检查接口状态

ip -d link show <设备名>
  • -d 显示详细信息
  • 示例输出:
    5: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default 
        link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff promiscuity 0 
        bond mode 802.3ad miimon 100 updelay 0 downdelay 0 ...
    

2. 验证特定类型属性

# 查看 VLAN 信息
bridge vlan show

# 查看绑定状态
cat /proc/net/bonding/bond0

# 查看网桥信息
bridge link show

六、删除虚拟设备

ip link delete <设备名> [type <类型>]

示例

# 删除 VLAN
ip link delete eth0.10

# 删除网桥
ip link delete br0

# 删除 veth 对(删除一端即可)
ip link delete veth-host

七、注意事项

  1. 权限要求:需要 root 权限执行
  2. 命名冲突:设备名称必须唯一
  3. 父设备状态:创建 VLAN/macvlan 时父设备需存在
  4. 临时性:创建的设备重启后消失
  5. 持久化
    # Debian/Ubuntu
    /etc/network/interfaces
    
    # RHEL/CentOS
    /etc/sysconfig/network-scripts/ifcfg-<设备名>
    
    # 通用方法
    systemd-networkd 或 NetworkManager
    
  6. 依赖模块
    # 确保加载所需内核模块
    modprobe 8021q    # VLAN
    modprobe bonding   # Bond
    modprobe bridge    # Bridge
    

八、典型错误处理

错误信息原因解决方案
RTNETLINK answers: File exists设备名冲突使用不同的设备名
Cannot find device父设备不存在检查父设备名称
Operation not supported缺少内核模块加载所需模块
Invalid argument参数错误检查参数格式

ip link add 是构建 Linux 虚拟网络基础设施的核心工具,掌握它可以实现 VLAN 划分、容器网络、高可用集群等高级网络架构。



























Linux ip link set 命令详解

ip link set 是 iproute2 套件中最核心的接口配置命令,用于动态修改网络接口的各种属性和状态。它是网络管理员进行实时调整和故障排除的利器。


一、命令基本结构

ip link set [DEVICE] [COMMAND] [PARAMETERS]
核心组件:
  • DEVICE:目标接口名(如 eth0, br0
  • COMMAND:操作指令(可省略,直接接参数)
  • PARAMETERS:配置参数

二、核心功能详解

1. 接口状态控制
# 启用接口
ip link set eth0 up

# 禁用接口
ip link set eth0 down

# 组合操作(重启接口)
ip link set eth0 down && ip link set eth0 up
2. 基础属性修改
# 修改MTU(最大传输单元)
ip link set eth0 mtu 9000

# 修改MAC地址
ip link set eth0 address 00:11:22:33:44:55

# 修改传输队列长度
ip link set eth0 txqueuelen 1000

# 修改接口名称
ip link set eth0 name wan0
3. 高级特性控制
# 启用/禁用混杂模式
ip link set eth0 promisc on
ip link set eth0 promisc off

# 启用/禁用ARP协议
ip link set eth0 arp on
ip link set eth0 arp off

# 设置接口别名(描述信息)
ip link set eth0 alias "Primary Uplink"

# 启用/禁用多队列
ip link set eth0 multiqueue on
4. 虚拟接口管理
# 修改VLAN ID
ip link set vlan10 type vlan id 20

# 修改绑定模式
ip link set bond0 type bond mode active-backup

# 修改网桥参数
ip link set br0 type bridge stp_state 1 forward_delay 1500
5. 接口关系管理
# 将接口加入网桥
ip link set eth0 master br0

# 从网桥移除接口
ip link set eth0 nomaster

# 将接口加入绑定组
ip link set eth0 master bond0

# 设置VLAN父接口
ip link set vlan10 link eth1
6. XDP程序管理
# 附加XDP程序
ip link set dev eth0 xdp obj xdp_prog.o

# 卸载XDP程序
ip link set dev eth0 xdp off

三、特殊对象操作

1. 批量操作所有接口
# 启用所有接口
ip link set all up

# 禁用所有接口
ip link set all down
2. 按类型操作
# 禁用所有veth接口
ip -o link show type veth | awk -F': ' '{print $2}' | xargs -I{} ip link set {} down

四、高级应用场景

1. 热迁移网络配置
# 修改物理接口不影响连接
ip link set eth0 mtu 9000 txqueuelen 2000
2. 网络故障转移
# 主接口故障时切换
ip link set primary_down && ip link set backup up
3. 安全响应
# 检测到攻击时禁用混杂模式
ip link set eth0 promisc off
4. 负载均衡优化
# 动态调整绑定模式
ip link set bond0 type bond mode 802.3ad
5. 容器网络调整
# 将veth接口移到新命名空间
ip link set veth-container netns new_namespace

五、参数详解

参数作用范围说明示例
up/down所有接口启用/禁用接口ip link set eth0 up
mtu所有接口设置最大传输单元 (68-65535)ip link set eth0 mtu 9000
address物理接口修改MAC地址ip link set eth0 address 00:11:22:33:44:55
name所有接口重命名接口ip link set eth0 name wan0
txqueuelen所有接口设置传输队列长度ip link set eth0 txqueuelen 2000
promisc物理接口启用/禁用混杂模式ip link set eth0 promisc on
arpIPv4接口启用/禁用ARP协议ip link set eth0 arp off
alias所有接口设置接口描述文本ip link set eth0 alias "WAN Link"
master从属接口加入网桥/绑定组ip link set eth0 master br0
nomaster从属接口从网桥/绑定组移除ip link set eth0 nomaster
netns所有接口移动到网络命名空间ip link set veth0 netns container1
xdp支持XDP的接口加载/卸载XDP程序ip link set eth0 xdp obj prog.o
multiqueue多队列网卡启用/禁用多队列ip link set eth0 multiqueue on
vrf物理接口关联到VRFip link set eth0 master vrf-red

六、使用示例

1. 网桥配置调整
# 创建网桥
ip link add br0 type bridge

# 添加端口
ip link set eth0 master br0
ip link set eth1 master br0

# 配置STP参数
ip link set br0 type bridge stp_state 1 forward_delay 1500 hello_time 2

# 设置网桥MAC
ip link set br0 address 00:de:ad:be:ef:00
2. 绑定接口优化
# 修改绑定模式为LACP
ip link set bond0 type bond mode 802.3ad

# 设置LACP参数
ip link set bond0 type bond lacp_rate fast

# 修改哈希策略
ip link set bond0 type bond xmit_hash_policy layer3+4
3. VLAN接口迁移
# 修改VLAN父接口
ip link set vlan10 link eth2

# 修改VLAN ID
ip link set vlan10 type vlan id 20

# 重命名接口
ip link set vlan10 name trunk.20
4. 网络命名空间操作
# 创建命名空间
ip netns add ns1

# 移动接口到命名空间
ip link set veth1 netns ns1

# 在命名空间中启用
ip netns exec ns1 ip link set veth1 up

七、错误排查与注意事项

常见错误:
# 接口忙时无法修改
RTNETLINK answers: Device or resource busy

# 无效参数
RTNETLINK answers: Invalid argument

# 不支持的操作
RTNETLINK answers: Operation not supported
诊断技巧:
  1. 检查接口状态:ip -d link show dev eth0
  2. 查看内核日志:dmesg | tail
  3. 验证参数兼容性:
    ethtool -k eth0 | grep tcp-segmentation  # 检查TSO
    ethtool -i eth0                          # 查看驱动信息
    
注意事项:
  1. 操作顺序
    • 修改MAC/名称前需禁用接口
    • 移动接口到命名空间前需禁用
  2. 持久化
    # systemd-networkd
    [Link]
    MACAddress=00:11:22:33:44:55
    MTUBytes=9000
    
    # NetworkManager
    nmcli con mod eth0 802-3-ethernet.mtu 9000
    
  3. 安全操作
    • 生产环境避免直接修改活动接口
    • 关键操作前备份配置
  4. 硬件限制
    • MTU受网卡和交换机限制
    • MAC修改需驱动支持

八、与传统命令对比

功能ip link set 命令传统命令
启用接口ip link set eth0 upifconfig eth0 up
修改MTUip link set eth0 mtu 9000ifconfig eth0 mtu 9000
修改MACip link set eth0 address ...ifconfig eth0 hw ether ...
网桥添加端口ip link set eth0 master br0brctl addif br0 eth0
绑定接口配置直接支持需修改/proc/net/bonding/
命名空间移动原生支持需复杂iptables规则
VLAN配置修改直接支持需删除重建接口

完整文档:man ip-linkip link set help

ip link set 提供了对网络接口的精细控制能力,是 Linux 网络管理的核心工具。掌握它可以实现:

  1. 动态网络配置调整
  2. 实时故障排除
  3. 复杂网络架构管理
  4. 安全策略实施

建议结合 ip -d link show 查看详细信息,并在测试环境中充分验证关键操作。



























Linux bridge 命令详解

bridge 是 iproute2 套件中专用于管理 Linux 网桥(软件交换机) 的命令工具,替代了传统的 brctl 命令。它提供完整的二层交换管理能力,包括 VLAN 配置、MAC 地址表(FDB)管理、组播控制等。


一、命令基本结构

bridge [OPTIONS] OBJECT { COMMAND | help }
核心对象(OBJECT):
对象功能示例命令
fdb转发数据库(MAC地址表)bridge fdb show
mdb组播数据库bridge mdb add dev br0 port eth0 grp 224.0.0.100
vlanVLAN 管理bridge vlan add dev eth0 vid 100
link网桥端口管理bridge link set dev eth0 learning on
monitor实时监控变化bridge monitor

二、核心功能详解

1. 网桥端口管理 (bridge link)
# 查看端口状态
bridge link show [dev ETH] [master BRIDGE]

# 设置端口属性
bridge link set dev ETH [cost COST] [priority PRIO] 
                         [state STP_STATE] 
                         [learning on|off] 
                         [flood on|off] 
                         [guard on|off]

# 示例:
bridge link set dev eth0 cost 10 priority 32    # 设置STP路径开销和优先级
bridge link set dev eth1 learning off           # 禁用MAC学习
bridge link set dev eth2 guard on               # 启用BPDU保护
2. VLAN 管理 (bridge vlan)
# 查看VLAN配置
bridge vlan show [dev ETH] [vid VID]

# 添加VLAN
bridge vlan add dev ETH vid VID [pvid] [untagged] [master]

# 删除VLAN
bridge vlan del dev ETH vid VID

# 示例:
bridge vlan add dev eth0 vid 100 pvid untagged  # 设置PVID且不打标签
bridge vlan add dev eth1 vid 100-200            # 批量添加VLAN范围
bridge vlan del dev eth0 vid 50                 # 删除单个VLAN
3. MAC地址表管理 (bridge fdb)
# 查看MAC地址表
bridge fdb show [dev ETH] [br BRIDGE] [vlan VID] [dynamic|static]

# 添加静态条目
bridge fdb add MAC dev ETH [dst IP] [via DEV] [self] [vlan VID] [static]

# 删除条目
bridge fdb del MAC dev ETH [vlan VID]

# 示例:
bridge fdb add 00:11:22:33:44:55 dev eth0 vlan 100 static  # 静态MAC
bridge fdb del 00:11:22:33:44:55 dev eth0                 # 删除条目
4. 组播管理 (bridge mdb)
# 查看组播组
bridge mdb show [dev BRIDGE]

# 添加组播条目
bridge mdb add dev BRIDGE port ETH grp GROUP [permanent|temp] [vid VID]

# 删除组播条目
bridge mdb del dev BRIDGE port ETH grp GROUP [vid VID]

# 示例:
bridge mdb add dev br0 port eth0 grp 224.0.0.100 permanent  # 永久组播条目
5. 实时监控 (bridge monitor)
bridge monitor [all|fdb|mdb|vlan|link]  # 实时监控网桥变化

三、网桥生命周期管理

1. 创建网桥 (使用 ip link)
ip link add name br0 type bridge
2. 配置网桥参数 (使用 ip link set)
ip link set dev br0 type bridge 
    [stp_state 0|1] 
    [forward_delay MS] 
    [hello_time MS] 
    [max_age MS] 
    [ageing_time SEC] 
    [vlan_filtering 0|1]
3. 添加/移除端口 (使用 ip link set)
# 添加端口
ip link set dev eth0 master br0

# 移除端口
ip link set dev eth0 nomaster

四、完整配置示例

1. 企业级网桥配置
# 创建网桥并启用VLAN过滤
ip link add name br-core type bridge vlan_filtering 1
ip link set br-core up

# 添加端口并配置VLAN
ip link set eth0 master br-core
ip link set eth1 master br-core

bridge vlan add dev eth0 vid 100 pvid untagged master
bridge vlan add dev eth1 vid 100
bridge vlan add dev br-core vid 100 self  # 允许网桥本身处理VLAN100流量

# 设置STP参数
ip link set br-core type bridge stp_state 1 forward_delay 1500

# 添加静态MAC
bridge fdb add 00:0c:29:11:22:33 dev eth0 vlan 100 static
2. 容器网络配置
# 创建网桥
ip link add name docker0 type bridge
ip addr add 172.17.0.1/16 dev docker0
ip link set docker0 up

# 创建veth对
ip link add veth-host type veth peer name veth-container

# 将veth-host加入网桥
ip link set veth-host master docker0
ip link set veth-host up

# 配置容器端
ip link set veth-container netns mycontainer
ip netns exec mycontainer ip link set lo up
ip netns exec mycontainer ip link set veth-container up
ip netns exec mycontainer ip addr add 172.17.0.2/16 dev veth-container

# 配置端口隔离
bridge link set dev veth-host isolated on
3. 高级VLAN配置(Private VLAN)
# 创建主VLAN
bridge vlan add dev eth0 vid 100

# 创建隔离VLAN
bridge vlan add dev eth0 vid 200
bridge vlan add dev eth1 vid 200
bridge vlan add dev eth2 vid 200

# 设置PVLAN映射
bridge vlan add dev eth0 vid 200 pvid
bridge vlan add dev eth0 vid 200 isolated
bridge vlan add dev eth1 vid 200 pvid isolated
bridge vlan add dev eth2 vid 200 pvid isolated

五、监控与诊断

1. 查看完整网桥状态
bridge -c link show     # 简洁视图
bridge -d vlan show     # 详细VLAN信息
bridge -s fdb show      # 带统计的MAC表
2. 关键状态文件
/sys/class/net/br0/bridge/*       # 网桥参数
/sys/class/net/br0/brif/eth0/*    # 端口参数
/sys/class/net/br0/bridge/vlan_filtering  # VLAN过滤状态
3. 性能统计
tc -s qdisc show dev br0  # 查看网桥队列统计
ethtool -S br0            # 驱动级统计

六、与传统 brctl 对比

功能bridge 命令brctl 命令
创建网桥ip link add br0 type bridgebrctl addbr br0
添加端口ip link set eth0 master br0brctl addif br0 eth0
VLAN管理bridge vlan需外部工具 (vconfig)
MAC地址表bridge fdbbrctl showmacs br0
STP参数ip link set br0 type bridge ...brctl stp br0 on
VLAN过滤原生支持不支持
Private VLAN原生支持不支持
组播管理bridge mdb不支持

七、常见问题处理

1. 端口不转发流量
# 检查端口状态
bridge link show dev eth0

# 确保端口和网桥已启用
ip link set eth0 up
ip link set br0 up

# 检查VLAN过滤
cat /sys/class/net/br0/bridge/vlan_filtering
2. MAC地址学习异常
# 查看学习状态
bridge link show | grep -A2 eth0

# 清除动态MAC
bridge fdb flush dev eth0

# 禁用再启用学习
bridge link set dev eth0 learning off
bridge link set dev eth0 learning on
3. STP 环路问题
# 启用STP
ip link set br0 type bridge stp_state 1

# 调整参数
ip link set br0 type bridge forward_delay 1500 max_age 20

# 查看STP状态
bridge link show | grep "state"
4. VLAN 隔离失效
# 验证VLAN配置
bridge vlan show

# 确保VLAN过滤启用
ip link set br0 type bridge vlan_filtering 1

# 检查PVID设置
bridge link show | grep PVID

八、最佳实践

  1. 启用VLAN过滤:生产环境务必启用

    ip link set br0 type bridge vlan_filtering 1
    
  2. 配置STP防护

    bridge link set dev eth0 guard on   # BPDU防护
    bridge link set dev eth1 bpduguard on
    
  3. 限制MAC学习

    bridge link set dev eth0 learning_limit 100  # 限制学习数量
    
  4. 隔离敏感端口

    bridge link set dev eth0 isolated on  # 端口隔离
    
  5. 配置端口绑定

    bridge link set dev eth0 fastleave on  # 快速离开组播组
    
  6. 安全MAC地址

    bridge link set dev eth0 secure on  # 过滤无效MAC
    

完整文档:man bridgebridge help

掌握 bridge 命令可以构建从简单交换机到复杂数据中心网络的各种二层架构,特别适合:

  • 虚拟化平台网络
  • 容器网络
  • 软件定义网络(SDN)
  • 网络功能虚拟化(NFV)
  • 复杂VLAN环境

建议结合 ip linktc 命令实现完整的二三层网络管理能力。



































































































































iproute2的ip linkbridge命令是不是都可以添加配置网桥(Bridge)?

是的,ip linkbridge 命令都可以用于配置网桥(Bridge),但它们在功能和操作层级上有所不同,需要配合使用才能完成完整的网桥配置:

📌 两者关系总结

功能ip linkbridge说明
创建/删除网桥设备ip link 负责设备生命周期
添加/移除桥接端口✅ (推荐)两种方式均可
设置网桥全局参数STP、老化时间等
配置端口属性开销、优先级、状态等
管理 VLAN 配置PVID、标记模式等
管理 MAC 地址表静态MAC、FDB操作
管理组播数据库IGMP侦听等

🛠️ 配置网桥的标准流程(两者配合使用)

1. 创建网桥设备 (使用 ip link)
ip link add name br0 type bridge
2. 设置网桥全局参数 (使用 ip link)
ip link set br0 type bridge \
    stp_state 1 \          # 启用STP
    forward_delay 2 \      # 转发延迟(秒)
    ageing_time 300        # MAC老化时间(秒)
3. 添加端口到网桥 (两者任选一)
# 方式1: 使用 ip link (推荐)
ip link set eth0 master br0
ip link set eth1 master br0

# 方式2: 使用 bridge
bridge link set dev eth0 master br0
bridge link set dev eth1 master br0
4. 配置端口参数 (使用 bridge)
bridge link set dev eth0 cost 10     # 设置路径开销
bridge link set dev eth0 priority 32 # 设置端口优先级
bridge link set dev eth0 state 4     # 强制设为转发状态
5. 配置 VLAN (使用 bridge)
bridge vlan add dev eth0 vid 10 pvid untagged  # 添加VLAN 10
bridge vlan add dev eth0 vid 20                # 添加VLAN 20
6. 管理 MAC 地址表 (使用 bridge)
bridge fdb add 00:11:22:33:44:55 dev eth0 static  # 添加静态MAC
7. 启用设备 (使用 ip link)
ip link set br0 up
ip link set eth0 up
ip link set eth1 up

🔍 关键区别详解

1. 设备管理 vs 桥接逻辑
  • ip link: 操作网络设备本身(创建/删除/启用/禁用)
  • bridge: 操作桥接逻辑(端口关系/VLAN/MAC表)
2. 配置层级
graph LR
    A[物理接口] --> B[网桥设备]
    B --> C[IP配置]
    
    subgraph 数据链路层
    A -->|bridge 命令| D[端口属性]
    A -->|bridge 命令| E[VLAN配置]
    B -->|bridge 命令| F[MAC表]
    end
    
    subgraph 设备层
    B -->|ip link| G[创建/启用]
    end
3. 端口添加方式对比
特性ip link set masterbridge link set master
一致性与设备管理统一专用于桥接操作
命名空间支持完全支持完全支持
批量操作支持支持
脚本可读性更直观更专业
实际使用频率★★★★☆ (更常用)★★★☆☆

💡 最佳实践建议

  1. 创建/删除网桥设备
    总是使用 ip link:

    # 创建
    ip link add name br0 type bridge
    
    # 删除
    ip link del dev br0
    
  2. 添加/移除端口
    优先使用 ip link (更统一):

    # 添加
    ip link set eth0 master br0
    
    # 移除
    ip link set eth0 nomaster
    
  3. 桥接参数配置
    分层使用:

    # 网桥全局参数 → ip link
    ip link set br0 type bridge stp_state 1
    
    # 端口级参数 → bridge
    bridge link set dev eth0 cost 10
    
  4. VLAN/MAC表管理
    必须使用 bridge:

    # VLAN配置
    bridge vlan add dev eth0 vid 10 pvid
    
    # MAC表管理
    bridge fdb add 00:11:22:33:44:55 dev eth0 static
    

⚠️ 常见错误

# 错误1:试图用 bridge 创建网桥
bridge addbr br0  # 错误!bridge 没有 addbr 命令

# 正确做法:
ip link add name br0 type bridge

# 错误2:忘记启用设备
ip link set eth0 master br0
# 缺少:ip link set br0 up && ip link set eth0 up

# 错误3:VLAN过滤未启用
bridge vlan add dev eth0 vid 10  # 不生效
# 需要先:
ip link set br0 type bridge vlan_filtering 1

✅ 完整配置示例

# 1. 创建网桥
ip link add name br0 type bridge stp_state 1

# 2. 添加端口
ip link set eth0 master br0
ip link set eth1 master br0

# 3. 配置端口参数
bridge link set dev eth0 cost 10 priority 32

# 4. 配置VLAN
ip link set br0 type bridge vlan_filtering 1
bridge vlan add dev eth0 vid 10 pvid untagged
bridge vlan add dev br0 vid 10

# 5. 启用设备
ip link set br0 up
ip link set eth0 up
ip link set eth1 up

总结来说:
ip link 用于网桥设备的生命周期管理
bridge 用于桥接逻辑的精细控制
两者需要协同工作才能完成完整的网桥配置,就像使用锤子(ip link)和螺丝刀(bridge)共同组装一件家具一样。



























Linux ip address 命令终极详解

ip address (常简写为 ip addrip a) 是 iproute2 套件中管理网络层配置的核心命令,用于查看、添加、删除和修改网络接口的 IP 地址及相关属性。它取代了传统的 ifconfig 命令,提供更精细的 IP 管理能力。


一、命令基本结构

ip [OPTIONS] address {COMMAND} [PARAMETERS]
核心组件:
  • COMMAND:
    • show/list:查看地址
    • add:添加地址
    • del:删除地址
    • flush:批量删除地址
    • change/replace:修改地址属性
  • OPTIONS:
    • -4/-6:IPv4/IPv6 专用
    • -s:显示统计信息
    • -d:显示详细信息
    • -br:简洁表格输出
    • -c:彩色输出
    • -j:JSON 格式输出

二、核心功能详解

1. 查看地址信息 (show/list)
# 查看所有接口地址
ip address show

# 简洁表格输出(最常用)
ip -br addr show
# eth0 UP 192.168.1.100/24 fe80::20c:29ff:fe3d:5e8e/64 

# 查看指定接口
ip addr show dev eth0

# 按条件过滤
ip addr show scope global    # 只显示全局地址
ip addr show to 192.168.1.0/24 # 显示属于该子网的地址
ip addr show dynamic         # 只显示动态获取的地址
2. 添加IP地址 (add)
# 基本语法
ip addr add ADDRESS dev INTERFACE [PARAMETERS]

# 添加IPv4地址
ip addr add 192.168.1.100/24 dev eth0

# 添加IPv6地址
ip addr add 2001:db8::1/64 dev eth0

# 高级参数:
ip addr add 192.168.1.200/24 dev eth0 \
    label eth0:backup \          # 别名标签
    scope link \                 # 作用域 (host/link/global)
    broadcast 192.168.1.255 \    # 指定广播地址
    preferred_lft 300 \          # IPv6首选时间(秒)
    valid_lft 600                # IPv6有效时间(秒)
3. 删除IP地址 (del)
# 删除指定地址
ip addr del 192.168.1.100/24 dev eth0

# 通过标签删除
ip addr del 192.168.1.200/24 dev eth0 label eth0:backup

# 删除IPv6地址
ip addr del 2001:db8::1/64 dev eth0
4. 批量删除地址 (flush)
# 清除接口所有地址
ip addr flush dev eth0

# 按类型清除
ip -4 addr flush eth0    # 清除所有IPv4地址
ip -6 addr flush eth0    # 清除所有IPv6地址

# 按条件清除
ip addr flush to 10.0.0.0/8      # 清除该网段地址
ip addr flush scope link         # 清除链路本地地址
ip addr flush dynamic            # 清除动态获取地址
5. 修改地址属性 (change/replace)
# 修改现有地址属性
ip addr change 192.168.1.100/24 dev eth0 \
    broadcast 192.168.1.255 \
    label eth0-primary

# 替换地址(不存在则添加)
ip addr replace 192.168.1.150/24 dev eth0

三、关键参数详解

参数说明示例
dev IFNAME指定操作接口(必需)dev eth0
local ADDRESSIP地址(CIDR格式)192.168.1.100/24
broadcast ADDR广播地址(+表示自动计算)broadcast +
scope SCOPE地址作用域:global(全局)/link(链路)/host(主机)/site(IPv6站点)scope link
label NAME地址别名(传统eth0:1格式)label eth0:backup
valid_lft TIMEIPv6地址有效时间(秒,forever表示永久)valid_lft 3600
preferred_lft TIMEIPv6地址首选时间(秒)preferred_lft 1800
peer ADDRESS点对点连接的对端地址peer 10.0.0.2
noprefixroute不自动创建前缀路由noprefixroute
nodad禁用IPv6重复地址检测(DAD)nodad
mngtmpaddr使用IPv6临时地址mngtmpaddr

四、地址作用域详解

1. global (全局)
  • 可通过路由转发
  • 示例:192.168.1.100/24
2. link (链路本地)
  • 仅在同一物理链路有效
  • IPv4示例:169.254.0.0/16
  • IPv6示例:fe80::/10
3. host (主机本地)
  • 仅本机有效(如回环地址)
  • 示例:127.0.0.1/8
4. site (站点本地 - IPv6专用)
  • 在站点内有效(类似IPv4私有地址)
  • 示例:fec0::/10

五、高级应用场景

1. 多IP服务器配置
# Web服务器IP
ip addr add 203.0.113.10/24 dev eth0

# 数据库服务IP
ip addr add 203.0.113.20/32 dev eth0 label eth0:db

# 管理接口IP
ip addr add 10.0.0.100/24 dev eth0 label eth0:mgmt
2. IPv6临时地址
# 创建临时地址(1小时有效)
ip addr add 2001:db8::1/64 dev eth0 \
    valid_lft 3600 \
    preferred_lft 1800
3. 点对点连接
# 配置本地和对端地址
ip addr add 10.0.0.1 peer 10.0.0.2/30 dev ppp0
4. 防止自动路由
# 添加IP但不创建路由
ip addr add 192.168.100.1/24 dev eth0 noprefixroute
5. 实时地址监控
# 监控地址变化(新终端运行)
ip monitor address

六、输出解读详解

示例输出:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default 
    link/ether 00:0c:29:3d:5e:8e brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.1.200/24 scope global secondary eth0:backup
       valid_lft forever preferred_lft forever
    inet6 2001:db8::1/64 scope global 
       valid_lft 3599sec preferred_lft 1799sec
    inet6 fe80::20c:29ff:fe3d:5e8e/64 scope link 
       valid_lft forever preferred_lft forever
字段解析:
  1. 接口标识

    • 2::接口索引
    • eth0:接口名称
    • <BROADCAST...>:接口标志
  2. 链路层信息

    • link/ether:MAC地址
    • brd:广播地址
  3. IPv4地址块

    • inet:IPv4地址
    • brd:广播地址
    • scope:作用域
    • secondary:次要地址
    • valid_lft/preferred_lft:生存时间
  4. IPv6地址块

    • inet6:IPv6地址
    • scope:作用域
    • dynamic:动态获取标志

七、与传统命令对比

功能ip address 命令ifconfig 命令
查看地址ip addr showifconfig
添加IPv4ip addr add 192.168.1.100/24 dev eth0ifconfig eth0 192.168.1.100 netmask 255.255.255.0
添加IPv6ip addr add 2001:db8::1/64 dev eth0ifconfig eth0 inet6 add 2001:db8::1/64
别名地址label 参数eth0:0 语法
批量删除ip addr flush dev eth0ifconfig eth0 0
临时地址valid_lft/preferred_lft不支持
作用域控制scope 参数有限支持
点对点配置peer 参数pointopoint 参数

八、故障排查与技巧

1. 地址不生效
# 检查接口状态
ip link show dev eth0 | grep state

# 启用接口
ip link set eth0 up

# 检查路由
ip route get 192.168.1.100
2. IPv6配置问题
# 启用IPv6支持
sysctl -w net.ipv6.conf.eth0.disable_ipv6=0

# 检查邻居发现
ip -6 neigh show dev eth0
3. 地址冲突检测
# 监听ARP探测
tcpdump -i eth0 arp

# 检查重复地址
ip -6 addr show tentative
4. 统计信息分析
ip -s addr show dev eth0
# 关注字段:RX/TX errors, dropped, overruns

九、持久化配置方法

1. NetworkManager (RHEL/CentOS/Fedora)
nmcli con mod eth0 ipv4.addresses "192.168.1.100/24"
nmcli con mod eth0 +ipv4.addresses "192.168.1.200/24"
2. systemd-networkd
# /etc/systemd/network/eth0.network
[Network]
Address=192.168.1.100/24
Address=192.168.1.200/24
3. Debian/Ubuntu (/etc/network/interfaces)
auto eth0
iface eth0 inet static
    address 192.168.1.100/24
    up ip addr add 192.168.1.200/24 dev eth0 label eth0:backup
4. 通用脚本方法
# /etc/rc.local
ip addr add 192.168.1.100/24 dev eth0



























Linux iproute2ip route 命令详解

ip route 是 Linux 网络配置的核心命令,用于管理内核的路由表,控制数据包的转发路径。它替代了传统的 route 命令,提供了更强大、更灵活的路由管理能力。

一、命令结构与基础语法

基本格式:

ip route [COMMAND] [ROUTE_SPEC] [OPTIONS]

核心命令:

命令功能示例
show显示路由表ip route show
add添加路由ip route add 10.0.0.0/24 via 192.168.1.1
del删除路由ip route del 10.0.0.0/24
change修改路由ip route change 10.0.0.0/24 via 192.168.1.2
replace替换路由(不存在则添加)ip route replace default via 192.168.1.1
flush清除路由ip route flush cache
get查询到目标的路由ip route get 8.8.8.8

路由规范 (ROUTE_SPEC):

  • to PREFIX:目标网络 (如 10.0.0.0/24)
  • via ADDRESS:下一跳网关
  • dev DEVICE:出口网络设备
  • src ADDRESS:源地址
  • table TABLE:路由表
  • metric NUMBER:路由度量值
  • mtu BYTES:路径 MTU
  • scope SCOPE:路由作用域

常用选项:

选项功能示例
-4仅 IPv4ip -4 route show
-6仅 IPv6ip -6 route show
-s显示统计信息ip -s route show
-d显示详细信息ip -d route show
-b批量操作模式ip -b routes.txt
-jJSON 格式输出ip -j route show

二、核心功能深度解析

1. 路由表显示 (ip route show)

输出解析

default via 192.168.1.1 dev eth0 proto dhcp metric 100 
10.0.0.0/24 via 192.168.1.2 dev eth0 metric 50 
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.10 metric 100 
  • 默认路由default via 192.168.1.1 dev eth0
  • 网络路由10.0.0.0/24 via 192.168.1.2 dev eth0
  • 直连路由192.168.1.0/24 dev eth0...
  • 关键属性
    • proto:路由来源(kernel, dhcp, static, boot
    • scope:作用域(global, link, host
    • metric:优先级(值越小优先级越高)

2. 路由作用域 (Scope)

定义路由的有效范围:

ip route add 10.0.0.0/24 via 192.168.1.1 scope <scope>
Scope描述适用场景
global全局有效(默认)互联网路由
site站点内有效(仅 IPv6)内部网络路由
link仅当前链路直连网络路由
host仅本机内部本地主机路由

3. 多路由表管理

Linux 支持 255 个路由表:

# 查看路由表列表
cat /etc/iproute2/rt_tables

# 添加自定义路由表
echo "200 custom" >> /etc/iproute2/rt_tables

# 操作特定路由表
ip route add 10.0.0.0/24 via 192.168.1.1 table custom
ip route show table custom

三、高级路由配置

1. 策略路由 (Policy Routing)

# 创建路由规则
ip rule add from 192.168.2.0/24 table 200
ip rule add fwmark 1 table 200

# 配置自定义路由表
ip route add default via 10.0.0.1 table 200

2. 多路径路由 (Multipath)

# 等价多路径 (ECMP)
ip route add default \
    nexthop via 192.168.1.1 weight 1 \
    nexthop via 192.168.2.1 weight 1

# 非等价多路径
ip route add 10.0.0.0/24 \
    nexthop via 192.168.1.1 weight 2 \
    nexthop via 192.168.2.1 weight 1

3. 路由重定向

# 重定向到本地
ip route add local 0.0.0.0/0 dev lo

# 重定向到特定接口
ip route add 203.0.113.5/32 dev tun0

4. VPN 路由管理

# OpenVPN 路由
ip route add 10.8.0.0/24 dev tun0
ip route add 0.0.0.0/1 via 10.8.0.1 dev tun0
ip route add 128.0.0.0/1 via 10.8.0.1 dev tun0

5. 路由缓存管理

# 清除路由缓存
ip route flush cache

# 查看缓存统计
ip -s route show cache

四、实用命令组合

1. 快速查看路由表

ip -br -c route show

2. 添加默认网关

ip route add default via 192.168.1.1 dev eth0

3. 添加特定主机路由

ip route add 203.0.113.5/32 via 192.168.1.100

4. 批量路由配置

# 路由配置文件 (routes.txt)
add 10.0.1.0/24 via 192.168.1.1
add 10.0.2.0/24 via 192.168.1.1
add 10.0.3.0/24 via 192.168.1.1

# 执行批量操作
ip -b routes.txt

5. 诊断路由问题

# 检查到目标的路由路径
ip route get 8.8.8.8

# 追踪路由路径
traceroute 8.8.8.8

# 检查 MTU 路径
ip route get 8.8.8.8 | grep mtu

五、路由类型详解

1. 直连路由 (Direct)

192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.10
  • 自动生成
  • 对应接口的直接网络

2. 默认路由 (Default)

default via 192.168.1.1 dev eth0
  • 目标 0.0.0.0/0
  • 当没有更具体路由时使用

3. 主机路由 (Host)

203.0.113.5 dev eth0 scope link
  • /32 地址
  • 精确到单台主机

4. 黑洞路由 (Blackhole)

ip route add blackhole 203.0.113.0/24
  • 丢弃匹配的数据包
  • 用于安全屏蔽

5. 不可达路由 (Unreachable)

ip route add unreachable 10.10.10.0/24
  • 返回 ICMP 不可达错误
  • 用于网络隔离

六、策略路由高级示例

1. 双线负载均衡

# 创建路由表
echo "201 isp1" >> /etc/iproute2/rt_tables
echo "202 isp2" >> /etc/iproute2/rt_tables

# 配置路由表
ip route add default via 192.168.1.1 table isp1
ip route add default via 192.168.2.1 table isp2

# 添加规则
ip rule add from 192.168.1.0/24 table isp1
ip rule add from 192.168.2.0/24 table isp2

# 主路由表
ip route add default \
    nexthop via 192.168.1.1 weight 1 \
    nexthop via 192.168.2.1 weight 1

2. 服务分流

# Web 流量走高速线路
ip rule add fwmark 1 table fast
ip route add default via 10.0.0.1 table fast

# 普通流量走普通线路
ip rule add fwmark 2 table normal
ip route add default via 192.168.1.1 table normal

# 标记流量 (使用 iptables)
iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 1
iptables -t mangle -A OUTPUT -p tcp --dport 443 -j MARK --set-mark 1

3. VRF 路由隔离

# 创建 VRF
ip link add vrf-red type vrf table 10

# 关联接口
ip link set eth0 master vrf-red

# 添加 VRF 路由
ip route add 10.0.0.0/24 via 192.168.1.1 vrf vrf-red

七、与传统 route 命令对比

功能routeip route
显示路由route -nip route show
添加默认路由route add default gw 192.168.1.1ip route add default via 192.168.1.1
添加网络路由route add -net 10.0.0.0 netmask 255.255.255.0 gw 192.168.1.1ip route add 10.0.0.0/24 via 192.168.1.1
删除路由route del -net 10.0.0.0 netmask 255.255.255.0ip route del 10.0.0.0/24
多路由表不支持支持255个路由表
策略路由不支持完整支持
多路径路由有限支持完整支持
路由标记不支持支持 fwmark
IPv6 支持需要 route -A inet6原生支持