Depois de estabelecer a conexão com a internet e certificar de que ela está funcionando corretamente devemos habilitar em nosso servidor o roteamento de pacotes, ou seja, devemos permitir que o servidor possa descobrir o caminho e entregar os pacotes que não sejam destinados a ele. Isso é fundamental para que as máquinas da rede interna consigam enviar pacotes para máquinas externas. Essa informação, sobre roteamento de pacotes está armazenada em um arquivo chamado
ip_forward. Este arquivo fica com o número 1 armazenado se o roteamento estiver habilitado ou 0 caso contrário.
A modificação deste arquivo para permitir o roteamento pode ser feita de duas maneiras: utilizando o comando sysctl:
# sysctl -w net.ipv4.ip_forward=1
ou através do comando echo:
# echo 1 > /proc/sys/net/ipv4/ip_forward
Fazendo mascaramento de pacotes com SNAT
Para que as estações clientes possam navegar na internet, o servidor tem que, além de rotear os pacotes das mesmas para as máquinas externas (internet), converter o endereço das estações internas, que possuem os respectivos endereços ip referentes à rede interna para um endereço real de internet, para que as máquinas externas também consigam se comunicar com as estações da rede interna.
Esta técnica é conhecida como
NAT (Network Address Translation) e, em
Linux, isso pode ser feito utilizando iptables, que é uma ferramenta utilizada para fazer filtragem de pacotes e já está presente no kernel do Linux.
Na verdade existem dois tipos de NAT: o
SNAT (Source Network Address Translation), em que o endereço de origem do pacote é alterado depois do roteamento, e o
DNAT (Destination Network Address Translation), em que altera-se o endereço de destino antes do roteamento. Porém, no nosso caso, basta o SNAT: queremos apenas que todos os pacotes vindos da rede interna pareçam que têm como origem o nosso servidor com uma conexão PPP.
Quando executamos o comando
pppoeconf foram criadas uma ou mais interfaces de conexão pppoe com a internet. Podemos ver esse fato executando:
ifconfig
As interfaces de interesse, neste caso, são as do tipo pppX.
Antes de mascarar os pacotes oriundos da rede interna, trocando os endereços de origem, precisamos descobrir qual é a interface que de fato é responsável pela conexão com a internet.
Para isso utilizaremos a ferramenta
Wireshark, que serve como analisadora de tráfego de rede, mostrando os pacotes que estão sendo enviados e recebidos por cada interface, sendo ela real (placas de rede) ou virtual.
Para instalar o Wireshark no Ubuntu (ou qualquer distribuição Debian-based), basta digitar no terminal:
# apt-get install wireshark
Depois de instalar o Wireshark, inicie-o como root.
Vá em "Capture", na barra de menus, e selecione "Interfaces".
Aparecerá uma tela com as interfaces presentes no sistema e o número de pacotes que está passando por cada uma delas.
Para descobrir qual interface ppp será utilizada no mascaramento, basta iniciar o navegador, com o wireshark ativo, navegar em algum site e, simultaneamente, verificar por qual interface ppp estão passando os pacotes.
Após descobrir por qual interface ppp está se comunicando com a internet, podemos fazer o mascaramento da seguinte forma:
# iptables -t nat -A POSTROUTING -o pppX -j MASQUERADE
Onde X é o número da interface que foi descoberta no Wireshark.
O comando acima indica que será adicionada uma regra na chain POSTROUTING da tabela nat. Tal regra indica que os pacotes saindo de pppX terão o endereço automaticamente escolhidos devido ao parâmetro MASQUERADE. Isso é necessário uma vez que o IP normalmente não é fixo em conexões pppoe.
Em caso de dúvidas no entendimento do comando acima, recomenda-se a leitura de artigos relacionados à ferramenta iptables.