在两个EC2实例之间更改主弹性网络接口(ENI)

时间:2018-07-15 18:41:17

标签: linux amazon-web-services networking devops network-interface

能否将主要弹性网络接口从Ec2实例更改为另一个Ec2?

我能够在Ec2实例之间交换辅助ENI,但不能将主ENI从一个Ec2实例更改为另一个En。

是否可以更改主要ENI?

3 个答案:

答案 0 :(得分:2)

这是不可能的。即使实例已停止,主ENI也会在实例的生命周期内锁定到该实例。

  

VPC中的每个实例都有一个默认的网络接口,称为主网络接口(eth0)。您不能从实例分离主网络接口。

     

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html

答案 1 :(得分:0)

您可以交换几乎所有其他内容(例如,块卷,用户数据和属性),而无需移动主要ENI。

就我而言,我想用Dockerized版本替换旧实例,但想重用旧IP地址。

我设法通过停止旧实例和新实例来做到这一点。 取消附加两个实例上的块卷。 将新的块卷附加到旧实例上。 更新了旧实例的用户数据以匹配新实例的用户数据。 更新了旧实例类型以匹配新实例类型。 而且我还必须通过在其他主机上执行以下命令来启用ENA支持:

aws ec2 modify-instance-attribute --instance-id <instance id> --ena-support

然后我再次启动旧实例。

答案 2 :(得分:0)

不确定这是否完全可以回答您的问题。我想在这里区分两个术语。小学/中学和首选。辅助接口可以成为首选接口。

假设有两个EC2实例A和B。每个实例都有一个主ENI-ENI_A和ENI_B,这是A和B的各个操作系统用来路由流量的首选ENI。现在需要创建另一个ENI,比如说ENI_C (eth1),可用于迁移。可以从实例A取消附加此ENI_C,然后将其附加到另一个实例B,反之亦然(如您所愿)。

必须将ENI_C设置为首选网络接口,以在连接到任何实例时路由流量。

这可以通过创建新的路由表来实现。在此处向默认网关添加路由,并指定何时使用新路由表的条件。

示例:

echo "1   test" >> /etc/iproute2/rt_tables

ip rule add from 10.1.0.0/24 table test                # When to use test routing table

ip route add default via 10.1.0.1 dev eth1 table test  # The default gateway

您还可以通过将度量值设置为小于100的值,通过ENI_C添加高优先级的默认路由来达到预期的效果

route add -net default gw 10.1.0.1 netmask 0.0.0.0 dev eth1 metric 50  

相应地更改上面的IP。

要测试ENI_C(eth1)是否是您首选的用于发送流量的NIC,请查看使用哪个NIC例如向Google DNS(8.8.8.8)发送流量

ip route get 8.8.8.8