amazon-web-services - 无通信 - 具有不同子网中两个接口(interface)的 EC2 实例

标签 amazon-web-services amazon-ec2 routes rhel7

我被 AWS 上看似简单的配置所困扰 - 每个虚拟机都有 2 个接口(interface),但每个接口(interface)位于不同的子网中,我无法通过辅助接口(interface)进行通信。重要的一点:在虚拟机内部,我可以与公共(public)/私有(private)区域中的虚拟机之间的所有接口(interface)进行通信 - 只能通过 eth0。

概述:

  • VPC 10.20.0.0/16
  • 公共(public)区域:
    • 子网 10.20.0.0/20 中的管理接口(interface)
    • 子网 10.20.48.0/20 中的生产接口(interface)
  • 私有(private)区域:
    • 子网 10.20.16.0/20 中的管理接口(interface)
    • 子网 10.20.64.0/20 中的生产接口(interface)

网络 ACL 是开放/默认的,所有接口(interface)都有一个安全组,允许从 0.0.0.0/0 进行 ping 操作

当我使用 RHEL7.5 启动虚拟机时,我使用此 ec2-user-data 脚本来启动辅助接口(interface):

cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-eth1
BOOTPROTO=dhcp
DEVICE=eth1
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
EOF

ifup eth1e

对 eth0 执行 ping 操作没有任何问题,对 eth1 执行 ping 操作则挂起。

这是私有(private)区域中虚拟机的路由:

[ec2-user@ip-10-20-8-62 ~]$ ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9001
    inet 10.20.8.62  netmask 255.255.240.0  broadcast 10.20.15.255

[ec2-user@ip-10-20-8-62 ~]$ ifconfig eth1
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9001
    inet 10.20.53.116  netmask 255.255.240.0  broadcast 10.20.63.255

[ec2-user@ip-10-20-8-62 ~]$ ip route
default via 10.20.0.1 dev eth0 proto dhcp metric 100
default via 10.20.48.1 dev eth1 proto dhcp metric 101
10.20.0.0/20 dev eth0 proto kernel scope link src 10.20.8.62 metric 100
10.20.48.0/20 dev eth1 proto kernel scope link src 10.20.53.116 metric 101

[ec2-user@ip-10-20-8-62 ~]$ ip rule
0:  from all lookup local
32766:  from all lookup main
32767:  from all lookup default

私有(private)区域中的虚拟机也是如此:

[ec2-user@ip-10-20-19-55 ~]$ ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9001
    inet 10.20.19.55  netmask 255.255.240.0  broadcast 10.20.31.255

[ec2-user@ip-10-20-19-55 ~]$ ifconfig eth1
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9001
    inet 10.20.68.48  netmask 255.255.240.0  broadcast 10.20.79.255

[ec2-user@ip-10-20-19-55 ~]$ ip route
default via 10.20.16.1 dev eth0 proto dhcp metric 100
default via 10.20.64.1 dev eth1 proto dhcp metric 101
10.20.16.0/20 dev eth0 proto kernel scope link src 10.20.19.55 metric 100
10.20.64.0/20 dev eth1 proto kernel scope link src 10.20.68.48 metric 101

[ec2-user@ip-10-20-19-55 ~]$ ip rule
0:  from all lookup local
32766:  from all lookup main
32767:  from all lookup default

如果我可以提供一些额外的信息,请告诉我,我已经花了太多时间试图让它发挥作用。这样做的原因是我们公司的内部政策。稍后我还需要让它与 3 个接口(interface)一起工作,所以尝试了解我在这里做错了什么。

最佳答案

正如我在 AWS 文档中看到的,您需要为辅助网络接口(interface)添加不同的路由表,因为在某种程度上,来自辅助接口(interface)的 AWS 流量会随主接口(interface)的 MAC 离开,这是不允许的。

主网络接口(interface)和辅助网络接口(interface)都位于不同的子网中,并且默认情况下只有一个路由表。仅使用其中一个网络接口(interface)来管理非本地子网流量。进入未配置默认网关的网络接口(interface)的任何非本地子网流量都会尝试使用具有默认网关的接口(interface)离开实例。这是不允许的,因为辅助 IP 地址不属于主网络接口(interface)的媒体访问控制 (MAC) 地址。

请关注此guide来解决这个问题。

我已经在 CentOS 7 中测试过它并且它可以工作。

关于amazon-web-services - 无通信 - 具有不同子网中两个接口(interface)的 EC2 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52135841/

相关文章:

ruby-on-rails - Rails 路由(root :to => . ..)

amazon-web-services - AWS ECS 是否支持每个容器的动态可扩展性?

amazon-web-services - 是否有 .elasticbeanstalk/config.yml 配置选项的完整列表?

rest - 使用正确的 ACL 通过 VPC 端点通过 HTTP 将对象放入 AWS S3?

amazon-web-services - 如何将AWS ACCESS KEY映射到IAM用户?

php - 在 Laravel 中为路由设置别名

linux - 如何在 200 台服务器上运行脚本并在堡垒实例终端中打印输出?我的 bash 脚本卡在 ssh 到远程服务器上

ruby-on-rails - 将媒体文件从一种格式转码为另一种格式

ruby - AWS 上远程机器上的进程计数

linux - Ubuntu : Reset default routing table