vault backup: 2026-11-07 16:33:44

This commit is contained in:
cheney
2026-11-07 16:33:55 +08:00
commit 7015312702
1208 changed files with 132432 additions and 0 deletions
+465
View File
@@ -0,0 +1,465 @@
# IP 系列命令管理 Linux 网络完全指南
## 一、IP 命令概述
`ip` 命令是 `iproute2` 工具包的一部分,取代了传统的 `ifconfig`、`route`、`arp` 等命令,提供更强大和统一的网络管理功能。
### 基本语法结构
```bash
ip [OPTIONS] OBJECT { COMMAND | help }
```
**常用 OBJECT(对象):**
- `link` - 网络接口管理
- `address` - IP地址管理
- `route` - 路由表管理
- `neigh` - ARP/邻居表管理
- `netns` - 网络命名空间管理
- `maddr` - 多播地址管理
---
## 二、网络接口管理(link)
### 1. 查看接口信息
```bash
# 查看所有接口状态
ip link show
ip -s link show # 带统计信息
ip -s -s link show # 更详细的统计信息
# 查看特定接口
ip link show eth0
ip -s link show eth0
```
### 2. 接口启停控制
```bash
# 启用接口
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. 接口重命名
```bash
# 临时重命名
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. 查看接口详情
```bash
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地址
```bash
# 查看所有接口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地址
```bash
# 添加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地址
```bash
# 删除指定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. 清理和刷新地址
```bash
# 清理特定类型的地址
ip addr flush dynamic # 清理动态获取的地址
ip addr flush permanent # 清理永久地址
ip addr flush temporary # 清理临时地址
# 清理IPv6特定地址
ip -6 addr flush dev eth0
```
---
## 四、路由表管理(route)
### 1. 查看路由表
```bash
# 查看所有路由
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. 添加路由
```bash
# 添加默认网关
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. 删除路由
```bash
# 删除默认路由
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. 修改和替换路由
```bash
# 替换路由(如果存在则替换,不存在则添加)
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. 特殊路由操作
```bash
# 清空路由表
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. 查看邻居表
```bash
# 查看ARP表(IPv4)
ip neigh show
ip neighbor show
# 查看IPv6邻居发现表
ip -6 neigh show
# 查看特定接口
ip neigh show dev eth0
```
### 2. 添加/删除ARP条目
```bash
# 添加静态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. 命名空间操作
```bash
# 创建命名空间
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. 命名空间网络配置
```bash
# 创建虚拟以太网对
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. 查看网络统计
```bash
# 查看所有接口统计
ip -s link show
# 查看特定接口详细统计
ip -s -s link show eth0
# 持续监控网络统计
watch -n 1 'ip -s link show eth0'
```
### 2. 监控网络事件
```bash
# 监控网络事件(需要root)
ip monitor all # 监控所有事件
ip monitor link # 只监控链路事件
ip monitor address # 只监控地址事件
```
---
## 八、高级网络配置
### 1. 多播地址管理
```bash
# 查看多播地址
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. 策略路由
```bash
# 查看路由规则
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. 隧道配置
```bash
# 创建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. 网络配置脚本
```bash
#!/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. 网络诊断脚本
```bash
#!/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. 批量配置脚本
```bash
#!/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. 网络不通排查步骤
```bash
# 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. 快速诊断命令
```bash
# 一键诊断
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
```
---
## 十二、最佳实践
1. **使用完整语法**:虽然简写方便,但脚本中建议使用完整命令
2. **配置持久化**:`ip` 命令配置是临时的,重启后会丢失
3. **参数验证**:重要操作前先验证参数
4. **批量操作**:多个接口配置使用循环
5. **错误处理**:脚本中添加错误检查
6. **权限管理**:大部分 `ip` 命令需要 root 权限
通过掌握 `ip` 系列命令,你可以高效地管理 Linux 网络配置,进行网络故障排查和性能优化。