Como configurar um gateway local

0

O que eu quero realizar

Gostaria de configurar três máquinas virtuais conectadas por meio de uma rede interna de caixa virtual. Cada máquina tem um papel diferente: há servidor, um cliente e uma middlebox. Eu gostaria que todo o tráfego entre o servidor e o cliente passasse pela middlebox. A middlebox tem que encaminhar os pacotes para o destino certo, farejar o tráfego (por exemplo, usando libpcap ) e fazer algumas análises sobre ele. O servidor é um aplicativo que eu escrevi que escuta em uma porta TCP específica. O cliente também é um aplicativo que eu escrevi.

A conexão com o mundo externo não é um requisito. Uma vez configuradas, essas máquinas devem viver nessa rede interna isolada. A configuração não precisa ser particularmente robusta, é apenas para pesquisas relacionadas a um protocolo específico em que estamos trabalhando.

O que eu tentei

Como observação, eu tentei com o Xubuntu e o Arch Linux, e fiz essencialmente o mesmo.

Eu configurei a rede interna da caixa virtual. Isso significa que o host atua como um comutador dessa rede.

No Xubuntu, usei o networkmanager para configurar a interface no modo local de link. Em Arch, usei systemd-networkd para definir um endereço IP estático em cada uma das VMs, com 0.0.0.0 como um gateway. Ambas as abordagens permitem que cada uma das máquinas se conecte entre si. O cliente pode se comunicar diretamente com o servidor sem passar pela middlebox.

Neste ponto, adicionei uma rota à máquina do cliente:

# ip route add 192.168.5.3 via 192.168.5.8 dev enp0s3

Onde 192.168.5.3 é o endereço do servidor, 192.168.5.8 é o endereço da middlebox e enp0s3 é o nome da interface de rede.

Então eu ping no servidor do cliente. Desta vez o tráfego vai para o middlebox, como eu esperava. Eu posso ver a middlebox recebendo esses pacotes usando wireshark.

Para rotear esses pacotes para o servidor, eu habilito o encaminhamento de IP do kernel na máquina middlebox:

# sysctl net.ipv4.ip_forward

Eu posso ver que este sinalizador está definido corretamente, verificando o conteúdo de /proc/sys/net/ipv4/ip_forward :

# cat /proc/sys/net/ipv4/ip_forward
1

No entanto, os pacotes não são encaminhados para o servidor. No Xubuntu, o wireshark na middlebox ainda vê os pacotes e o servidor não os vê (como resultado, o cliente não recebe nenhuma resposta). No Arch, o resultado é diferente: o cliente envia os pacotes diretamente para o servidor, mesmo que a middlebox esteja desconectada. Gostaria de saber como as diferentes configurações de rede atuaram em relação a esse comportamento diferente.

As perguntas

  1. A minha abordagem para o objetivo é soar?
  2. Como posso corrigir a configuração para que eu alcance a meta indicada na primeira seção?
por Spiros 11.06.2018 / 15:33

0 respostas