![在 Ubuntu 上运行具有 2 个同时网络接口的 EC2 服务器](https://linux22.com/image/614410/%E5%9C%A8%20Ubuntu%20%E4%B8%8A%E8%BF%90%E8%A1%8C%E5%85%B7%E6%9C%89%202%20%E4%B8%AA%E5%90%8C%E6%97%B6%E7%BD%91%E7%BB%9C%E6%8E%A5%E5%8F%A3%E7%9A%84%20EC2%20%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
我发现与此问题相关的类似问题,但没有一个符合我的情况,也没有任何建议能帮助我解决这个问题。
我有一台运行在 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
从亚马逊 Linux到Ubuntu。这些脚本的作用是自动配置新接口(包括附加 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