Executando um servidor EC2 no Ubuntu com 2 interfaces de rede simultâneas

2

Eu encontrei perguntas semelhantes relacionadas a este problema, mas nenhuma correspondendo à minha situação e nenhum dos conselhos me ajudou a fazer isso funcionar.

Eu tenho um servidor Ubuntu de 64 bits da AMI padrão em execução no EC2. Isso tem duas instâncias de rede, cada uma com dois IPS locais e EIPs vinculados.

Os endereços IP locais em cada instância são intencionalmente em sub-redes separadas para ajudar a superar as complicações dos mesmos IPs de rede em instâncias diferentes.

Os 2 IPs da primeira instância funcionam bem, sem problemas com eles.

Eu tenho usado o seguinte código na inicialização de todos os meus servidores por um tempo

#!/bin/bash
MAC_ADDR=$(ifconfig eth0 | sed -n 's/.*HWaddr \([a-f0-9:]*\).*//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

Eu adicionei uma segunda parte a este script para tentar iniciar os segundos IPs de interfaces

MAC_ADDR=$(ifconfig eth1 | sed -n 's/.*HWaddr \([a-f0-9:]*\).*//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

Eu modifiquei meu arquivo / etc / network / interfaces para iniciar a segunda interface

# 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 mostra as duas interfaces operando

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)

Minhas regras de roteamento parecem estar configuradas corretamente para as duas sub-redes e duas interfaces

    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

Eu posso pingar os IPs locais com problemas (10.10.21.22 e 10.10.21.23) do mesmo servidor e obter sucesso. Eu posso pingar os IPs públicos para a interface primária de outros servidores. Não consigo pingar os IPs na segunda interface de outros servidores.

Os firewalls foram desativados durante o teste.

Alguma orientação sobre o que pode ter sido perdido ou errado?

Editar - informações adicionais

O servidor principal é o Ubuntu 13.04 64 bit do padrão AMI (tamanho micro).

eth0 tem 2 ips funcionando, 10.10.2.20 e 10.10.2.21

eth1 tem 2 ips não funcionando, 10.10.21.22 e 10.10.21.23

Todos os IPs locais também têm um EIP externo.

O ping de todos eles da mesma máquina funciona. Pinging a primeira interface de outras máquinas funciona. O ping da segunda interface de outras máquinas falha.

A Tabela de Rotas VPC diz que 10.10.0.0/16 é local e 0.0.0.0/0 é igw. Parece bem. Não tinha pensado em procurar aqui, só tinha verificado a tabela de rotas dentro do linux - existe alguma coisa especial necessária no EC2 / VPC para conseguir 2 interfaces funcionando? Eu tinha assumido que o EC2 conhecia todo o mapeamento de IP / instância e o direcionava de acordo ....

Apenas tentei adicionar uma rota extra no nível vpc e obtive "não é possível criar uma rota mais específica para 10.10.21.0/24 que a rota local 10.10.0.0/16 na tabela de rotas rtb-022ab66b"

Nova edição - mais configurações de sub-rede VPS

Mencionei a tabela de rotas na atualização anterior, mas não especifiquei as sub-redes dentro da VPC

A tabela de rotas VPC é 10.10.0.0/16 local, que deve abranger as sub-redes 10.10.2.0 e 10.10.21.0

Existem duas sub-redes separadas configuradas dentro da interface VPC - one em cada EC2 interno. Ambas as sub-redes são mostradas dentro de associações na tabela de rotas VPC.

10.10.2.0/24

10.10.21.0/24

Não consigo configurar regras de roteamento mais específicas na tabela de roteamento EC2 devido ao erro mencionado no final da edição acima. A única opção é 10.10.0.0/16 e então eu não posso definir 2 e 21 separadamente, pelo menos não no nível PPC.

    
por PPCnSEO 07.07.2013 / 11:51

2 respostas

2

Eu carreguei ec2-net-utils do Amazon Linux para o Ubuntu . O que esses scripts fazem é configurar automaticamente novas interfaces, incluindo IPs adicionais e corrigir o roteamento assimétrico.

Dê uma olhada aqui:

por 09.12.2013 / 15:58
1

Graças ao suporte da Amazon para isso, mas postando aqui caso isso ajude alguém.

Na sua instância, como root, digite os seguintes comandos:

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

NOTA: Para persistir através de uma reinicialização em uma instância do Ubuntu no EC2; edite este arquivo: /etc/rc.local Dentro desse arquivo, suas linhas devem ficar assim:

route add -net XXX.XXX.XXX.XXX netmask XXX.XXX.XXX.XXX gw XXX.XXX.XXX.XXX
    
por 13.08.2013 / 03:42