Linux 【02- ip命令超详细教程】

Linux ip 命令超详细完整教程

一、基础说明

ip 是 Linux 现代网络管理工具,替代老旧 ifconfigroute,属于 iproute2 工具集,绝大多数发行版(CentOS7+/Ubuntu16+/Debian)默认预装。

语法通用结构

bash 复制代码
ip [选项] 对象 [命令] [参数]
# 对象常用:link(网卡)、addr(IP地址)、route(路由)、neigh(ARP邻居)、rule(路由策略)、maddr(组播)

常用全局选项

选项 作用
-s 输出详细统计信息(收发包、错误、丢包)
-4 仅操作 IPv4
-6 仅操作 IPv6
-h 人性化易读输出(带宽、字节单位自动转换)
-r 反向解析IP为主机名
-d 显示详细设备描述

二、ip link:管理网卡硬件、状态、MAC、MTU

1. 查看所有网卡信息

bash 复制代码
# 简洁查看
ip link
# 带详细流量统计
ip -s link
# 只看IPv4相关网卡
ip -4 link
# 人性化流量单位
ip -sh link

输出关键字段解释:

  • state UP/DOWN:网卡启用/关闭
  • mtu 1500:最大传输单元,以太网默认1500
  • link/ether xx:xx:MAC物理地址
  • txqueuelen 1000:网卡发送队列长度
  • RX/TX:收发包、错误、丢包、溢出统计

2. 只查看单个网卡(如 eth0 / ens33)

bash 复制代码
ip link show ens33
ip -s link show eth0

3. 启用/关闭网卡(UP/DOWN)

bash 复制代码
# 开启网卡
ip link set ens33 up
# 关闭网卡
ip link set ens33 down

4. 修改网卡MAC地址(临时,重启失效)

bash 复制代码
# 先关网卡
ip link set dev ens33 down
# 设置新MAC
ip link set dev ens33 address 00:11:22:33:44:55
# 重新启用
ip link set dev ens33 up

5. 修改 MTU 值(VPN/宽带常用9000巨帧)

bash 复制代码
# 设置MTU为9000
ip link set ens33 mtu 9000

6. 修改网卡队列长度

bash 复制代码
ip link set ens33 txqueuelen 2000

7. 网卡重命名(临时)

bash 复制代码
ip link set oldname name newname

8. 创建/删除虚拟网卡(veth、dummy)

dummy 虚拟网卡(本地环回虚拟口)

bash 复制代码
# 创建dummy0
ip link add dummy0 type dummy
# 删除
ip link delete dummy0

veth 成对虚拟网卡(容器/网桥通信)

bash 复制代码
# 创建一对 veth0 <-> veth1
ip link add veth0 type veth peer name veth1
# 删除任意一端即可整体删除
ip link delete veth0

9. 网桥操作(bridge)

bash 复制代码
# 创建网桥br0
ip link add br0 type bridge
# 将ens33加入网桥
ip link set ens33 master br0
# 脱离网桥
ip link set ens33 nomaster
# 删除网桥
ip link delete br0 type bridge

三、ip addr:管理网卡IP地址(替代 ifconfig)

1. 查看所有网卡IP

bash 复制代码
ip addr
# 简写等价
ip a
# 仅IPv4
ip -4 a
# 仅IPv6
ip -6 a

字段说明:

  • inet 192.168.1.100/24:IPv4地址+子网掩码前缀
  • inet6 fe80::xxx:链路本地IPv6
  • scope global:公网可路由地址
  • scope link:仅局域网链路地址

2. 给网卡添加静态IP

基础格式

bash 复制代码
ip addr add IP/掩码 dev 网卡名

示例:给 ens33 加 192.168.2.10/24

bash 复制代码
ip addr add 192.168.2.10/24 dev ens33

同时设置广播地址

bash 复制代码
ip addr add 192.168.2.10/24 broadcast 192.168.2.255 dev ens33

添加第二个IP(单网卡多IP)

