Как настроить интерфейсы в ОС без использования 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)
После того, как вы разместите все скрипты, воссоздайте экземпляр 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, а не в гибких способах использования физической машины. Как какой-то крайний случай:
Похоже, вам нужно перепроектировать вашу сетевую инфраструктуру в соответствии со способами AWS VPC.
Вы можете спросить, а что если вы думаете об Elastic IP? Ну, ограничение EIP для VPC составляет 5. И помните, что общедоступных IP-адресов мало. Возможно, лучше разделить использование приложения на несколько доменов.
(Обновление) Свяжите общедоступный IP-адрес с частным IP-адресом. (Попробуйте использовать сценарий AWS cli или aws sdk, чтобы можно было воссоздать экземпляр с помощью сценария)
Поскольку aws устанавливает ограничение EIP равным 5 для каждого VPC, вам необходимо проверить, был ли повышен мягкий лимит. Чтобы проверить это, просто попробуйте выделить 18 EIP и указать отдельный частный IP-адрес.
Вы не можете назначить EIP внутри экземпляра Centos. Параметры EIP находятся в консоли EC2 и / или VPC.