(Roteador Linux)
Seria ideal trabalhar em uma empresa que lhe fornecesse o material necessário pra tudo, não é mesmo? Imagina você precisar fazer um roteamento entre redes distintas (criar rotas) e dizer pro seu chefe: preciso de um Cisco pra fazer essa tarefa. E ele te responder: ok. Amanhã estará na sua mesa. É, mas nem sempre é assim… rs.
Hoje vamos colocar o nosso Linux pra funcionar como um roteador. Para isso você vai precisar de:
1) Uma máquina rodando Linux
2) Quantas placas de rede forem necessárias para as conexões
3) Conhecimento
E é justamente nesse ponto 3 que muita gente trava…
Antes de continuar, você sabia que o sistema operacional usado nos roteadores Cisco (cito ele pois é a referência no mercado) roda um kernel Linux? O IOS e o NX-OS são baseados no Red Hat e usam um kernel Linux customizado.
Mas vamos deixar pra lá o blá-blá-blá e vamos por a mão na massa.
Cenário
Imaginemos que precisamos criar uma rota entre as redes 192.168.0.0/24 e 10.12.0.0/24, onde seja possível acessar máquinas em ambas as redes.
Mão na massa
Antes de criarmos as rotas temos que habilitar o roteamento de pacotes no kernel. Para isso vamos usar o comando abaixo:
echo 1 > /proc/sys/net/ipv4/ip_forward
Vamos setar os IPs:
eth0 = 192.168.0.2 netmask 255.255.255.0 (/24)
eth1 = 10.12.0.2 netmask 255.255.255.0 (/24)
Gateway da rede A (192.168.0.0/24) para a eth0 = 192.168.0.1 netmask 255.255.255.0 (/24)
Gateway da rede B (10.12.0.0/24) para a eth1 = 10.12.0.1 netmask 255.255.255.0 (/24)
(Estas configurações acima você pode fazer no arquivo /etc/network/interfaces)
Agora vamos criar as rotas com o comando “route”:
Rota 1
route add -host 192.168.0.1 gw 192.168.0.2 dev eth0
route add -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.0.1 dev eth0
Rota 2
route add -host 10.12.0.1 gw 10.12.0.2 dev eth1
route add -net 10.12.0.0 netmask 255.255.255.0 gw 10.12.0.1 dev eth1
Vamos entender?
Na primeira linha de cada rota nós dizemos que a máquina remota terá a nossa interface como gateway, e na segunda linha dizemos que a rede terá como gateway a máquina remota. Ou seja, qualquer pacote encaminhado para uma rede específica deverá ser entregue no próximo hop (gateway de cada rede) para ser tratado e encaminhado ao destino.
Depois disso podemos colocar estes comandos em um script pra facilitar o nosso trabalho. Para isso use seu editor de textos preferido e copie o conteúdo abaixo, salvando o arquivo como rotas.sh:
#!/bin/bash
echo “reiniciando interfaces”
/etc/init.d/networking restart
echo “roteamento do kernel”
echo 1 > /proc/sys/net/ipv4/ip_forward
echo “Apagando rotas”
route del -host 192.168.0.1 gw 192.168.0.2 dev eth0
route del -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.0.1 dev eth0
route del -host 10.12.0.1 gw 10.12.0.2 dev eth1
route del -net 10.12.0.0 netmask 255.255.255.0 gw 10.12.0.1 dev eth1
echo “criando rotas”
route add -host 192.168.0.1 gw 192.168.0.2 dev eth0
route add -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.0.1 dev eth0
route add -host 10.12.0.1 gw 10.12.0.2 dev eth1
route add -net 10.12.0.0 netmask 255.255.255.0 gw 10.12.0.1 dev eth1
Agora vamos colocar nosso script na inicialização do sistema:
cp rotas.sh /etc/init.d
update-rc.d rotas.sh defaults
Nós podemos aproveitar este script pra fazer muitas outras coisas, como implementar regras de firewall com o iptables, criar regras de mascaramento de pacotes de uma rede para outra e etc. Porém isso é assunto para um próximo post ;-)