31.2. Gateways e Rotas

Contribuição deCoranth Gryphon.

O roteamento é o mecanismo que permite que um sistema encontre o caminho da rede para outro sistema. Uma rota é um par definido de endereços que representam o destino e um gateway. A rota indica que, ao tentar chegar ao destino especificado, você deverá enviar os pacotes pelo gateway especificado. Existem três tipos de destinos: hosts individuais, sub-redes e padrão. A rota padrão é usada se nenhuma outra rota for aplicada. Existem também três tipos de gateways: hosts individuais, interfaces, também chamados de links, e endereços de hardware Ethernet (MAC). Rotas conhecidas são armazenadas em uma tabela de roteamento.

Esta seção fornece uma visão geral dos fundamentos de roteamento. Em seguida, ele demonstra como configurar um sistema FreeBSD como um roteador e oferece algumas dicas de solução de problemas.

31.2.1. Fundamentos de roteamento

Para ver a tabela de roteamento de um sistema FreeBSD, use netstat(1):

% netstat -r
Routing tables

Internet:
Destination      Gateway            Flags     Refs     Use     Netif Expire
default          outside-gw         UGS        37      418       em0
localhost        localhost          UH          0      181       lo0
test0            0:e0:b5:36:cf:4f   UHLW        5    63288       re0     77
10.20.30.255     link#1             UHLW        1     2421
example.com      link#1             UC          0        0
host1            0:e0:a8:37:8:1e    UHLW        3     4601       lo0
host2            0:e0:a8:37:8:1e    UHLW        0        5       lo0 =>
host2.example.com link#1            UC          0        0
224              link#1             UC          0        0

As entradas neste exemplo são as seguintes:

padrão

A primeira rota nesta tabela especifica a rota padrão. Quando o sistema local precisa estabelecer uma conexão com um host remoto, ele verifica a tabela de roteamento para determinar se existe um caminho conhecido. Se o host remoto corresponder a uma entrada na tabela, o sistema verificará se pode se conectar usando a interface especificada nessa entrada.

Se o destino não corresponder a uma entrada ou se todos os caminhos conhecidos falharem, o sistema usará a entrada para a rota padrão. Para hosts em uma rede local, o campo Gateway na rota padrão é definido para o sistema que possui uma conexão direta com a internet. Ao ler esta entrada, verifique se a coluna Flags indica que o gateway é utilizável (UG).

A rota padrão para uma máquina que está funcionando como gateway para o mundo externo será a máquina de gateway no provedor de serviços de Internet (ISP).

localhost

A segunda rota é a localhost. A interface especificada na coluna Netif para localhost é lo0, também conhecido como o dispositivo de loopback. Isso indica que todo o tráfego para esse destino deve ser interno, em vez de enviá-lo pela rede.

Endereço MAC

Os endereços que começam com 0:e0: são endereços de MAC. O FreeBSD irá identificar automaticamente quaisquer hosts, test0 no exemplo, na Ethernet local e adicionará uma rota para aquele host através da interface Ethernet, re0. Esse tipo de rota tem um tempo limite, visto na coluna Expire, que é usada se o host não responder em um período de tempo específico. Quando isso acontecer, a rota para esse host será automaticamente excluída. Esses hosts são identificados usando o protocolo de informações de roteamento (RIP), que calcula rotas para hosts locais com base em uma determinação de caminho mais curto.

sub-rede

O FreeBSD irá adicionar automaticamente rotas de sub-rede para a sub-rede local. Neste exemplo, 10.20.30.255 é o endereço de broadcast da sub-rede 10.20.30 e example.com é o nome de domínio associado a essa sub-rede. A designação link#1 refere-se à primeira placa Ethernet na máquina.

Hosts de rede local e sub-redes locais têm suas rotas configuradas automaticamente por um daemon chamado routed(8). Se ele não estiver em execução, somente as rotas definidas estaticamente pelo administrador existirão.

host

