19.13. NAT - Tradução de Endereço de Rede

Contribuído por Chern Lee.

19.13.1. Visão Geral

O daemon de Tradução de Endereço de Rede do FreeBSD, geralmente conhecido como natd(8) é o daemon que aceita pacotes IP entrantes não modificados, altera a origem para a máquina local e re-injeta estes pacotes de volta ao fluxo de pacotes IP que saem. natd(8) faz isso mudando o endereço IP de origem e a porta, de forma que, quando o dado é recebido de volta, é capaz de determinar sua localização original e repassá-lo ao seu solicitante original.

O uso mais comum do NAT é executar o que é mais geralmente conhecido como Compartilhamento de Conexão Internet.

19.13.2. Estrutura

Dada a redução do espaço de endereçamento IP no IPv4, e o elevado número de usuários em linhas de alta velocidade para consumidores, como cabo ou DSL, as pessoas estão progressivamente precisando de uma solução de Compartilhamento de Conexão Internet. A capacidade de conectar vários computadores em linha (online) através de uma conexão e endereço IP torna o natd(8) uma escolha razoável.

Freqüentemente, um usuário tem uma máquina conectada a uma linha DSL ou cabo com um endereço IP e deseja usar este computador conectado para oferecer acesso Internet a diversos mais através de uma rede local.

Para isto, a máquina FreeBSD na Internet precisa atuar como um gateway. Esta máquina precisa ter duas placas de rede --uma para conectar ao roteador Internet, a outra para conectar a uma rede local. Todas as máquinas na rede local são conectadas através de um concentrador ou comutador.

Uma configuração como esta é geralmente usada para compartilhar uma conexão Internet. Uma das máquinas da LAN está conectada à Internet. As demais máquinas acessam a Internet através daquela máquina ``gateway''.

19.13.3. Configuração

As seguintes opções precisam estar no arquivo de configuração do kernel:

options IPFIREWALL
options IPDIVERT

Adicionalmente, por escolha, o seguinte também pode ser apropriado:

options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPFIREWALL_VERBOSE

As seguintes linhas precisam estar no /etc/rc.conf:

gateway_enable="YES"
firewall_enable="YES"
firewall_type="OPEN"
natd_enable="YES"
natd_interface="fxp0"
natd_flags=""
gateway_enable="YES" Configura a máquina parar atuar como um gateway. Executando sysctl net.inet.ip.forwarding=1 causaria o mesmo efeito.
firewall_enable="YES" Ativa as regras do firewall em /etc/rc.firewall durante a inicialização.
firewall_type="OPEN" Isto especifica um conjunto predefinido de regras do firewall, permitindo a entrada de qualquer coisa. Veja /etc/rc.firewall para tipos adicionais.
natd_interface="fxp0" Indica a qual interface repassar pacotes (a interface conectada à Internet).
natd_flags="" Qualquer das opções de configuração passadas ao natd(8) durante a inicialização.

Tendo as opções anteriores definidas em /etc/rc.conf seria executado natd -interface fxp0 durante a inicialização. Ele também pode ser executado manualmente.

Cada máquina e interface na rede local deveria ter números de endereços IP atribuídos no espaço de rede privado como definido por RFC 1918 e ter como o gateway padrão, o endereço IP interno da máquina natd.

Por exemplo, o cliente A e B na rede local possuem endereços IP 192.168.0.2 e 192.168.0.3, enquanto a interface de rede local da máquina executando o natd possui o endereço IP 192.168.0.1. O gateway padrão dos clientes A e B precisa ser o da máquina com natd, 192.168.0.1. A interface externa, ou Internet, da máquina com natd não requer nenhuma modificação especial para o funcionamento do natd(8).

19.13.4. Redirecionamento de Porta

A desvantagem do natd(8) é que os clientes da rede local não são diretamente acessíveis a partir da Internet. Os clientes dentro da rede local podem fazer conexões saindo para o mundo, mas não podem receber conexões vindas de fora. Isto apresenta um problema ao se tentar executar serviços Internet em uma das máquinas cliente da rede local. Uma forma simples de contornar isto é redirecionando certas portas Internet na máquina com natd para um cliente da rede local.

Por exemplo, um servidor IRC roda em um cliente A, e um servidor web em um cliente B. Para que isto funcione corretamente, as conexões recebidas nas portas 6667 (IRC) e 80 (web) precisam ser redirecionadas para as respectivas máquinas.

Um -redirect_port precisa ser passado ao natd(8) com as opções adequadas. A sintaxe é a seguinte:

     -redirect_port proto targetIP:targetPORT[-targetPORT]
         [aliasIP:]aliasPORT[-aliasPORT]
         [remoteIP[:remotePORT[-remotePORT]]]

No exemplo acima, o argumento deve ser:

    -redirect_port tcp 192.168.0.2:6667 6667
    -redirect_port tcp 192.168.0.3:80 80

Isto irá direcionar as portas tcp corretas para as máquinas clientes da rede local.

Um argumento -redirect_port pode ser usado para indicar faixas de portas além de portas individuais. Por exemplo, tcp 192.168.0.2:2000-3000 2000-3000 redirecionaria todas as conexões recebidas nas portas 2000 a 3000 para portas 2000 a 3000 no cliente A.

Estas opções podem ser usadas executando diretamente o natd(8), ou inseridas na opção natd_flags="" em /etc/rc.conf.

Para mais opções de configuração, consulte natd(8).

19.13.5. Redirecionamento de Endereço

Redirecionamento de endereço é útil se vários endereços IP estão disponíveis, mesmo que eles precisem estar em uma máquina. Com isto, o natd(8) pode designar cada cliente da rede local com seu próprio endereço externo. O natd(8) então reescreve os pacotes de saída dos clientes da rede local com o endereço IP externo apropriado e redireciona todo o tráfego de entrada para aquele endereço IP de volta ao cliente da rede local específico. Isto também é conhecido como NAT estático. Por exemplo, os endereços IP 128.1.1.1, 128.1.1.2 e 128.1.1.3 pertencem à maquina gateway com natd. O 128.1.1.1 pode ser usado como o endereço IP externo da máquina gateway, enquanto 128.1.1.2 e 128.1.1.3 são repassados de volta aos clientes A e B da rede local.

A sintaxe de -redirect_address é a seguinte:

-redirect_address IPlocal IPpúblico
IPlocal O endereço IP interno do cliente da rede local.
IPpúblico O endereço IP externo correspondente ao cliente da rede local.

No exemplo, este argumento seria escrito:

-redirect_address 192.168.0.2 128.1.1.2
-redirect_address 192.168.0.3 128.1.1.3

Como -redirect_port, estes argumentos também são inseridos na opção natd_flags="" do /etc/rc.conf. Com redirecionamento de endereço, não há necessidade de redirecionamento de porta, uma vez que todos os dados recebidos em um endereço IP em particular são redirecionados.

Os endereços IP externos na máquina com natd precisam ser ativos como secundários na interface externa. Veja como fazer em rc.conf(5).

Este, e outros documentos, podem ser obtidos em ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Para perguntas sobre FreeBSD, leia a documentação antes de contatar <questions@FreeBSD.org>.
Para perguntas sobre esta documentação, envie e-mail para <doc@FreeBSD.org>.