在 Ubuntu 上运行具有 2 个同时网络接口的 EC2 服务器

在 Ubuntu 上运行具有 2 个同时网络接口的 EC2 服务器

我发现与此问题相关的类似问题,但没有一个符合我的情况,也没有任何建议能帮助我解决这个问题。

我有一台运行在 EC2 中的默认 AMI 的 64 位 Ubuntu 服务器。它有 2 个网络实例,每个实例都有 2 个本地 IPS 和链接的 EIP。

每个实例上的本地 IP 地址都有意位于不同的子网上,以帮助克服不同实例上相同网络 IP 的复杂性。

第一个实例中的 2 个 IP 工作正常,没有问题。

一段时间以来,我一直在所有服务器的启动中使用以下代码

#!/bin/bash
MAC_ADDR=$(ifconfig eth0 | sed -n 's/.*HWaddr \([a-f0-9:]*\).*/\1/p')
IP=($(curl http://169.254.169.254/latest/meta-data/network/interfaces/macs/$MAC_ADDR/local-ipv4s))
for ip in ${IP[@]:1}; do
    echo "Adding IP eth0: $ip"
    ip addr add dev eth0 $ip/24
done

我已经向此脚本添加了第二部分,以尝试启动第二个接口 IP

MAC_ADDR=$(ifconfig eth1 | sed -n 's/.*HWaddr \([a-f0-9:]*\).*/\1/p')
IP=($(curl http://169.254.169.254/latest/meta-data/network/interfaces/macs/$MAC_ADDR/local-ipv4s))
for ip in ${IP[@]:1}; do
    echo "Adding IP eth1: $ip"
    ip addr add dev eth1 $ip/24
done

我修改了 /etc/network/interfaces 文件以启动第二个接口

# The primary network interface
auto eth0
iface eth0 inet dhcp


auto eth1
iface eth1 inet static
address 10.10.21.22
netmask 255.255.255.0

ifconfig 显示两个接口都在运行

ifconfig
eth0      Link encap:Ethernet  HWaddr 06:b1:b9:f8:32:af  
          inet addr:10.10.2.20  Bcast:10.10.2.255  Mask:255.255.255.0
          inet6 addr: fe80::4b1:b9ff:fef8:32af/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:114125 errors:0 dropped:0 overruns:0 frame:0
          TX packets:51731 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:106211526 (106.2 MB)  TX bytes:50413300 (50.4 MB)
          Interrupt:26 

eth1      Link encap:Ethernet  HWaddr 06:b1:b9:f5:38:3a  
          inet addr:10.10.21.22  Bcast:10.10.21.255  Mask:255.255.255.0
          inet6 addr: fe80::4b1:b9ff:fef5:383a/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:12269 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11522 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:366172 (366.1 KB)  TX bytes:484140 (484.1 KB)
          Interrupt:27 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:197 errors:0 dropped:0 overruns:0 frame:0
          TX packets:197 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:14772 (14.7 KB)  TX bytes:14772 (14.7 KB)

我的路由规则似乎针对 2 个子网和 2 个接口设置正确

    Destination     Gateway     Netmask     Interface   
    Default Route   10.10.2.1   
eth0
    1.0.0.0 None    255.255.255.0   eth0
    1.0.0.0 None    255.255.255.0   eth1
    10.10.2.0   None    255.255.255.0   eth0
    10.10.21.0  None    255.255.255.0   eth1

我可以从同一台服务器 ping 有问题的本地 IP(10.10.21.22 和 10.10.21.23),并且成功。我可以从其他服务器 ping 主接口的公共 IP。我根本无法从其他服务器 ping 第二个接口上的 IP。

测试时防火墙已被禁用。

对于可能遗漏或错误的地方有什么指导吗?

编辑--附加信息

主服务器是标准 AMI(微型)的 Ubuntu 13.04 64 位。

eth0 有 2 个 ip 工作,10.10.2.20 和 10.10.2.21

eth1 有 2 个 IP 不工作,10.10.21.22 和 10.10.21.23

所有本地 IP 也有一个外部 EIP。

从同一台机器 ping 所有这些接口都成功。从其他机器 ping 第一个接口成功。从其他机器 ping 第二个接口失败。

VPC 路由表显示 10.10.0.0/16 是本地的,而 0.0.0.0/0 是 igw。看起来不错。没想到要看这里,只检查了 linux 内部的路由表 - EC2/VPC 中是否需要任何特殊的东西才能使 2 个接口正常工作?我曾假设 EC2 知道所有 IP/实例映射并会相应地进行指导....

刚刚尝试在 vpc 级别添加一条额外路由,但出现“无法在路由表 rtb-022ab66b 中为 10.10.21.0/24 创建比本地路由 10.10.0.0/16 更具体的路由”

新编辑-更多 VPS 子网设置

我在之前的更新中提到了路由表,但没有指定 VPC 内的子网

VPC 路由表为 10.10.0.0/16 本地,应包含 10.10.2.0 和 10.10.21.0 子网

VPC 内设置了 2 个独立子网 - EC2 内每个子网都有一个接口。两个子网均显示在 VPC 路由表内的关联内。

10.10.2.0/24

10.10.21.0/24

由于上面编辑末尾提到的错误,我无法在 EC2 路由表中设置更具体的路由规则。唯一的选项是 10.10.0.0/16,然后我无法分别定义 2 和 21,至少在 PPC 级别不能。

答案1

我已经ec2-net-utils亚马逊 LinuxUbuntu。这些脚本的作用是自动配置新接口(包括附加 IP)并修复不对称路由。

请看这里:

答案2

感谢亚马逊对此的支持,但在此发布以防对其他人有帮助。

在您的实例中以 root 身份输入以下命令:

ip route add default via 10.10.2.1 dev eth0 tab 1
ip route add default via 10.10.21.1 dev eth1 tab 2
ip rule add from 10.10.2.0/24 tab 1
ip rule add from 10.10.21.0/24 tab 2

注意:要在 EC2 中的 ubuntu 实例上重新启动,请编辑此文件:/etc/rc.local 在该文件中,您的行应如下所示:

route add -net XXX.XXX.XXX.XXX netmask XXX.XXX.XXX.XXX gw XXX.XXX.XXX.XXX

相关内容