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

Настройка нескольких ENI на экземпляре EC2

Как настроить интерфейсы в ОС без использования ec2-net-utils?

Мне нужно настроить около 18 общедоступных IP-адресов для доступа к одному экземпляру EC2. Каждый общедоступный IP-адрес должен быть привязан к одному внутреннему IP-адресу экземпляра. У меня есть 2 ENI, настроенных с необходимыми эластичными IP-адресами, и они прикреплены к экземпляру, но я застрял в том, чтобы заставить ОС распознавать ENI.

Я слежу этот учебник но не могу понять, как расширить его, чтобы настроить несколько IP-адресов для каждого интерфейса. Также, кажется, есть некоторые дебаты в соответствии с этот вопрос о том, как это сделать правильно.

Если кто-то сможет указать мне правильное направление, я был бы очень благодарен. Я почти потратил на это 2 дня!

Вот подробности:

Поскольку предыдущий ответ беспорядок, я поставлю еще один с рабочим процессом, просто используя AWS CLI (вы можете написать сценарий автоматизации точной настройки с помощью AWS SDK) (http://docs.aws.amazon.com/cli/latest/userguide/installing.html)

  1. Создайте ENI с частным IP, используя. (aws ec2 создать сетевой интерфейс) Запишите идентификатор ENI
  2. Выделите EIP для VPC. (aws ec2 allocate-address - домен vpc) запишите EIP-id
  3. Свяжите EIP с ENI-id, укажите правильный частный IP (aws ec2 ассоциированный адрес)
  4. Создайте или запустите экземпляр EC2, подключитесь к ENI. (aws ec2 присоединить сетевой интерфейс)

После того, как вы разместите все скрипты, воссоздайте экземпляр EC2 с правильным ENI всего за несколько минут.

(Обновленный ответ ниже) В Linux для назначения нескольких IP-адресов интерфейсу правильным назначением интерфейсу является добавление дополнительного IP-адреса к физическому интерфейсу. Для ubuntu и т. Д. Это что-то вроде eth0: 0, eth0: 1 для 1-го интерфейса, eth1: 0, eth1: 1 для последующего интерфейса.

А для Centos это немного иначе, т.е.

enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether ....
inet 192.168.1.150/24 brd 192.168.1.255 scope global enp0s3
inet 192.168.1.151/24 brd 192.168.1.255 scope global secondary enp0s3
inet 192.168.1.152/24 brd 192.168.1.255 scope global secondary enp0s3

Итак, правильная документация должна быть этой. http://www.unixmen.com/linux-basics-assign-multiple-ip-addresses-single-network-interface-card-centos-7/

Короче говоря, Centos автоматически создает по одному файлу сетевого интерфейса для каждого интерфейса. Просто зайдите в / etc / sysconfig / network-scripts / и проверьте каждое имя файла как ifcfg-eth * (не спрашивайте меня, почему в приведенной выше ссылке отображается enp0). Сложная часть заключается в том, принудительно ли ваш Centos использует NetworkManager, и вы должны настроить его в соответствии с требованиями документации по centos wiki.centos.org/FAQ/CentOS7

Таким образом, вы должны увидеть минимум 4 файла интерфейса для вашего m3.xlarge, например / etc / sysconfig / network-scripts / ifcfg-eth0 / etc / sysconfig / network-scripts / ifcfg-eth1 / etc / sysconfig / network-scripts / ifcfg-eth2 / etc / sysconfig / network-scripts / ifcfg-eth3

Поскольку основной интерфейс должен быть запущен, он даст вам подсказку об IP-адресе запущенного экземпляра. Итак, если вы откроете / etc / sysconfig / network-scripts / ifcfg-eth0, если экземпляр настроен как IP 10.0.1.10, вы должны увидеть это

IPADDR0="10.0.1.10"

Чтобы добавить дополнительный IP-адрес, просто сделайте так, как сказано в ссылке unixmen, т.е.

IPADDR1="10.0.1.97"
IPADDR2="10.0.1.98"
IPADDR3="10.0.1.99"

Затем откройте ifcfg-eth1, ifcfg-eth2, ifcfg-eth3 и повторите задачу. После этого используйте "systemctl restart network" для перезапуска. (сделайте резервную копию всего файла конфигурации, чтобы вы просто переопределили файл в будущем)

Затем вы играете с частью маршрутизации. Просто распечатайте свою таблицу маршрутов VPC, подсеть. Теперь внутри / etc / sysconfig / network-scripts / вы имеете дело с route-ethX, то есть route-eth0, route-eth1, route-eth2, route-eth3. Это означает, что вы должны знать свою собственную сеть, чтобы настроить эту часть (которая должна отображаться в вашем макете VPC). Поскольку вы упомянули только один шлюз VPC 10.0.1.1, поэтому для всего файла route- * он должен быть примерно таким

# I just assume your put all your 10.0.1.x in the CIDR /24 segments
#
# file route-eth0
# Assume your first ENI IP address is  10.0.1.10 
# format : default via gateway-ip dev dev-name table route-table-number 
default via 10.0.1.1 dev eth0 table 0

# format : network cidr  dev dev-name src ENI-intrace-IP route-table-number  
10.0.1.0/24 dev eth0 src 10.0.1.10 table 0

# file route-eth1
# Assume your 2nd ENI IP address is  10.0.1.11
default via 10.0.1.1 dev eth1 table 1
10.0.1.0/24 dev eth1 src 10.0.1.15 table 1

# file route-eth2
# Assume your 2nd ENI IP address is  10.0.1.12
default via 10.0.1.1 dev eth1 table 2
10.0.1.0/24 dev eth2 src 10.0.1.12 table 2

Затем вы следуете упомянутой вами инструкции в / etc / sysconfig / network-scripts, создаете rule-ethX, то есть rule-eth0, rule-eth1 1. Увеличьте номер таблицы, чтобы он соответствовал route-ethX 2. Измените IP на назначенный внутренний сетевой адрес ENI.

# file rule-eth0 ,but as the doc suggest, you should skip this file.
# format : from  ENI_IP/CIDR table <table_number> 
from 10.0.1.10/32 table 0

#file rule-eth1
from 10.0.1.11/32 table 1

Вы должны воспроизвести настройку сети Centos с вашим виртуальным сетевым адаптером Local Vmware / virtualbox. Тогда вам не нужно внезапно беспокоиться

Ответ от @mootmoot помог мне большей частью на этом, но, просто для полноты, вот шаги, которые в конечном итоге привели меня к рабочей конфигурации. Я уверен, что есть более эффективные способы сделать это, но на случай, если кто-то застрянет ...

Я внес следующие изменения в файлы в / etc / sysconfig / network-scripts

Я оставил интерфейс, определенный в ifcfg-eth0 в одиночку и добавил следующие псевдонимы:

ifcfg-eth0: 0

DEVICE=eth0:0
BOOTPROTO="static"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Ethernet"
USERCTL="yes"
PEERDNS="yes"
IPV6INIT="no"
DEFROUTE="no"


IPADDR0="10.0.1.XXX"
PREFIX0="24"

Где 10.0.1.XXX - первый вторичный адрес на ENI (основной адрес остается настроенным dhcp, как указано по умолчанию ifcfg-eth0 файл)

продолжить добавление ifcfg-eth0: X файлы, пока не будут указаны все IP-адреса в ENI.

Затем определите второе устройство в файле ifcfg-eth1 используя тот же шаблон, что и для псевдонимов eth0 выше, и первичный IP-адрес ENI.

Затем добавьте псевдонимы для eth1 путем определения файлов с именем ifcfg-eth1: 0 и т. д., как указано выше.

определить следующие файлы маршрутов:

route-eth0

default via 10.0.1.1 dev eth0  table 1

route-eth1

default via 10.0.1.1 dev eth1  table 2

где 10.0.1.1 - адрес шлюза VPC

Затем мне нужно было определить правила для всех IP-адресов в eth2 и всех вторичных IP-адресов в eth1 следующим образом:

правило-eth0

from 10.0.1.106 lookup 1
from 10.0.1.105 lookup 1
... etc

правило-eth1

from 10.0.1.41 lookup 1
from 10.0.1.226 lookup 1
... etc   

Я также добавил строку

GATEWAYDEV=eth0

в / etc / sysconfig / network

Надеюсь, что это поможет кому-то в подобной ситуации, спасибо за все советы.

Во-первых, я ВСЕГДА проверяю ограничение сетевого интерфейса AWS EC2. (ссылка: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI)

Например, если вы создаете экземпляр c1.medium, вы не можете использовать более 2 ENI и более 6 IP-адресов на интерфейс. Если вы попытаетесь создать 20 виртуальных сетевых интерфейсов в ОС, это не удастся.

Я не уверен, по какой причине вы хотите привязать 1 общедоступный IP-адрес к 1 внутреннему IP-адресу, если вы не собираетесь перейти на IPv6, поместите ELB перед своим экземпляром EC2, чтобы обернуть IPv6 в IPv4. (Поскольку EC2 не поддерживает IPv6)

Но, глядя на способ настройки AWS VPC, вы не можете думать, как использовать Centos в блоке физического сервера, который можно сделать гибким, например eth0: 0, eth0: 1, ..., eth0: 20,

К сожалению, это не относится к AWS ENI и сетевому интерфейсу. Кажется, AWS назначает уникальный MAC для отдельных «частных IP-адресов». Итак, ограниченный частный IP-адрес привязан к интерфейсу. Как указано выше, вы можете только c1.medium создать 2 сетевых интерфейса, каждый с максимум 6 частными IP.
(ссылка: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/MultipleIP.html)

Вам нужно думать так, как в AWS VPC, а не в гибких способах использования физической машины. Как какой-то крайний случай:

  • VPC: CIDR и IP-адрес экземпляра должны быть связаны. Например. 10.1.0.0/19. Соединение основывается на таблицах маршрутов AWS VPC.
  • Физический сервер и сеть: вы можете использовать несколько CIDR для всей машины. Например. Сервер может иметь 1 сетевой интерфейс с IP-сумматорами от двух и более CIDR, например 10.1.0.0/19, 172.16.0.0/19. eth0: 1 10.1.0.15 eht0: 2 172.16.7.15. Вы можете настроить / добавить / удалить свой собственный маршрут.

Похоже, вам нужно перепроектировать вашу сетевую инфраструктуру в соответствии со способами AWS VPC.

Вы можете спросить, а что если вы думаете об Elastic IP? Ну, ограничение EIP для VPC составляет 5. И помните, что общедоступных IP-адресов мало. Возможно, лучше разделить использование приложения на несколько доменов.

(Обновление) Свяжите общедоступный IP-адрес с частным IP-адресом. (Попробуйте использовать сценарий AWS cli или aws sdk, чтобы можно было воссоздать экземпляр с помощью сценария)

  1. Создайте экземпляр EC2, назначьте несколько частных IP-адресов каждому сетевому интерфейсу
  2. Перейдите в VPC - Elastic IP, выделите Elastic IP
  3. Перейдите к недавно выделенному эластичному IP-адресу, выберите «Связать», есть возможность подключиться к определенному EIP и частному IP-адресу.

Поскольку aws устанавливает ограничение EIP равным 5 для каждого VPC, вам необходимо проверить, был ли повышен мягкий лимит. Чтобы проверить это, просто попробуйте выделить 18 EIP и указать отдельный частный IP-адрес.

Вы не можете назначить EIP внутри экземпляра Centos. Параметры EIP находятся в консоли EC2 и / или VPC.