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)。

​ 工作流程 ​#

  1. ​ 封装 ​​:入口隧道设备(如 Linux 内核)在原始 IP 包外添加新 IP 头,源地址为隧道入口,目的地址为隧道出口。
  2. ​ 路由 ​​:封装后的包通过物理网络路由到隧道终点。
  3. ​ 解封装 ​​:隧道终点移除外层 IP 头,将内层原始 IP 包传递给目标虚拟机或 Pod。

​​ 协议号 ​#

  • 使用 ​​IP 协议号 4​(标识”IPv4-in-IPv4”)标识封装的包。

二、OpenStack 中的应用场景#

IP-in-IP 通常作为 ​​ 虚拟机跨子网/跨数据中心通信 ​​ 的隧道方案:

​​ 典型场景 ​​#

  1. ​ 跨 Availability Zone 通信 ​​:
    • 不同 AZ 的计算节点通过 IP-in-IP 隧道连接,使虚拟机私有 IP 可直接路由。
  2. ​ 混合云连接 ​​:
    • 打通本地 OpenStack 私有网络与公有云 VPC,例如通过 IP-in-IP 连接到 AWS/GCP 的 VPN 网关。
  3. ​ 替代 VLAN/VXLAN​​:
    • 在简单环境中替代 Overlay 网络,减少配置复杂度(需网络支持 PMTU 发现)。

​​ 实现方式 ​​#

  • ​OpenStack Neutron​​ 结合 Linux 内核的 ipip 模块创建隧道接口。

配置示例

Terminal window
# 创建 IPIP 隧道
ip tunnel add tun0 mode ipip remote 192.168.200.2 local 192.168.100.1
ip link set tun0 up
ip 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/v3
kind: IPPool
metadata:
name: default-ipv4-ippool
spec:
cidr: 192.168.0.0/16
ipipMode: CrossSubnet # 仅跨子网时启用隧道
natOutgoing: true

​2. 场景对比 ​​#

​ 场景 ​是否使用 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 更合适。