-I 为什么必须会
多网卡、多出口、策略路由的环境里,同一个目标从不同源地址发出,走的路径、返回的结果、对端的策略判定都可能不同。ping 的 -I 参数用来绑定源:传接口名时由内核按该接口选择源地址,传 IP 地址时强制定用这个源。复现「服务器选了错误的源 IP 导致对端拒绝」这类故障,必须先固定源再测,否则每次结果都不一样。
基本信息
| 适用平台 | Linux iputils-ping(-I 也支持传接口名) |
|---|---|
| 语法差异 | -I eth1 传接口名,内核按接口选源;-I 10.10.0.2 传地址,强制绑定 |
| 配套命令 | ip route get 查看内核实际选用的出接口与源地址 |
| 典型场景 | 多网卡、多出口、VRF、策略路由环境 |
| 权限要求 | 绑定源地址通常需要 root 权限 |
典型使用场景
- 业务走了错误的源 IP 被对端策略拒绝:固定源复现故障
- 多出口服务器验证某条链路是否可用:绑定对应出口网卡的源地址测试
- VPN 或隧道场景确认流量是否从隧道接口发出
- MTU 探测时固定出接口,避免结果随选路变化
- 对比两个源地址的连通性差异,快速定位策略路由问题
绑定源接口与源地址
绑定源接口与源地址
ping -I eth1 -c 3 10.0.0.5 # 指定出接口,内核按该接口选源地址
ping -I 10.10.0.2 -c 3 10.0.0.5 # 强制使用该源 IP 发出
ping -I eth1 -s 1400 -M do -c 2 10.0.0.5 # 组合:从指定口做 MTU 探测
# 先查内核会选哪个源地址,再决定是否要绑定
ip route get 10.0.0.5 # 输出含 dev 与 src
ip route get 10.0.0.5 from 10.10.0.2 # 指定源时的选路结果参数与语义
| 写法 | 语义 | 说明 |
|---|---|---|
| -I eth1 | 绑定出接口 | 源地址由内核按接口选择,可能不是业务期望的那个 |
| -I 10.10.0.2 | 强制绑定源地址 | 最贴近业务真实流量形态的验证方式 |
| 不加 -I | 走默认选路 | 结果只代表默认路径,多出口机器上参考价值有限 |
| -M do | 禁止分片 | 配合 -s 用于 MTU 探测 |
| -c N | 发送包数 | 巡检用 1-3,评估质量用更多 |
策略路由或 VRF 环境下「同一条命令、不同源地址、结果不同」是常态;做对比测试时务必固定源,否则结论不可复现。