Ubuntu Server como router no VirtualBox
Quando trabalhamos com redes, é importante ter uma forma de testar as nossas configurações. A nível académico e pessoal, é muito utilizado o VirtualBox, entre outros softwares que permitem virtualizar um sistema.
Neste artigo, pretendo mostrar como configurar uma máquina virtual com Ubuntu Server, para agir como roter entre a interface interna e a externa.
Este é um cenário muito utilizado para testar serviços num determinado servidor, através de clientes virtualizados.
A imagem abaixo, mostra o cenário, que interliga o cliente ao servidor, através da rede interna do VirtualBox. Também mostra a ligação do servidor, à rede real.
Este cenário é muito utilizado, pois permite testar serviços num servidor, sem perturbar a rede local real.
Neste cenário, para que os clientes ligados à rede interna, tenham acesso à rede real e Internet, é necessário que o servidor haja como roter. Onde passa os pacotes da rede interna para a externa e vise versa. Desta forma, permite aos clientes virtualizados, atualizar o sistema, navegar na Internet, etc.
O Linux, é um sistema muito versátil, em todos os aspetos, pelo menos na minha humilde opinião. Polo a trabalhar como roter é bem simples, pois ele já está preparado para tal. Apenas temos que ativar a passagem de pacotes e inserir umas regras de FireWall.
Vamos lá então configurar o servidor para agir como um roter.
Para permitir a passagem de pacotes de uma interface para outra, temos que ativar a seguinte opção:
# echo 1 > /proc/sys/net/ipv4/ip_forward;
Ao lançarmos este comando no terminal, estamos a ativar a passagem de pacotes no Linux, para o ipv4.
Agora, só nos falta as regras de FireWall. Na imagem acima, podemos constatar, que o servidor usa a interface eth0 para a rede interna e a interface eth1 para a rede externa. Se utilizarem outra configuração nos vossos servidores, têm de adequar as regras. Bastando para isso indicar as interfaces corretas.
As seguintes regras, permitem a passagem de pacotes à interface eth0 e eth1.
# iptables --table nat --append POSTROUTING --out-interface eth1 -j MASQUERADE; # iptables --append FORWARD --in-interface eth0 -j ACCEPT;
Neste momento, o kernel Linux, já está pronto para agir como roter e os clientes, já poderão ter acesso à rede local real, bem como à Internet.
Para que estas configurações sobrevivam a um reinicio do servidor, é necessário, que sejam guardadas e inseridas sempre que o servidor arranque. Podemos conseguir este objectivo de várias maneiras, mas para simplificar eu irei usar o ficheiro /etc/rc.local. Este ficheiro por defeito vem apenas com o comando exit 0. Este ficheiro é executado após todos os serviços terem arrancado. O que permite, que estas três simples regras, sejam executas após todos os serviços.
Temos que editar o ficheiro, /etc/rc.local para ficar assim:
#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. # Para que seja possível rotear entre interfaces iptables --table nat --append POSTROUTING --out-interface eth1 -j MASQUERADE; iptables --append FORWARD --in-interface eth0 -j ACCEPT; #Permitir o forward de pacotes v4 no Kernel echo 1 > /proc/sys/net/ipv4/ip_forward; exit 0
Visto, que trabalho muito com este tipo de configuração, criei um script que me auxilia nesta tarefa. Chamei-lhe rconfig.sh e está em anexo a este artigo. O script, através de menus, permite-nos escolher as interfaces, interna e externa e trata de guardar as regras corretamente.
Para que possamos executa-lo fazemos o seguinte no servidor:
$ wget https://static.ncdc.pt/uploads/2015/07/rconfig.sh $ sudo chmod +x rconfig.sh $ sudo ./rconfig.sh
Basta apenas indicar qual é a interface externa e a interface interna e já temos o servidor a agir como roter.
Espero que este pequeno artigo possa ajudar alguém!
Comentem, partilhem e experimentem!
One comment
Gerson
Obrigado pela publicação, excelente trabalho.