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

Второй ENI в AWS VPC недоступен в экземпляре Ubuntu

Я просто вхожу в VPC, пытаюсь понять, как все работает. На данный момент самым большим препятствием, с которым я столкнулся, является то, что каждый раз, когда я добавляю вторую эластичную сетевую карту к машине, этот второй IP-адрес недоступен для других в VPC. Вот что я сделал

авто eth1

iface eth1 inet dhcp

На моем основном (доступном в Интернете) экземпляре:

Нет ACL, предотвращающих ping, так как он работает с eth0. На машине не установлен брандмауэр. Я пробовал 4 разных экземпляра в нескольких SG и AZ с несколькими интерфейсами, все с одинаковым результатом.

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

Таблица маршрутизации по умолчанию будет направлять трафик только на eth0. Несмотря на то, что ubuntu обнаруживает другой ENI, вам все равно нужно направлять на него трафик.

Вам нужно будет выполнить расширенную маршрутизацию:

1) Включение доступа ко 2-му ENI немедленно и временно.

источник: http://www.rjsystems.nl/en/2100-adv-routing.php

# this will show your route table, i'll assume you have eth0 and eth1
# and your default is for eth0 to point to the gateway
# for this example lets assume the following:
# eth0 = 192.168.100.5 
# eth1 = 192.168.100.10
# gateway = 192.168.100.1
ip route show ;

# first step is to create a routing table for your new device
cat /etc/iproute2/rt_tables ;
echo 2 eth1_rt >> /etc/iproute2/rt_tables ;

# next add the eth1_rt route table, so by default it will also point to the gateway
ip route add default via 192.168.100.1 dev eth1 table eth1_rt ;

# next take a look at your ip rules
# i'll assume the defaults here, and things flows to default with priority 32767
ip rule;

# let's add a rule, if we see traffic from eth1's IP address,
# use its new routing table we setup, and give it higher priority than default
ip rule add from 192.168.100.10 lookup eth1_rt prio 1000 ;

# done! now check your traffic from both IPs, they should both work.

2) Включение доступа ко 2-му ENI при перезагрузке, но постоянно.

источник: http://blog.bluemalkin.net/multiple-ips-and-enis-on-ec2-in-a-vpc/

Кроме того, если вы хотите, чтобы это изменение сохранялось, вы можете внести все эти изменения в файл интерфейса и просто перезапустить сетевую службу или перезагрузить, чтобы изменения вступили в силу.

# NOTE: add the eth1_rt routing table to /etc/iproute2/rt_tables as show in previous section

# original config to make dchp, I add mine to /etc/network/interfaces.d/eth1.cfg
auto eth1
iface eth1 inet dchp
    # your extra rules for eth1
    up ip route add default via 192.168.100.1 dev eth1 table eth1_rt
    up ip rule add from 192.168.100.10 lookup eth1_rt prio 1000

Чтобы это вступило в силу, перезагрузите систему.

НОТА: Я попытался /etc/init.d/networking restart; но он не улавливал изменения маршрута / правила, не знаю почему, поэтому мне пришлось перезагрузиться. Если вы хотите сделать его немедленным и постоянным, используйте оба метода.

Вот как я это делаю. Я использую статический IP. Сначала я использую dhcp, чтобы получить 2 элемента. IP-адрес и сетевая маска. Вот пошаговая инструкция:

загрузить экземпляр

sudo cp /etc/network/interfaces.d/eth0.cfg /etc/network/interfaces.d/eth1.cfg
sudo sed -i "s/eth0/eth1/g" /etc/network/interfaces.d/eth1.cfg
sudo ifdown eth1
sudo ifup eth1
sudo ifconfig eth1 | tee /tmp/ifconfig-eth1-output.txt
sudo ifdown eth1
sudo rm -f /etc/network/interfaces.d/eth1.cfg 
ETH0_IP=$(cat /tmp/ifconfig-eth1-output.txt | grep "inet addr:" | cut -f 2 -d':' | cut -f 1 -d' ')
ETH0_NETMASK=$(cat /tmp/ifconfig-eth1-output.txt| grep "inet addr:" | cut -f 4 -d':')
ETH0_GATEWAY=$(echo ${ETH0_IP} | sed "s/[0-9]*$/1/g")
echo "auto eth1" > /tmp/eth1.cfg
echo "iface eth1 inet static" >> /tmp/eth1.cfg  
echo "address ${ETH0_IP}" >> /tmp/eth1.cfg 
echo "netmask ${ETH0_NETMASK}" >> /tmp/eth1.cfg 
echo "up ip route add default via ${ETH0_GATEWAY} dev eth1 table 1  metric 10001" >> /tmp/eth1.cfg 
echo "up ip rule add from ${ETH0_IP}/32 table 1 priority 10001" >> /tmp/eth1.cfg 
echo "up ip route flush cache" >> /tmp/eth1.cfg 
sudo cp -f /tmp/eth1.cfg /etc/network/interfaces.d/
sudo ifup eth1

это должно сработать, запустите их, чтобы проверить.

curl --silent http://ipinfo.io
curl --interface eth0 --silent http://ipinfo.io
curl --interface eth1 --silent http://ipinfo.io

они вступят в силу немедленно и сохранятся после перезагрузки.