bash 复制代码
# 网卡可以绑定多个IP,无需额外配置
ip addr add 192.168.2.11/24 dev ens33

3. 删除网卡IP

bash 复制代码
# 删除指定IP
ip addr del 192.168.2.10/24 dev ens33
# 清空网卡所有IP
ip addr flush dev ens33

4. 清空所有网卡IPv4/IPv6地址

bash 复制代码
# 清空全部IPv4
ip -4 addr flush all
# 清空全部IPv6
ip -6 addr flush all

5. 临时设置网卡为自动获取DHCP

ip addr 本身不支持DHCP,需搭配客户端:

bash 复制代码
dhclient ens33
# 释放IP
dhclient -r ens33

四、ip route:路由管理(替代 route 命令)

1. 查看路由表

bash 复制代码
ip route
# 简写
ip r
# 详细带统计
ip -s route
# 仅IPv6路由
ip -6 r

路由字段释义:

复制代码
192.168.1.0/24 dev ens33 proto kernel scope link src 192.168.1.100
# 目标网段 出口网卡 路由来源 作用域 本机出口IP
default via 192.168.1.1 dev ens33
# 默认路由:所有未知流量转发到网关192.168.1.1

2. 添加静态路由

格式

bash 复制代码
ip route add 目标网段 via 网关IP dev 网卡

示例1:访问10.0.0.0/8走网关192.168.2.1

bash 复制代码
ip route add 10.0.0.0/8 via 192.168.2.1 dev ens33

示例2:直连网段(无需网关,同一二层)

bash 复制代码
ip route add 172.16.1.0/24 dev ens33

示例3:添加默认网关(上网出口)

bash 复制代码
ip route add default via 192.168.1.1 dev ens33

3. 删除路由

bash 复制代码
# 删除指定网段路由
ip route del 10.0.0.0/8 via 192.168.2.1
# 删除默认路由
ip route del default

4. 修改/替换路由

bash 复制代码
# 替换原有默认网关
ip route change default via 192.168.1.2 dev ens33

5. 清空所有路由表

bash 复制代码
ip route flush all
# 清空指定网卡所有路由
ip route flush dev ens33
# 清空所有默认路由
ip route flush default

6. 路由缓存/查看指定目标路由(查询下一跳)

bash 复制代码
# 查询访问8.8.8.8走哪条路由
ip route get 8.8.8.8

7. 永久路由(临时ip route重启失效)

临时路由重启服务器/网卡后丢失,永久配置需修改系统网络配置文件:

  • CentOS/RHEL:/etc/sysconfig/network-scripts/route-ens33
  • Ubuntu/Debian Netplan:/etc/netplan/ yaml配置
  • Debian ifupdown:/etc/network/interfaces

五、ip neigh:ARP/邻居表管理(替代 arp 命令)

维护局域网 IP <-> MAC 映射表

1. 查看ARP邻居表

bash 复制代码
ip neigh
# 简写
ip n
# 详细
ip -s n

状态标识:

  • REACHABLE:正常连通
  • STALE:缓存过期,未验证
  • FAILED:ARP解析失败,主机不可达

2. 手动添加静态ARP绑定(防止ARP欺骗)

bash 复制代码
ip neigh add 192.168.1.50 lladdr aa:bb:cc:dd:ee:ff dev ens33 nud permanent
# nud permanent 永久静态绑定,不会自动老化

3. 删除单条ARP记录

bash 复制代码
ip neigh del 192.168.1.50 dev ens33

4. 清空网卡全部ARP缓存

bash 复制代码
ip neigh flush dev ens33
# 清空所有ARP
ip neigh flush all

5. 强制重新ARP探测

bash 复制代码
ip neigh replace 192.168.1.50 dev ens33 nud reachable

六、ip rule + ip route table:多路由表/策略路由(高级)

Linux 支持多张路由表,根据源IP、端口、标记选择不同网关,多用于多网卡多线宽带。

1. 查看策略路由规则

bash 复制代码
ip rule

