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.
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.
Tags networking routing gateway route