Назад | Перейти на главную страницу

Запуск сервера EC2 в Ubuntu с двумя одновременными сетевыми интерфейсами

Я нашел похожие вопросы, связанные с этой проблемой, но ни один из них не подошел к моей ситуации, и ни один из советов не помог мне запустить эту работу.

У меня есть 64-битный сервер Ubuntu из AMI по умолчанию, работающий в EC2. У него есть 2 сетевых экземпляра, каждый с 2 ​​локальными IPS и связанными EIP.

Локальные IP-адреса в каждом экземпляре намеренно размещены в разных подсетях, чтобы помочь преодолеть сложности, связанные с одинаковыми сетевыми IP-адресами в разных экземплярах.

Два 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

Я могу пропинговать локальные IP-адреса, у которых есть проблемы (10.10.21.22 и 10.10.21.23), с того же сервера и добиться успеха. Я могу пропинговать общедоступные IP-адреса для основного интерфейса с других серверов. Я вообще не могу пропинговать IP-адреса второго интерфейса с других серверов.

Брандмауэры были отключены во время тестирования.

Какие-либо указания относительно того, что могло быть упущено или ошибочно?

Изменить - дополнительная информация

Главный сервер - Ubuntu 13.04 64 бит из стандартного AMI (микро-размер).

eth0 работает 2 ips, 10.10.2.20 и 10.10.2.21

eth1 имеет 2 ips не работает, 10.10.21.22 и 10.10.21.23

Все локальные IP-адреса также имеют внешний EIP.

Проверка всех этих параметров с одного компьютера работает. Пинг первого интерфейса с других машин работает. Не удается выполнить эхо-запрос второго интерфейса с других машин.

В таблице маршрутов VPC указано, что 10.10.0.0/16 является локальным, а 0.0.0.0/0 - igw. Выглядит хорошо. Не подумал заглянуть сюда, только проверил таблицу маршрутов внутри linux - есть ли что-то особенное в EC2 / VPC, чтобы заставить работать 2 интерфейса? Я предполагал, что EC2 знает все отображение IP / экземпляра и будет направлять его соответствующим образом ...

Просто попробовал добавить дополнительный маршрут на уровне vpc и получил "невозможно создать более конкретный маршрут для 10.10.21.0/24, чем локальный маршрут 10.10.0.0/16 в таблице маршрутов rtb-022ab66b"

Новое редактирование - дополнительные настройки подсети 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.

Я портировал ec2-net-utils из Amazon Linux к Ubuntu. Эти сценарии автоматически настраивают новые интерфейсы, включая дополнительные IP-адреса, и исправляют асимметричную маршрутизацию.

Взгляните сюда:

Благодаря поддержке Amazon за это, но размещение здесь на случай, если это поможет кому-то еще.

В вашем экземпляре как 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

ПРИМЕЧАНИЕ. Для продолжения перезагрузки экземпляра ubuntu в EC2; отредактируйте этот файл: /etc/rc.local Внутри этого файла ваши строки должны выглядеть примерно так:

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