FreeBSD

10 de novembro de 2016

Roteamento no FreeBSD

Mais artigos de »
Escrito por: Leonardo Souza
Tags:

Roteamento no FreeBSD

Roteamento é o recurso utilizado em redes de computadores para viabilizar a comunicação entre diversos dispositivos de rede, criando rotas de acessos a estes dispositivos mesmo que estejam em redes diferentes. Sendo assim, um roteador é o dispositivo da rede capaz de gerenciar e administrar as diversas rotas possíveis para vários destinos possíveis. Vários dispositivos podem funcionar como um roteador e neste artigo veremos como funciona o roteamento no FreeBSD .

Na prática, todo computador de uma rede, que precisa se comunicar com outras redes, possui um gateway padrão, que é o dispositivo responsável por encaminhar os pacotes deste computador para as redes que ele não conhece, ou seja, computadores fora da sua rede padrão. Normalmente este gateway é o roteador da rede, dispositivo responsável por interligar redes diferentes, fazendo com que elas se comuniquem como se fossem uma só rede.




Isso é possível, porque o roteador conhece estas redes e quando um computador precisa acessar uma rede desconhecida envia a requisição para o roteador (gateway da rede) e este é o responsável por enviar estes pacotes para o destino correto, ou seja, para a rede desconhecida pelo emissor, porém conhecida por ele (roteador).

Apresentando o Cenário

Neste artigo vamos implementar o roteamento no FreeBSD e isso será feito por meio de um ambiente composto por duas redes diferentes e cada uma com um gateway que se comunicam entre si. Na imagem abaixo está representado este cenário:

Roteamento no FreeBSD

Perceba que temos aqui três redes distintas a 172.10.1.0, a 172.20.1.0 e a 172.30.1.0. A rede 172.30.1.0 é a responsável por estabelecer a comunicação entre os roteadores e as outras duas são redes compostas por computadores (simulando redes locais). No cenário apresentado, se retirarmos os roteadores, teremos duas redes isoladas, ou seja, que não se comunicam entre si. Isso significa que para que consigam se comunicar precisam realmente de um roteador, seja um aparelho roteador ou um outro dispositivo configurado para funcionar como roteador.

Perceba também que cada roteador possui dois IPs, isso é possível porque estes dispositivos possuem cada um duas interfaces de rede. A primeira placa será utilizada para a comunicação com a rede interna e outra para a comunicação com a rede do outro roteador.

Sendo assim, nossos roteadores se chamarão router-01 (representando o primeiro roteador, ligado na rede 1) e router-02 (representando o segundo roteador, ligado na rede 2), e nossos computadores se chamarão rede-01 (representando os computadores da rede 1) e rede-02 (representando os computadores da rede 2).

Apresentado o cenário, agora vamos para a configuração do roteamento no FreeBSD.

Configurando o Roteamento no FreeBSD

O primeiro passo para configurar o roteamento no FreeBSD é habilitar o encaminhamento de pacotes no host. Para isso vamos realizar uma configuração no arquivo /etc/rc.conf. Abra o arquivo com o editor de textos ee digitando o comando:

# ee /etc/rc.conf

Insira as linhas:

ifconfig_em0=”172.30.1.1”

ifconfig_em1=”172.10.1.100 netmask 255.255.255.0”

gateway_enable=”YES”

Roteamento no FreeBSD

A primeira e segunda linha definem o IP das interfaces de rede estaticamente, e a última habilita o host para encaminhar pacotes que chegarem a ele, para que possa encaminhar para o host de destino.

Agora vamos realizar o mesmo com o router-02:

Roteamento no FreeBSD

Finalizadas estas configurações, temos o seguinte:

router-01: possui duas placas de rede, uma com o IP 172.30.1.1 (que será utilizada para a comunicação com o router-02) e a outra com o IP 172.10.1.100 (que será utilizada para a comunicação com a rede interna).

router-02: possui duas placas de rede, uma com o IP 172.30.1.2 (que será utilizada para a comunicação com o router-01) e a outra com o IP 172.20.1.100 (que será utilizada para a comunicação com a rede interna).

Configurando Gateway Padrão

Para que um host utilize um roteador como gateway padrão, precisamos configurá-lo informando qual é o IP deste gateway. Fazemos isso por meio do comando route.

Digite o comando:

# route add default IP_do_gateway

add_default_rede1

Perceba que o host chamado rede-01 (que representa os computadores da rede 1) foi configurado para utilizar como gateway o roteador 1. Assim, quando este host tentar acessar um computador de uma rede diferente da rede que ele pertence, esta requisição será enviada para o host de IP 172.10.1.100 (router-01).

Agora vamos configurar o host rede-02.

add_default_rede2

Aqui configuramos o host chamado rede-02 (que representa os computadores da rede 2) para que utilize como gateway o roteador 2. Dessa forma, as requisições que possuem como destino um computador diferente da sua rede, serão enviadas para o router-02.

Esta é a forma manual de se configurar, via terminal. O inconveniente deste tipo de configuração é que ela só será válida até que o computador seja reiniciado, em caso de reboot do sistema esta configuração será perdida. Para solucionar este problema podemos configurar o gateway padrão do host de forma permanente.

Para isso, precisamos editar o arquivo /etc/rc.conf de cada host e especificar nele qual é o gateway padrão do sistema:

