首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS网卡配置

AWS网卡配置
EN

Server Fault用户
提问于 2021-09-10 02:15:00
回答 1查看 211关注 0票数 0

我正在尝试为特定的用例设置一个EC2实例。在这方面,我将需要2 ENI与公开公开的IP地址。(两者都应可调)

到目前为止,我已经完成了以下步骤:

  • 从同一子网附加2网络接口
  • 运行实例
  • 创建了两个弹性IP地址,与每个ENI卡的实例。

我可以在EC2实例网络接口部分看到以下结果。

PublicIP

但我不能平3.104.193.180

另外,我的ip address给出了以下结果。。。

代码语言:javascript
复制
ubuntu@ip-172-31-37-139:~$ ip address
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0:  mtu 9001 qdisc fq_codel state UP group default qlen 1000
    link/ether 06:ce:dd:28:5b:b8 brd ff:ff:ff:ff:ff:ff
    inet 172.31.37.139/20 brd 172.31.47.255 scope global dynamic eth0
       valid_lft 3460sec preferred_lft 3460sec
    inet6 fe80::4ce:ddff:fe28:5bb8/64 scope link
       valid_lft forever preferred_lft forever
3: eth1:  mtu 9001 qdisc fq_codel state UP group default qlen 1000
    link/ether 06:a6:9a:4a:98:c6 brd ff:ff:ff:ff:ff:ff
    inet 172.31.41.29/20 brd 172.31.47.255 scope global dynamic eth1
       valid_lft 3460sec preferred_lft 3460sec
    inet6 fe80::4a6:9aff:fe4a:98c6/64 scope link
       valid_lft forever preferred_lft forever

所以我的问题是。。。

  • 我该怎么做才能让另一个IP暴露/可点击?
  • 我如何从服务器内部知道我的两个弹性IP?
EN

回答 1

Server Fault用户

发布于 2021-09-10 17:18:16

要获得与给定接口相关联的公共IP地址,首先从接口获取MAC地址,然后从实例元数据服务(IMDS)中检索您要查找的信息。因此,在上面的示例中,eth1具有MAC地址06:a6:9a:4a:98:c6,因此您可以通过以下方式获得公共IPv4地址:

curl http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:1d:90:af:65:a3/public-ipv4s

AWS文件中有更多的信息

关于连接问题,作为第一步,重复检查与每个ENIs相关联的VPC路由、ACL和安全组配置。这些细节很容易被错误配置,如果你错过了什么,就会导致流量下降。先去检查这些细节,然后回来阅读这篇文章的其余部分。当一个实例与多个ENIs相关联时,还会出现另一个更微妙的问题,这可能是您的问题。

AWS VPC实现了严格的防欺骗保护。这是一件好事,因为它保护AWS及其客户在实例因某种原因而受到损害时不参与各种形式的网络攻击。但是,在将多个ENIs附加到实例时,需要考虑到这一点。

问题是,基本路由行为仅由发送数据包的目的地驱动。这意味着,对入站分组的响应不能通过接收原始分组的相同接口发送。但是对于VPC来说,这被认为是“欺骗”数据包,因为响应包中的源地址与与ENI关联的任何私有IP地址不匹配。

考虑以下接口配置和路由表:

代码语言:javascript
复制
admin@ip-10-0-0-115:~$ ip -4 addr
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: ens5:  mtu 9001 qdisc mq state UP group default qlen 1000
    altname enp0s5
    inet 10.0.0.115/24 brd 10.0.0.255 scope global dynamic ens5
       valid_lft 2801sec preferred_lft 2801sec
3: ens6:  mtu 9001 qdisc mq state UP group default qlen 1000
    altname enp0s6
    inet 10.0.0.8/24 brd 10.0.0.255 scope global dynamic ens6
       valid_lft 2889sec preferred_lft 2889sec


admin@ip-10-0-0-115:~$ ip ro
default via 10.0.0.1 dev ens5
10.0.0.0/24 dev ens5 proto kernel scope link src 10.0.0.115
10.0.0.0/24 dev ens6 proto kernel scope link src 10.0.0.8

在本例中,10.0.0.8是分配给ens6的地址。到此IP地址的入站数据包将通过ens6接收并按预期处理。但是,对该数据包的出站响应将根据上述路由表进行路由,并通过ens5导出,并由VPC丢弃。

您可以这样测试:

代码语言:javascript
复制
admin@ip-10-0-0-115:~$ ip ro get 8.8.8.8 from 10.0.0.8
8.8.8.8 from 10.0.0.8 via 10.0.0.1 dev ens5 uid 1000
    cache

注意,设备是ens5,尽管10.0.0.8分配给了ens6!VPC会减少流量的!

为了确保您的数据包由VPC传递,您需要实现策略路由。一般说来,策略路由是指系统仅使用目的地以外的其他信息来进行路由决策的情况。在这种情况下,还需要考虑源IP地址。我们在这里需要做的是确保任何源地址为10.0.0.8的传出数据包都会通过ens6离开。

Linux中的策略路由通常使用ip(8)命令进行配置。要使上面的路由表实例正常工作,您需要创建一个特定于ens6的辅助路由表。除了指定表ID外,对辅助表的操作就像操作“主”表一样。因此,在本例中,我们可以通过网关添加到本地网络的路由和通过网关到表10000的默认路由,如下所示:

代码语言:javascript
复制
admin@ip-10-0-0-115:~$ sudo ip ro add 10.0.0.0/24 dev ens6 table 10000
admin@ip-10-0-0-115:~$ sudo ip ro add default via 10.0.0.1 table 10000
admin@ip-10-0-0-115:~$ ip ro show table 10000
default via 10.0.0.1 dev ens6
10.0.0.0/24 dev ens6 scope link

并根据此表创建一条规则,从10.0.0.8路由传出流量:

代码语言:javascript
复制
admin@ip-10-0-0-115:~$ sudo ip rule add from 10.0.0.8/32 table 10000 pref 10000
admin@ip-10-0-0-115:~$ ip rule
0:      from all lookup local
10000:  from 10.0.0.8 lookup 10000
32766:  from all lookup main
32767:  from all lookup default

请注意规则10000的存在,显示10.0.0.8的流量将通过表10000路由。

我们可以再次用ip ro get确认这一点:

代码语言:javascript
复制
admin@ip-10-0-0-115:~$ ip ro get 8.8.8.8 from 10.0.0.8
8.8.8.8 from 10.0.0.8 via 10.0.0.1 dev ens6 table 10000 uid 1000
    cache

注意,它是根据表10000路由的,但更重要的是,它将通过设备ens6发送!

当您将多个ENIs附加到实例时,Amazon会自动设置这样的策略路由规则。我不知道Ubuntu是否会这样做,所以您可能需要在这方面做一些研究,并可能为您的特定情况实现您自己的自动化。

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1077148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档