sudo或切换到root用户。
ip命令是iproute2软件包的一部分,用于显示和操作路由、网络设备、策略路由和隧道。它是现代Linux发行版中推荐使用的网络配置工具,相比传统的网络工具,ip命令功能更强大,语法更统一。
ip命令的主要功能包括:
ip [选项] 对象 {命令|help}
ip [选项] 对象 [子对象] 命令 [参数]
| 对象 | 缩写 | 说明 |
|---|---|---|
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 |
人性化显示(易读格式) |
# 查看所有网络接口信息
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
# 查看所有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地址
# 查看路由表
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
# 查看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
# 查看策略路由规则
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
# 监控所有网络事件
ip monitor all
# 监控链路状态变化
ip monitor link
# 监控地址变化
ip monitor address
# 监控路由变化
ip monitor route
# 保存监控日志到文件
ip monitor all > network_monitor.log &
# 配置双网卡多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
# 创建虚拟接口(不推荐,已过时)
# 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
# 批量添加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
# 测试网络配置而不永久保存
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命令做的配置是临时的,重启后会失效。永久配置需要修改网络配置文件。
# 快速诊断网络问题
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命令 | 说明 |
|---|---|---|---|
| 查看网络接口 | 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命令更灵活 |
/etc/network/interfaces(Debian/Ubuntu)或/etc/sysconfig/network-scripts/(CentOS/RHEL)systemctl restart networking或systemctl restart NetworkManagerifconfig是旧版的网络配置工具,功能有限;ip命令是iproute2软件包的一部分,功能更强大,是现代Linux发行版的推荐工具。
主要区别:
ip [对象] [命令] [参数]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