Arquivo /etc/rc.conf do host rede-01.

rc_conf_rede-01

Perceba que utilizamos aqui a cláusula defaultrouter para informar qual o IP do gateway padrão do host.

Arquivo /etc/rc.conf do host rede-02.

rc_conf_rede-02

Finalizamos aqui a configuração dos hosts, definindo qual os gateways que eles irão utilizar.

Adicionando as rotas nos roteadores

Para que os pacotes sejam encaminhados por um roteador para uma rede, ele precisa, antes de qualquer coisa, conhecer esta rede. Por isso, precisamos adicionar as redes necessárias na sua tabela de roteamento. Este procedimento pode ser feito de forma manual ou por meio de um protocolo de roteamento. Veremos primeiro como fazer isso de forma manual.

Para adicionar uma rede no roteador utilizamos o comando route.

# route add –net rede/máscara_rede IP_interface_interna

add_net_router1

Com este comando informamos que todos os pacotes com destino a rede 172.20.1.0 será enviado para a interface com o IP 172.30.1.1, que é a interface que se comunica com o router-02, que é o roteador que conhece a rede desejada.

Faremos agora o mesmo com o roteador 2.

add_net_router2

Aqui configuramos o roteador para enviar todos os pacotes com destino a rede 172.10.1.0 para a interface com o IP 172.30.1.2 (interface que se comunica com o router-01), que conhece a rede desejada.

Adicionando redes automaticamente

O comando route, como explicado antes, mantem suas configurações apenas até o momento em que o host é reiniciado. Sendo assim, estas configurações serão perdidas após o reboot do sistema. Para que isso não ocorra precisamos definir estas configurações de forma automática e permanente.

As redes podem ser configuradas no arquivo /etc/rc.conf por meio das linhas:

static_routes=”nome_rede”

route_nome_rede=”-net rede/máscara IP_interface_interna”

add_rede_router1

Na linha “static_routes” informamos um nome para a rede e na segunda linha informamos a rede a ser adicionada e o IP da interface por onde estes pacotes serão enviados (interface que se comunica com o outro roteador).

Vamos fazer o mesmo com o router-02

add_rede_router2

Pronto nossos hosts e roteadores estão configurados, agora podemos realizar os testes de conexão.

Testando o roteamento no FreeBSD

Se todas as configurações estiverem corretas as duas redes já estarão se comunicando. Vamos fazer testes de PINGs entre eles e se os pacotes forem recebidos, significa que está tudo correto com nossa configuração.

No host rede-01 digite o comando ping:

# ping host_rede2

ping_rede1

Na imagem acima utilizamos primeiro o comando ifconfig para ver nosso IP  (1). Logo depois realizamos um envio de 4 pacotes PINGs em um computador presente na outra rede (2) e por fim analisamos que nenhum pacote foi perdido. Isso significa que o host presente na rede 1 está conseguindo se comunicar com o host da rede 2.

Agora faremos o mesmo com o host presente na rede 2.

# ping host_rede1

ping_rede2

Da mesma forma iniciamos com o comando ifconfig para verificar o IP da nossa máquina (1), logo depois realizamos um PING em uma máquina presente na outra rede (2) e por fim podemos ver que nenhum pacote foi perdido, indicando que estes computadores conseguem se comunicar.

Habilitando um protocolo de roteamento dinâmico

Em alguns casos o administrador possui em seu ambiente dezenas de sub-redes e hosts e manter uma tabela de roteamento de forma manual, se mostra algo muito trabalhoso. Para solucionar este problema existe a possibilidade de habilitar um protocolo de roteamento que criará e manterá esta tabela sempre atualizada de forma automática.

O roteamento no FreeBSD pode ser automatizado por meio do daemon routed que implementa o protocolo de roteamento RIP (Routing Information Protocol). Para habilitar o routed precisamos editar o arquivo /etc/rc.conf.

# ee /etc/rc.conf

Insira a linha:

router_enable=”YES”

em alguns casos, mesmo habilitando o routed, pode ser necessário adicionar alguma rota estática, neste caso deve-se listá-la no arquivo /etc/gateways, arquivo lido no momento que o routed é iniciado.

Uma entrada neste arquivo está exemplificada na entrada abaixo:

net 172.20.1.0 gateway 172.30.1.1 metric 1 passive

A opção passive impede que esta rota seja deletada da tabela de roteamento.

Outra opção pode ser:

net 172.10.1.0 gateway 172.30.1.2 metric 1 active

A opção active permite que a rota seja manipulada pelo routed.

Depois de configurada todas as rotas podemos visualizá-las por meio do comando netstat –r.

netstat

Perceba que agora o router-02 já possui as rotas desejadas, incluindo a rede 172.10.1.0 e sabe que o gateway para esta rede é o 172.0.1.2. Este artigo não pretende esgotar o tema de roteamento no FreeBSD, porém é um manual de como transformar o FreeBSD em um roteador.

Espero que o conteúdo tenha sido útil.





Sobre o Autor

Foto de perfil de Leonardo Souza
Leonardo Souza
Bacharel em Informática, pós graduado em Segurança de Redes de Computadores e analista de Segurança da Informação. Entusiasta de Segurança da Informação e usuário FreeBSD, porém sem xiismo.




0 Comments


Seja o Primeiro a Comentar!


You must be logged in to post a comment.