A linha host1 refere-se ao host pelo seu endereço Ethernet. Como é o host de envio, o FreeBSD sabe usar a interface de loopback (lo0) em vez da interface Ethernet.

As duas linhas host2 representam os aliases que foram criados usando ifconfig(8). O símbolo => após a interface lo0 diz que um alias foi definido além do endereço de loopback. Tais rotas só aparecem no host que suporta o alias e todos os outros hosts na rede local terão uma linha link#1 para tais rotas.

224

A linha final (destino subnet 224) lida com multicasting.

Vários atributos de cada rota podem ser vistos na coluna Flags. A Tabela 31.1, “Flags da Tabela de Roteamento Frequentemente Observados” resume algumas destas flags e seus significados:

Tabela 31.1. Flags da Tabela de Roteamento Frequentemente Observados
ComandoPropósito
UA rota está ativa (up).
HO destino da rota é um único host.
GEnvie qualquer coisa para este destino por este gateway, que ele irá descobrir a partir daí para onde enviá-lo.
SEsta rota foi configurada estaticamente.
CClona uma nova rota baseada nessa rota para as máquinas se conectarem. Esse tipo de rota é normalmente usado para redes locais.
WA rota foi configurada automaticamente com base em uma rota de rede local (clone).
LA rota envolve referências a um hardware Ethernet (link).

Em um sistema FreeBSD, a rota padrão pode ser definida no /etc/rc.conf especificando o endereço IP do gateway padrão:

defaultrouter="10.20.30.1"

Também é possível adicionar manualmente a rota usando o comando route:

# route add default 10.20.30.1

Observe que as rotas adicionadas manualmente não sobreviverão a uma reinicialização. Para obter mais informações sobre a manipulação manual das tabelas de roteamento de rede, consulte route(8).

31.2.2. Configurando um roteador com rotas estáticas

Contribuído por Al Hoang.

Um sistema FreeBSD pode ser configurado como o gateway padrão, ou roteador, para uma rede se for um sistema dual-homed. Um sistema dual-homed é um host que reside em pelo menos duas redes diferentes. Normalmente, cada rede é conectada a uma interface de rede separada, embora o aliasing IP possa ser usado para vincular vários endereços, cada um em uma sub-rede diferente, a uma interface física.

Para que o sistema encaminhe os pacotes entre as interfaces, o FreeBSD deve ser configurado como um roteador. Padrões da Internet e boas práticas de engenharia impedem o Projeto FreeBSD de habilitar esse recurso por padrão, mas ele pode ser configurado para iniciar na inicialização adicionando esta linha ao /etc/rc.conf:

gateway_enable="YES"          # Set to YES if this host will be a gateway

Para habilitar o roteamento agora, defina a variável sysctl(8) net.inet.ip.forwarding para 1. Para parar o roteamento, redefina essa variável para 0.

A tabela de roteamento de um roteador precisa de rotas adicionais para saber como acessar outras redes. Rotas podem ser adicionadas manualmente usando rotas estáticas ou rotas podem ser aprendidas automaticamente usando um protocolo de roteamento. As rotas estáticas são apropriadas para redes pequenas e esta seção descreve como adicionar uma entrada de roteamento estático para uma rede pequena.

Nota:

Para grandes redes, as rotas estáticas se tornam não escaláveis rapidamente. O FreeBSD vem com o daemon de roteamento BSD padrão routed(8), que fornece os protocolos de roteamento RIP, versões 1 e 2 e IRDP. O suporte para os protocolos de roteamento BGP e OSPF pode ser instalado usando o pacote ou port net/zebra.

Considere a seguinte rede:

Neste cenário, o RouterA é uma máquina FreeBSD que está agindo como um roteador para o resto da Internet. Ele tem uma rota padrão definida como 10.0.0.1, que permite a conexão com o mundo externo. O RouterB já está configurado para usar 192.168.1.1 como seu gateway padrão.

Antes de adicionar rotas estáticas, a tabela de roteamento no RouterA se parece com:

