Floating IP(浮动 IP)是云网络中一个非常核心的概念,尤其在 OpenStack、阿里云、腾讯云等 IaaS 平台中广泛使用。它解决了 虚拟机(VM)无法直接从外部网络访问 的问题。
✅ 一、一句话定义
Floating IP 是一种“可动态绑定的公网 IP 地址”,用于将外部网络流量映射到私有网络中的虚拟机(VM)或服务上。
✅ 二、核心作用
| 问题 | Floating IP 的解决方案 |
|---|---|
VM 在私有网络(如 10.0.0.10),外部无法访问 | 给 VM 绑定一个公网 IP(如 203.0.113.10) |
| VM 重启或故障迁移后 IP 改变 | Floating IP 可解绑并重新绑定到新 VM |
| 高可用切换 | 主备 VM 共享同一个 Floating IP,故障时漂移 |
🔁 本质:实现“公网可达性”与“内网实例”的解耦
✅ 三、工作原理(以 OpenStack 为例)
📌 架构图
深色版本
[ 外部网络(公网)]
↓
[ Floating IP: 203.0.113.10 ]
↓ (DNAT)
[ 路由器(Neutron Router)]
↓ (SNAT 反向)
[ 私有网络(10.0.0.0/24)]
↓
[ VM: 10.0.0.10 ]
🔧 关键机制
1. DNAT(目标地址转换)
-
外部用户访问
203.0.113.10:22 -
云平台路由器(如 Neutron Router)执行 DNAT:
- 目标 IP 从
203.0.113.10→10.0.0.10
- 目标 IP 从
-
流量进入私有网络,送达 VM
2. SNAT(源地址转换)
- VM 回复时,源 IP 是
10.0.0.10 - 路由器执行 SNAT,源 IP 改为
203.0.113.10 - 外部用户看到的是“从
203.0.113.10回复”
🔄 整个过程对 VM 透明,VM 甚至不知道自己绑定了 Floating IP
✅ 四、典型操作命令(OpenStack)
Bash
深色版本
# 1. 创建 Floating IP
openstack floating ip create public-net
# 输出:Floating IP: 203.0.113.10
# 2. 绑定到 VM(Port)
openstack server add floating ip my-vm 203.0.113.10
# 3. 解绑
openstack server remove floating ip my-vm 203.0.113.10
# 4. 删除 Floating IP
openstack floating ip delete 203.0.113.10
✅ 五、Floating IP vs 固定 IP(Fixed IP)
| 特性 | Floating IP(浮动 IP) | Fixed IP(固定 IP) |
|---|---|---|
| 网络位置 | 公网(外部可达) | 私网(如 10.0.0.x) |
| 是否可变 | 可解绑、重绑定 | 通常随 VM 创建固定 |
| 用途 | 外部访问入口 | 内部通信 |
| NAT 类型 | DNAT(入向) | 无(或 SNAT 出向) |
| 高可用 | 支持漂移 | 不支持 |
| 成本 | 通常收费 | 一般免费 |
🎯 类比:
- Fixed IP 像你家的门牌号(
幸福小区 3 栋 501)- Floating IP 像你的手机号,别人通过它找到你,即使你搬家(换 VM)也能联系
✅ 六、不同云厂商的叫法
| 云厂商 | 名称 | 说明 |
|---|---|---|
| OpenStack | Floating IP | 最原始的叫法 |
| 阿里云 | 弹性公网 IP(EIP) | 支持绑定 ECS、NAT、SLB 等 |
| 腾讯云 | 弹性公网 IP(EIP) | 同上 |
| AWS | Elastic IP(EIP) | 绑定 EC2 实例或 NAT 网关 |
| 华为云 | 弹性公网 IP | 支持按需绑定 |
| Azure | Public IP Address | 分标准/基本 SKU |
💡 虽然名称不同,但核心思想一致:可绑定的公网 IP
✅ 七、高级用法
1. 高可用(HA)漂移
Text
深色版本
主 VM: 10.0.0.10 ← 绑定 Floating IP: 203.0.113.10
故障
↓
Floating IP 解绑并绑定到备 VM: 10.0.0.20
- 客户端无感知,连接恢复
2. 绑定到负载均衡器
- Floating IP 绑定到 SLB/Nginx
- 后端多个 VM 共享一个公网入口
- 更安全、可扩展
3. NAT 网关出口 IP
- 多个私网 VM 共享一个 Floating IP 出公网
- 节省公网 IP 资源
✅ 八、技术实现(底层原理)
在 Neutron Router 中:
Bash
深色版本
# 查看 iptables DNAT 规则
iptables -t nat -L POSTROUTING -n -v
输出示例:
深色版本
DNAT tcp -- 0.0.0.0/0 203.0.113.10 tcp dpt:22 to:10.0.0.10:22
在 OVS 中:
- Floating IP 的绑定信息通过
ovsdb下发 - 流表生成 DNAT 规则
✅ 九、常见问题
| 问题 | 解答 |
|---|---|
| 一个 VM 可以绑定多个 Floating IP 吗? | 可以,但通常不推荐,增加复杂性 |
| Floating IP 会影响性能吗? | 有轻微 NAT 开销,但现代硬件几乎无影响 |
| Floating IP 会丢包吗? | 正常不会,但 NAT 表满时可能丢包 |
| Floating IP 可以跨可用区绑定吗? | 取决于云厂商,多数支持 |
✅ 十、面试回答模板
“Floating IP 是云网络中的一种公网 IP,用于让外部用户访问私网中的 VM。
它的核心机制是 DNAT:外部访问 Floating IP 时,云平台路由器将其映射到 VM 的私网 IP。
特点是 可动态绑定、支持漂移、实现高可用。
在 OpenStack 中叫 Floating IP,在阿里云/AWS 中叫 EIP,本质相同。
它解决了‘私网 VM 无法被外网访问’的问题,是 IaaS 的基础能力。”
✅ 总结
| 关键点 | 说明 |
|---|---|
| 本质 | 可绑定的公网 IP |
| 机制 | DNAT + SNAT |
| 价值 | 外网可达、高可用、灵活管理 |
| 趋势 | 向 EIP 演进,支持更多绑定目标(SLB、NAT、VPN) |
掌握 Floating IP,就掌握了 云网络南北向流量入口 的核心设计思想。