1046 字
5 分钟
IP-IN-IP协议
一、IP-in-IP 协议原理
核心思想
在原始 IP 数据包外面 再封装一个新的 IP 头部 ,形成两层 IP 结构:
[ 外层 IP 头 | 内层 IP 头 | TCP/UDP 头 | 原始数据 ]- 外层 IP 头 :隧道端点(起点和终点)的 IP 地址(如 OpenStack 计算节点或 K8s Node 的物理 IP)。
- 内层 IP 头 :原始数据包的源/目的 IP 地址(如虚拟机或 Pod 的私有 IP)。
工作流程
- 封装 :入口隧道设备(如 Linux 内核)在原始 IP 包外添加新 IP 头,源地址为隧道入口,目的地址为隧道出口。
- 路由 :封装后的包通过物理网络路由到隧道终点。
- 解封装 :隧道终点移除外层 IP 头,将内层原始 IP 包传递给目标虚拟机或 Pod。
协议号
- 使用 IP 协议号
4(标识”IPv4-in-IPv4”)标识封装的包。
二、OpenStack 中的应用场景
IP-in-IP 通常作为 虚拟机跨子网/跨数据中心通信 的隧道方案:
典型场景
- 跨 Availability Zone 通信 :
- 不同 AZ 的计算节点通过 IP-in-IP 隧道连接,使虚拟机私有 IP 可直接路由。
- 混合云连接 :
- 打通本地 OpenStack 私有网络与公有云 VPC,例如通过 IP-in-IP 连接到 AWS/GCP 的 VPN 网关。
- 替代 VLAN/VXLAN:
- 在简单环境中替代 Overlay 网络,减少配置复杂度(需网络支持 PMTU 发现)。
实现方式
- OpenStack Neutron 结合 Linux 内核的
ipip模块创建隧道接口。
配置示例
# 创建 IPIP 隧道ip tunnel add tun0 mode ipip remote 192.168.200.2 local 192.168.100.1ip link set tun0 upip addr add 10.0.0.1/24 dev tun0三、Kubernetes 中的应用场景
主要在 CNI 网络插件 中实现 Pod 跨节点通信:
1. Calico 的 IP-in-IP 模式
- 原理 :
- 节点间 Pod 通信时,若目标 Pod 不在同一子网,流量会被封装在 IP-in-IP 隧道中发送。
- 通过 BGP 协议动态学习路由,决定是否启用隧道。
- 优势 :
- 高性能 :比 VXLAN 封装开销更低(少 16 字节头部)。
- 拓扑感知 :同子网节点间直接通信,避免额外隧道。
配置示例 (Calico manifest)
apiVersion: projectcalico.org/v3kind: IPPoolmetadata: name: default-ipv4-ippoolspec: cidr: 192.168.0.0/16 ipipMode: CrossSubnet # 仅跨子网时启用隧道 natOutgoing: true2. 场景对比
| 场景 | 是否使用 IP-in-IP | 原因 |
|---|---|---|
| 同一节点 Pod 通信 | ❌ 否 | 通过 cbr0 网桥直接转发 |
| 同子网跨节点 Pod 通信 | ⚠️ 可选(取决于配置) | 若路由直通可跳过隧道 |
| 跨子网/跨数据中心 Pod 通信 | ✅ 是 | 通过外层 IP 打通底层网络隔离 |
四、IP-in-IP 的优缺点
优点
- 低开销 :仅增加 20 字节新 IP 头(无额外 TCP/UDP 层)。
- 简单高效 :内核原生支持(Linux
ipip模块),无需用户态处理。 - 兼容性广 :任何支持 IP 路由的设备均可转发。
缺点
- 无加密 :明文传输,需结合 IPsec 保证安全(如 Calico 的
IPIP + IPSec模式)。 - MTU 问题 :封装后包可能超 MTU,依赖 PMTU Discovery 机制避免分片(需网络设备支持)。
- 功能单一 :不支持多播、负载均衡等高级特性(VXLAN 更灵活)。
五、替代方案对比
| 协议 | 封装方式 | 开销 | 安全性 | 适用场景 |
|---|---|---|---|---|
| IP-in-IP | [IP] + [IP] + Data | 低 | 弱 | 高性能 Pod/VM 通信 |
| VXLAN | [IP] + [UDP] + [VXLAN] + Data | 较高 | 弱 | 大规模云网络(支持多租户) |
| GRE | [IP] + [GRE] + [IP] + Data | 中等 | 弱 | 通用型隧道(支持多播) |
| IPsec | [IP] + [ESP/AH] + Data | 高 | 强 | 安全加密隧道 |
六、总结
- IP-in-IP 的本质是轻量级 IP 隧道 ,核心价值在于 低延迟、高吞吐 的跨网络通信。
- OpenStack:适用于虚拟机跨 AZ/混合云连通,物理网络较简单时优选。
- Kubernetes:Calico 的 IP-in-IP 模式是跨子网 Pod 通信的高性能方案,但需确保网络支持 PMTU。
- 生产建议 :
- 优先在 同数据中心内跨子网 场景使用。
- 跨公网时 务必叠加 IPsec 加密。
- 若需高级功能(租户隔离、多播),选择 VXLAN 更合适。