我一直在尝试了解 EC2 实例的网络究竟是如何工作的,更具体地说,我来自内部部署基础设施,其中我拥有专用的网络设备(交换机/路由器),可以管理我(系统管理员)服务器所需的几乎所有内容。
我会采用传统设置,即服务器有多个 NIC,每个 NIC 都连接到不同的子网,以隔离特定服务。这些子网会启用 DHCP,因此我不会对接口进行过多的干扰,只需更改一些参数或偶尔更改一些路由规则,以便在特定情况下启用额外的连接即可。
对于 AWS EC2,据我所知,每个子网都连接到一个 VPC,它也有一个路由表并处理与路由相关的所有事务,到目前为止这还没有被证明是一个问题,但是我有以下具体情况:
我需要一个具有多个 NIC 的 EC2 实例,这些 NIC 上附加了 EIP(1:1),原因是我需要为实例上的不同服务提供专用 IP,每个服务都需要可访问并通过专用 IP 传输数据。我创建了新接口并将它们与 EC2 关联 + 分配的新 EIP,并将它们附加到新 NIC(每个 NIC 位于同一 VPC 内的不同子网中)。一切都很容易完成,但是当我查看我的 EC2(ubuntu 22.04)时,我可以看到接口已启动,但它们没有任何关联的私有和/或公共 IP,因此我运行dh客户端为了通过 DHCP 获取我分配的 IP。这样做之后,我最终得到了预期的 IP,但也得到了新的默认路由。例如,对于 3 个 NIC,我最终得到了 3 个默认路由,这显然搞砸了网络方面的一切。我还尝试过为每个 NIC 创建专用的路由表,如下所示:
ip rule add from $ip_address lookup $table_id
ip route add default via $gateway dev $iface table $table_id
我还尝试从使用 dhclient 切换到使用类似方法重新创建 netplan 配置文件(是的,我还禁用了 cloud-init netplan):
network:
version: 2
ethernets:
eth0:
dhcp4: true
eth1:
dhcp4: true
dhcp4-overrides:
use-routes: false
eth2:
dhcp4: true
dhcp4-overrides:
use-routes: false
done
但是这个修复的问题是,NIC 现在已启动,但是 EIP 无法访问,因为实例上没有用于访问服务的路由。
我的问题是,在 AWS 中您通常如何处理这种情况,我需要多个公共 IP,每个 IP 都提供不同的服务,是的,我会说必须有多个公共 IP。
谢谢你!