9.5 KiB
9.5 KiB
IP 系列命令管理 Linux 网络完全指南
一、IP 命令概述
ip 命令是 iproute2 工具包的一部分,取代了传统的 ifconfig、route、arp 等命令,提供更强大和统一的网络管理功能。
基本语法结构
ip [OPTIONS] OBJECT { COMMAND | help }
常用 OBJECT(对象):
link- 网络接口管理address- IP地址管理route- 路由表管理neigh- ARP/邻居表管理netns- 网络命名空间管理maddr- 多播地址管理
二、网络接口管理(link)
1. 查看接口信息
# 查看所有接口状态
ip link show
ip -s link show # 带统计信息
ip -s -s link show # 更详细的统计信息
# 查看特定接口
ip link show eth0
ip -s link show eth0
2. 接口启停控制
# 启用接口
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
3. 接口重命名
# 临时重命名
ip link set eth0 name eth-new
# 永久重命名(需要配合系统配置)
# 1. 先禁用接口
ip link set eth0 down
# 2. 重命名
ip link set eth0 name eth-new
# 3. 启用
ip link set eth-new up
4. 查看接口详情
ip -d link show # 显示接口详细信息
ip -d link show eth0
输出示例:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 00:0c:29:xx:xx:xx brd ff:ff:ff:ff:ff:ff promiscuity 0
addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
三、IP地址管理(address/addr)
1. 查看IP地址
# 查看所有接口IP地址
ip address show
ip addr show
ip a # 简写
# 查看特定接口
ip addr show eth0
ip a show dev eth0
# 查看IPv4或IPv6地址
ip -4 addr show # 只显示IPv4
ip -6 addr show # 只显示IPv6
2. 添加IP地址
# 添加IPv4地址
ip addr add 192.168.1.100/24 dev eth0
ip addr add 192.168.1.101/24 dev eth0 label eth0:1
# 添加IPv6地址
ip addr add 2001:db8::1/64 dev eth0
3. 删除IP地址
# 删除指定IP
ip addr del 192.168.1.100/24 dev eth0
# 删除所有IP(慎用)
ip addr flush dev eth0
ip addr flush dev eth0 scope global # 只删除全局地址
4. 清理和刷新地址
# 清理特定类型的地址
ip addr flush dynamic # 清理动态获取的地址
ip addr flush permanent # 清理永久地址
ip addr flush temporary # 清理临时地址
# 清理IPv6特定地址
ip -6 addr flush dev eth0
四、路由表管理(route)
1. 查看路由表
# 查看所有路由
ip route show
ip route list
ip r # 简写
# 查看特定网络路由
ip route show 192.168.1.0/24
# 查看特定接口路由
ip route show dev eth0
# 查看缓存路由
ip route show cache
# 查看详细路由信息
ip -d route show
2. 添加路由
# 添加默认网关
ip route add default via 192.168.1.1 dev eth0
# 添加网络路由
ip route add 10.0.0.0/8 via 192.168.1.254 dev eth0
# 添加直连路由
ip route add 192.168.2.0/24 dev eth1
# 添加多路径路由
ip route add default nexthop via 192.168.1.1 weight 1 \
nexthop via 192.168.2.1 weight 2
3. 删除路由
# 删除默认路由
ip route del default
# 删除特定路由
ip route del 10.0.0.0/8 via 192.168.1.254
ip route del 192.168.2.0/24 dev eth1
4. 修改和替换路由
# 替换路由(如果存在则替换,不存在则添加)
ip route replace 192.168.1.0/24 via 10.0.0.1 dev eth0
# 修改路由属性
ip route change 192.168.1.0/24 via 10.0.0.2 dev eth0 metric 100
5. 特殊路由操作
# 清空路由表
ip route flush table main
ip route flush cache # 清空路由缓存
# 添加策略路由
ip route add table 100 default via 10.0.0.1
# 查看特定路由表
ip route show table local
ip route show table main
五、邻居表管理(ARP/NDP)
1. 查看邻居表
# 查看ARP表(IPv4)
ip neigh show
ip neighbor show
# 查看IPv6邻居发现表
ip -6 neigh show
# 查看特定接口
ip neigh show dev eth0
2. 添加/删除ARP条目
# 添加静态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
3. 邻居状态说明
permanent- 永久条目,手动添加noarp- 不需ARP验证reachable- 可达状态stale- 陈旧状态delay- 延迟验证failed- 验证失败
六、网络命名空间管理(netns)
1. 命名空间操作
# 创建命名空间
ip netns add ns1
ip netns add ns2
# 列出所有命名空间
ip netns list
# 在命名空间中执行命令
ip netns exec ns1 ip addr show
ip netns exec ns1 bash # 进入命名空间的shell
# 删除命名空间
ip netns del ns1
2. 命名空间网络配置
# 创建虚拟以太网对
ip link add veth0 type veth peer name veth1
# 将一端移到命名空间
ip link set veth1 netns ns1
# 在命名空间内配置
ip netns exec ns1 ip addr add 10.0.0.1/24 dev veth1
ip netns exec ns1 ip link set veth1 up
七、网络统计和监控
1. 查看网络统计
# 查看所有接口统计
ip -s link show
# 查看特定接口详细统计
ip -s -s link show eth0
# 持续监控网络统计
watch -n 1 'ip -s link show eth0'
2. 监控网络事件
# 监控网络事件(需要root)
ip monitor all # 监控所有事件
ip monitor link # 只监控链路事件
ip monitor address # 只监控地址事件
八、高级网络配置
1. 多播地址管理
# 查看多播地址
ip maddr show
ip maddr show dev eth0
# 添加多播地址
ip maddr add 224.0.0.1 dev eth0
# 删除多播地址
ip maddr del 224.0.0.1 dev eth0
2. 策略路由
# 查看路由规则
ip rule show
# 添加路由规则
ip rule add from 192.168.1.0/24 table 100
ip rule add fwmark 1 table 100
# 删除路由规则
ip rule del from 192.168.1.0/24
3. 隧道配置
# 创建GRE隧道
ip tunnel add gre1 mode gre remote 203.0.113.1 local 192.0.2.1 ttl 255
ip link set gre1 up
ip addr add 10.0.0.1/30 dev gre1
九、实用脚本示例
1. 网络配置脚本
#!/bin/bash
# 配置多IP地址
INTERFACE="eth0"
NETWORK="192.168.1"
# 清除现有配置
ip addr flush dev $INTERFACE
# 添加主IP
ip addr add ${NETWORK}.100/24 dev $INTERFACE
# 添加多个辅助IP
for i in {101..110}; do
ip addr add ${NETWORK}.$i/24 dev $INTERFACE label ${INTERFACE}:$i
done
# 设置默认网关
ip route add default via ${NETWORK}.1
# 启用接口
ip link set $INTERFACE up
2. 网络诊断脚本
#!/bin/bash
# 网络状态诊断
echo "=== 接口状态 ==="
ip link show | grep -E "^[0-9]+:"
echo -e "\n=== IP地址 ==="
ip addr show | grep -E "inet|inet6"
echo -e "\n=== 路由表 ==="
ip route show
echo -e "\n=== ARP表 ==="
ip neigh show
echo -e "\n=== 连接统计 ==="
ss -s
3. 批量配置脚本
#!/bin/bash
# 批量配置网络命名空间
for i in {1..5}; do
# 创建命名空间
ip netns add ns$i
# 创建虚拟接口对
ip link add veth$i type veth peer name vpeer$i
# 配置主端
ip link set veth$i up
ip addr add 10.0.$i.1/24 dev veth$i
# 配置命名空间端
ip link set vpeer$i netns ns$i
ip netns exec ns$i ip link set vpeer$i up
ip netns exec ns$i ip addr add 10.0.$i.2/24 dev vpeer$i
ip netns exec ns$i ip route add default via 10.0.$i.1
done
十、IP命令与传统命令对照表
| 功能 | 传统命令 | ip命令 |
|---|---|---|
| 查看接口 | ifconfig -a |
ip link show |
| 配置IP | ifconfig eth0 192.168.1.100 netmask 255.255.255.0 |
ip addr add 192.168.1.100/24 dev eth0 |
| 查看路由 | route -n |
ip route show |
| 添加路由 | route add -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.1.1 |
ip route add 10.0.0.0/8 via 192.168.1.1 |
| 查看ARP | arp -an |
ip neigh show |
| 添加ARP | arp -s 192.168.1.100 00:11:22:33:44:55 |
ip neigh add 192.168.1.100 lladdr 00:11:22:33:44:55 dev eth0 |
十一、常见问题排查
1. 网络不通排查步骤
# 1. 检查接口状态
ip link show eth0
# 2. 检查IP配置
ip addr show eth0
# 3. 检查路由
ip route show
ip route get 8.8.8.8
# 4. 检查ARP表
ip neigh show dev eth0
# 5. 检查防火墙
iptables -L -n -v
2. 快速诊断命令
# 一键诊断
ip a && ip r && ip neigh
# 保存网络配置快照
ip addr show > /tmp/network_snapshot.txt
ip route show >> /tmp/network_snapshot.txt
ip neigh show >> /tmp/network_snapshot.txt
十二、最佳实践
- 使用完整语法:虽然简写方便,但脚本中建议使用完整命令
- 配置持久化:
ip命令配置是临时的,重启后会丢失 - 参数验证:重要操作前先验证参数
- 批量操作:多个接口配置使用循环
- 错误处理:脚本中添加错误检查
- 权限管理:大部分
ip命令需要 root 权限
通过掌握 ip 系列命令,你可以高效地管理 Linux 网络配置,进行网络故障排查和性能优化。