465 lines
9.5 KiB
Markdown
465 lines
9.5 KiB
Markdown
# 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 网络配置,进行网络故障排查和性能优化。 |