Eu tenho um servidor Ubuntu 14.04 com um NIC. O endereço MAC nessa NIC é atribuído (pelo gateway do centro de dados) a um IP (XXX100) em uma sub-rede (XXX0 / 24), com o gateway estando na mesma sub-rede (XXX1) e um intervalo de IPs adicional de uma sub-rede completamente diferente (YYY0 / 28).
Eu configurei o servidor com X.X.X.100 e Y.Y.Y.1 na mesma interface (eth0), e o servidor pode entrar em contato e ser contatado pelo restante da Internet - em ambos os endereços IP.
Eu tenho algumas máquinas virtuais que usam os endereços IP da segunda sub-rede. Suponho que eles devem usar o segundo endereço IP do host Y.Y.Y.1 como seu endereço de gateway (já que eles não conseguirão acessar o endereço do gateway do data center devido a estarem em uma sub-rede diferente - até onde eu entendi). Todos os endereços IP que possuo, X.X.X.100 e Y.Y.Y.0 / 28, são roteados estaticamente no gateway do centro de dados, portanto, qualquer solicitação destinada a eles chegará à NIC do meu servidor. Ele também aceitará somente solicitações do endereço MAC nessa NIC, não dos endereços MAC das VMs.
Como configuro o host para que todas as solicitações de ou para a sub-rede Y.Y.Y.0 / 28 sejam roteadas pelo gateway do centro de dados X.X.X.1?
Tanto quanto sei, não posso simplesmente expandir a máscara de rede, pois isso pode levar a não conseguir entrar em contato com outros servidores na rede.
Aqui está o /etc/network/interfaces
do servidor
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address X.X.X.100
netmask 255.255.255.0
gateway X.X.X.1
dns-nameservers 8.8.8.8 8.8.4.4
iface eth0 inet static
address Y.Y.Y.1
netmask 255.255.255.240
Em /etc/sysctl.conf
, ativei esta linha:
net.ipv4.ip_forward=1
As VMs usam Y.Y.Y.n (onde n > 1) como endereço IP e Y.Y.Y.1 como gateway.
Com a configuração acima, as VMs podem contatar o host em seus dois endereços IP, mas nada mais. Eu acho que as VMs têm dificuldade em encontrar o endereço MAC do gateway do provedor de serviços de Internet X.X.X.1:
$ arp -an
? (X.X.X.1) at c8:60:00:5e:bd:e0 [ether] on eth0
? (Y.Y.Y.1) at <incomplete> on eth0
Por estranho que pareça, às vezes eles podem ...
$ arp -an
? (X.X.X.1) at c8:60:00:5e:bd:e0 [ether] on eth0
? (Y.Y.Y.1) at cc:e1:7f:07:e0:af [ether] on eth0
Estes dois exemplos foram tirados com apenas alguns minutos de intervalo. Tenho a sensação de que o ping da VM, especialmente o ping da VM, acelera o processo de obtenção do endereço MAC, embora isso possa ser puramente incidental.
Quando "tem" o endereço MAC og X.X.X.1, tudo realmente funciona! Posso acessar a Internet a partir das VMs e acessá-las pela Internet usando o endereço Y.Y.Y.n. Mas isso não funciona o tempo todo - ocasionalmente, "esquece" o endereço MAC de Y.Y.Y.1 novamente e se torna inacessível.
Estou realmente surpreso em listar Y.Y.Y.1 na lista ARP - achei que era apenas para dispositivos na mesma sub-rede. Meu objetivo era fazer com que eles apenas usassem o host como endereço de gateway (Y.Y.Y.1) e evitassem o problema deixando o host em toda a comunicação em X.X.X.0 / 24.
A minha configuração é sensata?
Alguém mais está usando essa configuração?
Quais possíveis razões poderiam existir para o esquecimento "esquecimento"?
ATUALIZAÇÃO:
Eu tentei forçar as VMs a usarem o endereço MAC do gateway do centro de dados diretamente, em vez do endereço IP do host que eles usam como gateway - Y.Y.Y.1 - mas o problema persiste:
$ arp -an
? (X.X.X.1) at <incomplete> on eth0
? (Y.Y.Y.1) at c8:60:00:5e:bd:e0 [ether] PERM on eth0
raw@test-server:~$ sudo arp -s Y.Y.Y.1 cc:e1:7f:07:e0:af
raw@test-server:~$ arp -an
? (X.X.X.1) at <incomplete> on eth0
? (Y.Y.Y.1) at cc:e1:7f:07:e0:af [ether] PERM on eth0
raw@test-server:~$ ping -c 4 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From Y.Y.Y.3 icmp_seq=1 Destination Host Unreachable
From Y.Y.Y.3 icmp_seq=2 Destination Host Unreachable
From Y.Y.Y.3 icmp_seq=3 Destination Host Unreachable
From Y.Y.Y.3 icmp_seq=4 Destination Host Unreachable
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3001ms
pipe 3
Somente quando há uma entrada ARP para XXX1 ela funciona corretamente, mas não posso adicioná-la manualmente com arp -s (mensagem de erro: SIOCSARP: Network is unreachable
) e não sei o que a faz aparecer aleatoriamente ou desaparecer:
$ arp -an
? (X.X.X.1) at cc:e1:7f:07:e0:af [ether] on eth0
? (Y.Y.Y.1) at cc:e1:7f:07:e0:af [ether] PERM on eth0
raw@test-server:~$ ping -c 4 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=54 time=5.92 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=54 time=6.13 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=54 time=6.13 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=54 time=6.13 ms
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3008ms
rtt min/avg/max/mdev = 5.929/6.083/6.138/0.118 ms
Um par de minutos depois disso, ele foi embora de novo:
$ arp -an
? (X.X.X.1) at <incomplete> on eth0
? (Y.Y.Y.1) at cc:e1:7f:07:e0:af [ether] PERM on eth0