% netstat -nr
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif  Expire
default            10.0.0.1           UGS         0    49378    xl0
127.0.0.1          127.0.0.1          UH          0        6    lo0
10.0.0.0/24        link#1             UC          0        0    xl0
192.168.1.0/24     link#2             UC          0        0    xl1

Com a tabela de roteamento atual, o RouterA não tem uma rota para a rede 192.168.2.0/24. O comando a seguir adiciona a rede Internal Net 2 à tabela de roteamento do RouterA usando 192.168.1.2 como o próximo salto:

# route add -net 192.168.2.0/24 192.168.1.2

Agora, o RouterA pode alcançar qualquer host na rede 192.168.2.0/24. No entanto, as informações de roteamento não persistirão se o sistema FreeBSD for reinicializado. Se uma rota estática precisar ser persistente, adicione-a ao /etc/rc.conf:

# Add Internal Net 2 as a persistent static route
static_routes="internalnet2"
route_internalnet2="-net 192.168.2.0/24 192.168.1.2"

A variável de configuração static_routes é uma lista de strings separadas por um espaço, onde cada string faz referência a um nome de rota. A variável route_internalnet2 contém a rota estática para esse nome de rota.

Usar mais de uma string em static_routes cria várias rotas estáticas. A seguir, é mostrado um exemplo de adição de rotas estáticas para as redes 192.168.0.0/24 e 192.168.1.0/24:

static_routes="net1 net2"
route_net1="-net 192.168.0.0/24 192.168.0.1"
route_net2="-net 192.168.1.0/24 192.168.1.1"

31.2.3. Solução de problemas

Quando um espaço de endereçamento é atribuído a uma rede, o provedor de serviços configura suas tabelas de roteamento para que todo o tráfego da rede seja enviado para o link do site. Mas como os sites externos sabem enviar seus pacotes para a rede do ISP?

Existe um sistema que rastreia todos os espaços de endereçamento e define seu ponto de conexão com o backbone da Internet, ou as principais linhas que transportam o tráfego da Internet pelo país e pelo mundo. Cada máquina de backbone possui uma cópia de um conjunto mestre de tabelas, que direciona o tráfego de uma rede específica para uma portadora de backbone específica e, a partir daí, desce a cadeia de provedores de serviços até alcançar uma determinada rede.

É tarefa do provedor de serviços anunciar aos sites de backbone que eles são o ponto de conexão e, assim, o caminho para dentro de um site. Isso é conhecido como propagação de rota.

Às vezes, há um problema com a propagação de rotas e alguns sites não conseguem se conectar. Talvez o comando mais útil para tentar descobrir onde o roteamento está quebrando seja o traceroute. Ele é útil quando o ping falha.

Ao usar o traceroute , inclua o endereço do host remoto para se conectar. A saída mostrará os gateway ao longo do caminho da tentativa, eventualmente atingindo o host de destino ou encerrando devido à falta de conexão. Para mais informações, consulte traceroute(8).

31.2.4. Considerações sobre Multicast

O FreeBSD suporta nativamente tanto aplicativos multicast e quanto roteamento multicast. Os aplicativos multicast não exigem nenhuma configuração especial para serem executados no FreeBSD. O suporte ao roteamento multicast requer que a seguinte opção seja compilada em um kernel personalizado:

options MROUTING

O daemon de roteamento multicast, mrouted, pode ser instalado usando o pacote ou port net/mrouted. Este daemon implementa o protocolo de roteamento multicast DVMRP e é configurado editando o /usr/local/etc/mrouted.conf para configurar os túneis e o DVMRP. A instalação do mrouted também instala o map-mbone e o mrinfo, bem como suas páginas de manual associadas. Consulte estes documentos para exemplos de configuração.

Nota:

O DVMRP foi amplamente substituído pelo protocolo PIM em muitas instalações multicast. Consulte pim(4) para obter maiores informações.

All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/

Questions that are not answered by the documentation may be sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.