1046 字
5 分钟
IP-IN-IP协议
2025-12-12 00:00:00

一、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 更合适。
Comment seems to stuck. Try to refresh?✨