快速站起来后AWS EC2 实例对于 Linux 平台,我尝试从 AWS 外部通过 ssh 客户端(例如 PuTTY)连接到它。通过查看ec2配置,它有公共IPv地址和私有IPv地址。顺便说一句,我查了一下允许来自外部世界的 http 流量。
如果有人能解释我的以下问题,我将不胜感激,
- 我能够远程连接到该服务器公共IP但没有私有IP,为什么?
- 当我跑的时候
ip addr show eth0
,它又回来了私有IP。我期待公共IP。
我查了一下它们的差异,我想我确实理解下面 stmt 所说的内容:
您可以使用公共地址在实例和 Internet 之间进行通信。 AWS 将外部 DNS 主机名解析为实例网络外部的实例的公有 IP 地址,以及实例网络内部的实例的私有 IPv4 地址。
答案1
对于 IPv4 公共地址,AWS 使用 EC2 服务器实例执行大多数新 AWS 用户不期望的操作。一开始我确实对此感到困惑。
尽管公共 IP 地址与 EC2 服务器关联,但该公共地址并未在服务器本身上配置。相反,您的 VPC 的互联网网关具有公共地址并执行地址转换。 EC2 服务器在其网络配置中仅具有其私有 IP 地址,您可以使用ifconfig
或查看该地址ip addr show
。
EC2 服务器的私有 IP 地址无法从公共 Internet 访问,只能访问公共 IP 地址。从您的 VPC 内部,可以访问 EC2 服务器的私有 IP,并且如果您的私有子网具有 NAT 网关,则也可以访问 EC2 服务器的公共 IP。
但您并不真正希望来自 VPC 内部的流量流向公共 Internet,只是经过一个“发夹”转弯才返回 VPC 并到达此 EC2 服务器。对于您的 VPC 的其余部分来说,通过其私有 IP 地址连接到此 EC2 服务器是一种更好的配置,并且网络流量费用成本更低。
编辑以添加有关 AWS IPv6 地址的注释: AWS 多年前创建了公共 IPv4 地址(如上所述)的设计。 AWS 在过去几年才开始支持 IPv6 地址,并且 v6 地址工作方式的设计有所不同:
当 EC2 服务器配置了 IPv6 地址(这要求 VPC 和子网也进行 v6 配置)时,EC2 服务器确实在服务器本身上配置了其 v6 地址,并且 v6 地址通过网络配置命令可见,例如ip addr show
。 VPC 的 Internet 网关不执行地址转换。
可能有一些用例我不知道其工作原理有何不同(例如 BYOIP - 较大客户可以使用的自带 IP [地址]),但对于使用 AWS 提供的 IP 地址的客户(其中大多数,我相信),这就是它的工作原理。