公众号旧文

为什么阿里云 ECS 公网 IP 不在网卡上,却可以直接 SSH 连接?

作者:胖子阅读 —

很多人第一次登录 Alibaba Cloud 的 ECS 时都会有一个疑问:

明明 ip addr 里只有 172.22.x.x 内网地址, 为什么我可以直接 ssh 公网 IP,还不用写端口号?

这篇文章带你彻底搞懂云服务器的公网实现原理。

一、现象

在 ECS 里执行:

ip
 addr

你看到的是:

172
.
22
.
184
.
73

而不是:

39
.
96
.
187
.
9

但是你却可以:

ssh
 root@
39.96.187.9

直接登录。

二、传统公网服务器是怎样的?

如果是传统物理服务器或者早期 VPS:

eth0
:
1.2.3.4

公网 IP 就直接绑定在网卡上。

数据路径是:

你的电脑 → 服务器公网 IP → 服务器

简单直接。

三、家用路由器 NAT 是怎样的?

家里常见情况:

内网机器:192.168.1.10
公网 IP:1.2.3.4

路由器做端口转发:

1
.
2
.
3
.
4
:
2222
 →
192.168.1.10:22

你必须:

ssh

1.2.3.4
 -p
2222

这是端口级 NAT。

四、阿里云 ECS 用的是什么?

阿里云 ECS 使用的是:

1:1 全端口 NAT 映射

结构类似:

公网 39.96.187.9
        ↓
云边界 NAT 网关
        ↓
私网 172.22.184.73

并且是:

39
.
96
.
187
.
9
:任意端口  →
172.22.184.73
:相同端口

所以:

39
.
96
.
187
.
9
:
22
 →
172.22.184.73:22
39
.
96
.
187
.
9
:
80
 →
172.22.184.73:80
39
.
96
.
187
.
9
:
443
 →
172.22.184.73:443

这就是为什么你可以:

ssh
 root@
39.96.187.9

五、真实流量路径

当你 SSH 时,真实路径是:

你的电脑
   ↓
阿里云公网路由
   ↓
NAT 网关
   ↓
ECS 内网 IP (172.22.x.x)

返回时:

172.22.x.x
   ↓
NAT 网关
   ↓
39.96.x.x (公网 IP)
   ↓
你的电脑

公网 IP 实际上存在于云厂商的网络设备上,而不是你的虚拟机里。

六、为什么云厂商要这样设计?

原因有几个:

1️⃣ 安全隔离

实例只暴露私网 IP 公网统一由边界设备管理

2️⃣ 支持热迁移

如果你的实例迁移到另一台物理机:

  • 私网 IP 不变
  • 公网 IP 仍然绑定在边界设备

迁移对外完全无感。

3️⃣ 公网 IP 可以随时解绑

在控制台解绑公网 IP,本质上只是:

  • 取消 1:1 NAT 规则
  • 实例网络不需要重启

七、怎么判断自己是不是 NAT 模式?

在 ECS 里运行:

ip
 addr

如果看不到公网 IP 基本就是 NAT 模式。

再看路由:

ip
 route

通常会看到:

default
 via
172
.
22
.x.
1

说明默认网关是内网地址。

八、那阿里云ECS的公网算是“真公网”吗?

这是一个常见争论。

技术上讲:

  • 你的实例没有公网 IP
  • 但你拥有一个 1:1 公网映射

从使用效果上:

✔ 等同真公网 ✔ 不存在端口限制 ✔ 不需要端口转发

只是实现方式不同。

九、总结

当你在阿里云 ECS 上:

  • 看到只有内网 IP
  • 却能直接 SSH 公网 IP

不要困惑。

因为云厂商做的是:

1:1 全端口 NAT 映射

公网 IP 在云边界设备上,你的 ECS 只在私网中运行。

但对外表现为一台拥有公网 IP 的服务器。