Linux ip命令

ip命令是Linux系统中功能最强大的网络配置工具,替代了传统的ifconfig、route、arp等命令。
注意:ip命令需要root权限执行大部分操作。普通用户可以使用sudo或切换到root用户。

一、命令简介

ip命令是iproute2软件包的一部分,用于显示和操作路由、网络设备、策略路由和隧道。它是现代Linux发行版中推荐使用的网络配置工具,相比传统的网络工具,ip命令功能更强大,语法更统一。

ip命令的主要功能包括:

  • 网络接口(网卡)配置
  • IP地址管理
  • 路由表管理
  • ARP表管理
  • 策略路由
  • 隧道配置
  • 邻居(ARP/NDISC)缓存管理

二、命令语法

ip [选项] 对象 {命令|help}
ip [选项] 对象 [子对象] 命令 [参数]

三、主要对象(Objects)

对象 缩写 说明
link l 网络设备(网卡)管理
address addr/a IP地址管理
route r 路由表管理
rule ru 策略路由规则
neighbor neigh/n ARP/NDISC缓存管理
maddress maddr 多播地址管理
tunnel tun 隧道配置
monitor mon 监控网络链路消息

四、常用选项

选项 说明
-s, -stats, -statistics 显示详细信息(统计信息)
-d, -details 显示详细信息
-f, -family {inet|inet6|link} 指定协议族(IPv4/IPv6/链路层)
-4 IPv4的快捷方式(同 -f inet)
-6 IPv6的快捷方式(同 -f inet6)
-0 链路层的快捷方式(同 -f link)
-o, -oneline 单行输出(便于脚本处理)
-r, -resolve 使用DNS解析主机名
-c, -color 彩色输出
-h, -human, -human-readable 人性化显示(易读格式)

五、使用示例

1. 网络设备管理(ip link)

# 查看所有网络接口信息
ip link show
ip -c link show  # 彩色输出

# 查看指定网卡信息
ip link show eth0
ip -s link show eth0  # 显示统计信息

# 启用/禁用网络接口
ip link set eth0 up
ip link set eth0 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 eth_new

2. IP地址管理(ip address/addr)

# 查看所有IP地址
ip address show
ip -c addr show  # 彩色输出
ip -4 addr show  # 只显示IPv4地址
ip -6 addr show  # 只显示IPv6地址

# 查看指定接口的IP地址
ip addr show eth0

# 添加IP地址
ip addr add 192.168.1.100/24 dev eth0
ip addr add 192.168.1.101/24 dev eth0  # 添加第二个IP

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

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

# 清除所有IP地址
ip addr flush dev eth0
ip -6 addr flush dev eth0  # 清除IPv6地址

3. 路由表管理(ip route)

# 查看路由表
ip route show
ip -c route show  # 彩色输出
ip route list  # 同show

# 查看指定网络的路由
ip route show 192.168.1.0/24

# 添加默认网关
ip route add default via 192.168.1.1 dev eth0

# 添加静态路由
ip route add 10.0.0.0/24 via 192.168.1.254 dev eth0
ip route add 172.16.0.0/16 via 192.168.1.254

# 添加多路径路由
ip route add default nexthop via 192.168.1.1 dev eth0 weight 1 \
    nexthop via 192.168.2.1 dev eth1 weight 2

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

# 清除路由缓存
ip route flush cache

# 测试路由路径
ip route get 8.8.8.8

4. ARP表管理(ip neighbor)

# 查看ARP表
ip neighbor show
ip -c neigh show  # 彩色输出

# 查看指定接口的ARP表
ip neigh show dev eth0

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

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

# 刷新ARP表
ip neigh flush dev eth0

5. 策略路由(ip rule)

# 查看策略路由规则
ip rule show
ip -c rule show  # 彩色输出

# 添加策略路由规则
# 来自192.168.1.0/24的数据包使用表100
ip rule add from 192.168.1.0/24 table 100

# 添加基于源地址的规则
ip rule add from 10.0.0.1 lookup 200

# 添加基于目的地址的规则
ip rule add to 8.8.8.8 lookup 300

# 添加基于防火墙标记的规则
ip rule add fwmark 1 lookup 100

# 删除策略路由规则
ip rule del from 192.168.1.0/24 table 100

# 清空所有自定义规则
ip rule flush
ip rule add from all lookup main pref 32766
ip rule add from all lookup default pref 32767

6. 网络监控(ip monitor)

# 监控所有网络事件
ip monitor all

# 监控链路状态变化
ip monitor link

# 监控地址变化
ip monitor address

# 监控路由变化
ip monitor route

# 保存监控日志到文件
ip monitor all > network_monitor.log &

7. 综合示例

# 配置双网卡多IP服务器
# 配置eth0
ip link set eth0 up
ip addr add 192.168.1.100/24 dev eth0
ip addr add 192.168.1.101/24 dev eth0

# 配置eth1
ip link set eth1 up
ip addr add 10.0.0.100/24 dev eth1

# 设置默认网关
ip route add default via 192.168.1.1 dev eth0

