Configurando várias ENIs em uma instância do EC2

1

Como você configura as interfaces no SO sem usar o ec2-net-utils?

Eu preciso configurar cerca de 18 ips públicos para serem acessíveis em uma única instância do EC2. Cada IP público precisa estar vinculado a um único IP interno na instância. Eu tenho 2 ENIs configuradas com os Elastic IPs necessários e estes estão anexados à instância, mas estou preso em conseguir que o SO reconheça as ENIs.

Eu tenho seguido este tutorial , mas posso Saiba como estendê-lo para configurar vários IPs por interface. Também parece haver algum debate de acordo com esta pergunta sobre qual é a maneira correta de fazer isso.

Se alguém fosse capaz de me apontar na direção certa, eu ficaria muito grato. Eu quase perdi 2 dias com isso!

Aqui estão os detalhes:

  • SO: Centos 7
  • ENI1: IPs secundários privados = [10.0.1.97 ... 10.0.1.106]
  • ENI2: IPs secundários privados = [10.0.1.218 ... 10.0.1.226]
  • VPC gateway 10.0.1.1
por Russell 08.03.2016 / 11:42

3 respostas

0

A resposta do @mootmoot me ajudou muito nessa, mas, apenas para completar, aqui estão os passos que acabaram me levando a uma configuração de trabalho. Tenho certeza de que existem maneiras melhores de fazer isso, mas no caso de alguém estar preso ...

Eu fiz as seguintes modificações nos arquivos em / etc / sysconfig / network-scripts

Eu deixei a interface definida em ifcfg-eth0 sozinha e adicionei aliases da seguinte forma:

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"

Onde 10.0.1.XXX é o primeiro endereço secundário na ENI (o endereço principal permanece configurado por dhcp conforme especificado no arquivo ifcfg-eth0 padrão)

continue a adicionar arquivos ifcfg-eth0: X até que todos os ips na ENI sejam especificados.

Em seguida, defina o segundo dispositivo no arquivo ifcfg-eth1 usando o mesmo modelo que os aliases eth0 acima e o endereço IP principal da ENI.

Em seguida, adicione aliases para eth1 definindo arquivos chamados ifcfg-eth1: 0 etc. como acima.

defina os seguintes arquivos de rotas:

route-eth0

default via 10.0.1.1 dev eth0  table 1

route-eth1

default via 10.0.1.1 dev eth1  table 2

em que 10.0.1.1 é o endereço do gateway VPC

Em seguida, precisei definir regras para todos os IPs na eth2 e todos os ips secundários na eth1 da seguinte forma:

rule-eth0

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

rule-eth1

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

também adicionei a linha

GATEWAYDEV=eth0

para / etc / sysconfig / networking

Espero que ajude alguém em uma situação semelhante, obrigado por todos os conselhos.

    
por 10.03.2016 / 16:05
1

Como a resposta anterior é desordenada, colocarei outra com fluxo de trabalho, usando apenas o AWS CLI (você pode escrever um script de automação de ajuste fino usando o AWS SDK) ( link )

  1. Crie ENI com IP privado usando. ( aws ec2 create-network-interface ) Escreva o ID da ENI
  2. Alocar o EIP para o VPC. ( aws ec2 allocate-address - domínio vpc ) anote o EIP-id
  3. Vincular EIP a ENI-id, apontar para corrigir IP privado ( aws ec2 associate-address )
  4. Crie ou inicie a instância do EC2, anexe ao ENI. ( aws ec2 interface de rede anexada )

Depois de colocar tudo script no lugar, recriar a instância do EC2 com o ENI adequado é apenas uma questão de minutos.

(resposta atualizada abaixo) No Linux, para atribuir vários endereços IP a uma interface, a atribuição correta à interface é adicionar um endereço IP adicional à interface física. Para o Ubuntu, etc, é algo como eth0: 0, eth0: 1, para a primeira interface, eth1: 0, eth1: 1 para interface subseqüente.

E isso é um pouco diferente para o Centos, ou seja,

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

Portanto, a documentação correta deve ser essa. link

Em resumo, o Centos criará automaticamente um arquivo de interface de rede para cada interface. Apenas vá em / etc / sysconfig / network-scripts / e verifique cada nome de arquivo como ifcfg-eth * (não me pergunte por que o link acima mostra enp0). A parte complicada é se o seu Centos reforça o uso do NetworkManager, e você deve configurar conforme requerido pela documentação do centos wiki.centos.org/FAQ/CentOS7

Portanto, você deve ver pelo menos 4 arquivos de interface para o seu m3.xlarge, por exemplo     / etc / sysconfig / network-scripts / ifcfg-eth0     / etc / sysconfig / network-scripts / ifcfg-eth1     / etc / sysconfig / network-scripts / ifcfg-eth2     / etc / sysconfig / network-scripts / ifcfg-eth3