默认两条规则:

复制代码
0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default
  • local:本地回环、本机IP路由
  • main:默认主路由表(平时ip r看到的)

2. 自定义路由表

1)添加新路由表(编辑 /etc/iproute2/rt_tables)

bash 复制代码
echo "100 telecom" >> /etc/iproute2/rt_tables
# 100=表ID,telecom=表名

2)给表添加路由

bash 复制代码
# 给telecom表设置默认网关
ip route add default via 192.168.3.1 table telecom
# 直连网段
ip route add 192.168.3.0/24 dev eth1 table telecom

3)添加策略:源IP 192.168.3.10 走telecom表

bash 复制代码
ip rule add from 192.168.3.10 table telecom

4)删除策略规则

bash 复制代码
ip rule del from 192.168.3.10

5)清空所有策略

bash 复制代码
ip rule flush

3. 查看指定路由表路由

bash 复制代码
ip route show table telecom

七、ip maddr:多播地址管理

1. 查看网卡多播组

bash 复制代码
ip maddr
ip maddr show ens33

2. 添加/删除多播组

bash 复制代码
ip maddr add 224.0.0.1 dev ens33
ip maddr del 224.0.0.1 dev ens33

八、ip tunnel:IP隧道(GRE/VXLAN 虚拟隧道,跨网段组网)

GRE隧道示例

bash 复制代码
# 创建gre隧道tun0,本地IP1.1.1.1,远端2.2.2.2
ip tunnel add tun0 mode gre local 1.1.1.1 remote 2.2.2.2 ttl 255
# 启用隧道
ip link set tun0 up
# 分配内网IP
ip addr add 10.0.0.1/24 dev tun0
# 删除隧道
ip tunnel del tun0

VXLAN虚拟二层隧道(容器云常用)

bash 复制代码
ip link add vxlan0 type vxlan id 100 local 192.168.1.10 dev ens33 dstport 4789

九、常用组合实战案例

案例1:临时配置单网卡静态IP+网关

bash 复制代码
# 1. 开启网卡
ip link set ens33 up
# 2. 设置IP
ip addr add 192.168.1.105/24 dev ens33
# 3. 添加默认网关
ip route add default via 192.168.1.1 dev ens33

案例2:单网卡双IP

bash 复制代码
ip addr add 192.168.1.105/24 dev ens33
ip addr add 192.168.1.106/24 dev ens33 label ens33:0
# label 给第二个IP加别名,兼容老工具查看

案例3:清理网卡所有IP+路由+ARP

bash 复制代码
ip addr flush dev ens33
ip route flush dev ens33
ip neigh flush dev ens33

案例4:查看本机访问外网完整路由路径

bash 复制代码
ip route get 114.114.114.114

案例5:绑定静态ARP防劫持

bash 复制代码
ip neigh add 192.168.1.1 lladdr xx:xx:xx:xx:xx:xx dev ens33 nud permanent

十、ip vs ifconfig 对比(为什么推荐ip)

  1. ifconfig 属于 net-tools,很多新版系统默认不装;ip 内置 iproute2,必装
  2. ip 功能统一:网卡、IP、路由、ARP、策略路由、隧道、网桥全部一条命令搞定
  3. ifconfig 不支持 IPv6、策略路由、vxlan、veth 等现代虚拟化网络
  4. ip 输出更规范,支持脚本解析、流量统计、人性化单位

安装缺失 net-tools(仅兼容旧脚本,不推荐日常使用):

bash 复制代码
# CentOS/RHEL
yum install net-tools -y
# Ubuntu/Debian
apt install net-tools -y

十一、脚本常用精简速查表

bash 复制代码
ip a                  # 查看IP
ip l                  # 查看网卡状态
ip r                  # 查看路由
ip n                  # 查看ARP
ip -s l show eth0     # 网卡流量统计
ip route get baidu.com# 查路由下一跳
ip addr flush dev eth0# 清空网卡IP
ip link set eth0 up   # 启用网卡