# 添加静态路由
ip route add 172.16.0.0/16 via 10.0.0.1 dev eth1

# 查看完整配置
ip -c -br link show
ip -c -br addr show
ip -c route show

六、实用技巧

技巧1:创建网络别名(虚拟接口)
# 创建虚拟接口(不推荐,已过时)
# ifconfig eth0:0 192.168.1.200 netmask 255.255.255.0 up

# 使用ip命令的推荐方法 - 添加多个IP到同一接口
ip addr add 192.168.1.200/24 dev eth0 label eth0:0
ip addr add 192.168.1.201/24 dev eth0 label eth0:1

# 查看带标签的IP地址
ip addr show label eth0:0
技巧2:绑定多个IP地址段
# 批量添加IP地址
for i in {2..50}; do
    ip addr add 192.168.1.$i/24 dev eth0
done

# 使用脚本添加多个网段的IP
ip addr add 10.0.0.10/24 dev eth0
ip addr add 172.16.0.10/24 dev eth0
ip addr add 192.168.100.10/24 dev eth0
技巧3:临时网络配置(重启失效)
# 测试网络配置而不永久保存
ip addr add 192.168.99.100/24 dev eth0
ip route add default via 192.168.99.1

# 测试完成后恢复
ip addr del 192.168.99.100/24 dev eth0
ip route del default via 192.168.99.1

注意:使用ip命令做的配置是临时的,重启后会失效。永久配置需要修改网络配置文件。

技巧4:网络故障排查
# 快速诊断网络问题
echo "=== 网络接口状态 ==="
ip -c link show

echo "=== IP地址配置 ==="
ip -c addr show

echo "=== 路由表 ==="
ip -c route show

echo "=== ARP表 ==="
ip -c neigh show

echo "=== 路由追踪 ==="
ip route get 8.8.8.8

# 监控网络变化(实时)
ip monitor all &

七、ip命令 vs 传统命令对比

功能 传统命令 ip命令 说明
查看网络接口 ifconfig -a ip link show ip命令显示更详细
查看IP地址 ifconfig ip addr show ip命令支持IPv6更好
启用/禁用接口 ifconfig eth0 up/down ip link set eth0 up/down 功能相同
添加IP地址 ifconfig eth0 add 192.168.1.100/24 ip addr add 192.168.1.100/24 dev eth0 语法不同
查看路由表 route -n ip route show ip命令显示更多信息
添加默认网关 route add default gw 192.168.1.1 ip route add default via 192.168.1.1 语法不同
查看ARP表 arp -n ip neigh show ip命令更灵活

八、注意事项

  • 权限要求:大多数ip命令需要root权限执行
  • 临时配置:使用ip命令的配置是临时的,重启后会丢失
  • 配置文件:永久配置需要修改/etc/network/interfaces(Debian/Ubuntu)或/etc/sysconfig/network-scripts/(CentOS/RHEL)
  • 网络服务:修改网络配置后,可能需要重启网络服务:systemctl restart networkingsystemctl restart NetworkManager
  • 谨慎操作:错误的网络配置可能导致系统无法访问,建议在本地终端操作
  • 备份配置:修改重要网络配置前,先备份原配置
  • IPv6支持:ip命令对IPv6的支持比传统命令更好

九、常见问题

ifconfig是旧版的网络配置工具,功能有限;ip命令是iproute2软件包的一部分,功能更强大,是现代Linux发行版的推荐工具。

主要区别:

  • ip命令语法更统一:ip [对象] [命令] [参数]
  • ip命令功能更全面,支持策略路由、隧道等高级功能
  • ip命令对IPv6支持更好
  • 许多新的Linux发行版默认不再安装ifconfig

ip命令的配置是临时的,要永久保存需要修改网络配置文件:

Debian/Ubuntu:

# 编辑网络接口配置文件
sudo nano /etc/network/interfaces

# 添加配置示例
auto eth0
iface eth0 inet static
    address 192.168.1.100
    netmask 255.255.255.0
    gateway 192.168.1.1
    dns-nameservers 8.8.8.8 8.8.4.4

CentOS/RHEL/Fedora:

# 编辑网卡配置文件
sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0

# 添加配置示例
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4

使用-s选项查看详细统计信息:

# 查看网络接口统计信息
ip -s link show eth0

# 查看所有接口的详细统计
ip -s -s link show

# 查看路由统计信息
ip -s route show

# 查看邻居缓存统计
ip -s neigh show

统计信息包括:

  • 接收/发送的数据包数量
  • 接收/发送的字节数
  • 错误包数量
  • 丢包数量
  • 溢出数量

这个错误表示要添加的配置已经存在。解决方法:

# 1. 先删除已存在的配置
ip addr del 192.168.1.100/24 dev eth0

# 2. 再重新添加
ip addr add 192.168.1.100/24 dev eth0

# 对于路由,先删除再添加
ip route del 10.0.0.0/24 via 192.168.1.254
ip route add 10.0.0.0/24 via 192.168.1.254 dev eth0

或者使用replace命令(如果支持):

ip addr replace 192.168.1.100/24 dev eth0