Como a interface principal deve estar em execução, ela fornecerá a dica do endereço IP da instância em execução. Então, se você abrir / etc / sysconfig / network-scripts / ifcfg-eth0, se a instância configurar como IP 10.0.1.10, você deverá ver isso

IPADDR0="10.0.1.10"

Para adicionar mais endereços IP, basta fazer o que o link unixmen diz, por exemplo

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

Em seguida, abra ifcfg-eth1, ifcfg-eth2, ifcfg-eth3 e repita a tarefa. Depois disso, use "systemctl restart network" para reiniciar. (backup de todos os arquivos de configuração para que você apenas substitua o arquivo no futuro)

Em seguida, você joga com a parte de roteamento. Basta imprimir sua tabela de rotas VPC, Subnet. Agora dentro de / etc / sysconfig / network-scripts /, você lida com route-ethX, ou seja, route-eth0, route-eth1, route-eth2, route-eth3. Isso significa que você deve conhecer sua própria rede para configurar essa parte (que deve ser mostrada no layout do VPC). Desde que você mencionou apenas um gateway VPC 10.0.1.1, então para todo o arquivo route- *, deve ser algo como isto

# 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

Então você segue o documento que você mencionou instrução, em / etc / sysconfig / network-scripts, cria uma regra-ethX, ou seja, regra-eth0, regra-eth1  1. Incrementar o número da tabela para corresponder à rota-ethX  2. Altere o IP para o endereço da rede interna da 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

Você deve executar a configuração de rede do Centos com seu adaptador de rede virtual VMware / virtual local. Então você não precisa se preocupar de repente

    
por 08.03.2016 / 17:30
-1

Primeiro, SEMPRE verifico o limite da interface de rede do AWS EC2. (ref: link )

Por exemplo, se você criar uma instância c1.medium, não poderá usar mais de 2 ENI e exceder 6 endereços IP por interface. Se você tentar criar 20 interfaces de rede virtuais no sistema operacional, ele falhará.

Não tenho certeza do motivo pelo qual você deseja vincular 1 IP público a 1 IP interno, a menos que pretenda mudar para o IPv6, coloque o ELB na frente da instância do EC2 para agrupar o IPv6 no IPv4. (Porque o EC2 não suporta o IPv6)

Mas olhando para o caminho da configuração do AWS VPC, você não pode pensar em usar o Centos em uma caixa de servidor físico, que pode ser flexível como eth0: 0, eth0: 1, ..., eth0: 20,

Infelizmente, esse não é o caso da AWS ENI e da interface de rede. Parece que a AWS atribui MAC exclusivo para "endereços IP privados" individuais. Portanto, o IP privado limitado está vinculado a uma interface. Como dito acima, você só pode c1.medium criar 2 interface de rede, cada um com 6 max IP privado.
(ref: link )

Você precisa pensar como nas formas do AWS VPC, e não na forma flexível que a máquina física pode oferecer. Como um caso extremo:

  • VPC: o CIDR e o endereço IP da instância devem estar relacionados. Por exemplo. 10.1.0.0/19. A conexão depende das tabelas de rotas do AWS VPC.
  • Servidor físico e rede: você pode usar vários CIDR para toda a máquina. Por exemplo. um servidor pode ter 1 interface de rede com adendos IP de dois e mais CIDR, por ex. 10.1.0.0/19, 172.16.0.0/19. eth0: 1 10.1.0.15 eht0: 2 172.16.7.15. Você pode configurar / adicionar / excluir sua própria rota.

Parece que você precisa reprojetar sua rede de acordo com as maneiras da AWS VPC.

Você pode perguntar: e se você pensar em Elastic IP? Bem, o limite de EIP para VPC é 5. E lembre-se disso, o endereço IP público é escasso. Talvez dividir o uso do aplicativo com vários domínios seja uma ideia melhor.

(atualização) Associe o endereço IP público ao IP privado. (Tente usar o script AWS cli ou aws sdk para recriar a instância com um script)

  1. Crie uma instância do EC2, atribua vários IPs privados a cada interface de rede
  2. Ir para o VPC - Elastic IP, alocar IP elástico
  3. Ir para o IP elástico recém-alocado, selecione associar, há uma opção para anexar a um endereço IP privado e EIP específico.

Como o aws definiu o limite de EIP como 5 para cada VPC, você precisa verificar se o limite flexível foi aumentado. Para testá-lo, tente alocar 18 EIP e aponte para o endereço IP privado individual.

Você não pode atribuir o EIP à instância do Centos. Opções EIP são encontradas no console EC2 e / ou VPC.

    
por 08.03.2016 / 13:51