Autor: Koji
Data: 08/07/2001

NAT em FreeBSD

1 . Introdução
2 . Primeiros preparativos
3
. NAT a nível de aplicação
4 . NAT a nível de interface
5 . Configuração dos clientes
6 . Mas informação

 

1 . Introdução

Leste pequeno articulo explicará de uma maneira fácil e rápida o procedimento para compartir a conexão a Internet com outros computadores (Windows, Linux, *BSD, etc) usando nosso FreeBSD como servo, ou neste caso como gateway e de uma maneira totalmente transparente para os clientes.

Para isso usaremos NAT, Network A ddress Translation (Tradução de direções de rede).

Como veis dividimos o doc em 6 apartados para fazê-lo mas entretido e mas comprensible.
* O ponto 1 explica ... o que estais lendo agora ;-)
* O ponto 2 já entra na configuração de nosso FreeBSD, mas as mudanças que aqui façamos serão validos tanto se fazemos NAT a nível de interface como se fazemos NAT a nível de aplicação
* O ponto 3 abarcará o NAT a nível de aplicação. Sem dúvida para minha é a melhor opção se temos um PC caseiro com um modem, ainda que se preferimos fazê-lo via interface também valerá
* O ponto 4, tratará sobre NAT a nível de interface . Quiçá esta é a melhor opção para redes complexas com firewall e que usam tipos de conexão a Internet que não estão baseadas em modem
* O ponto 5, abarcasse a configuração dos computadores clientes para estabelecer como gateway a nosso FreeBSD. Explicaremos por em cima o procedimento para Windows 9X, *BSD e Linux.
* O ponto 6, explica onde encontrar mas informação sobretudo o que se explica neste doc

vamos lá :-)

 

2 . Primeiros preparativos

Como comentámos anteriormente, o que aqui se explica se tem de fazer tanto se fazemos NAT a nível de aplicação como a nível interface.

Primeiramente devemos dotar a nosso FreeBSD de gateway ou porta de enlace já que vai ser o que 'sirva' ao resto de clientes da rede como gateway.
Para dotar a FreeBSD disto temos que pôr a linea gateway_enable="YES" em nosso /etc/rc.conf. Esta linha é a referência para que os arquivos de início possam executar o comando sysctl -w net.inet.ip.forwarding=1. Este comando ativa o ip forwading o qual nos permitirá converter nosso FreeBSD num gateway. Para aqueles interessados em saber em que script de início se executa tal comando que revisem o arquivo /etc/rc.network.
Se tocámos o arquivo /etc/rc.conf as mudanças não se ativarão até iniciar de novo a maquina, assim que se vos parece, o mas cómodo é estabelecer o /etc/rc.conf com a variável que indicámos anteriormente, e fazer uso do comando sysctl para já dispor do ip forwading sem ter que reiniciar

3. NAT a nível de aplicação

Este tipo de NAT o faremos junto com PPP. O mecanismo é singelo, tão só temos de passar o parâmetro -nat ao lançar o programa ppp como de costume e com seus parâmetros que púnhamos anteriormente.

ej: ppp -nat -background inet  ('inet' é o nome de nossa etiqueta no ppp.conf, muda-a pela que tua tenhas definida)

Isso é todo, a partir desse momento nosso FreeBSD fará NAT com o resto de clientes. Fácil verdade? :-)

NOTA: Em versões antigas de FreeBSD (<=3.x) usava-se o parâmetro -alias. Se por casualidade ao usar -nat te dá algum tipo de erro de opção não reconhecida usa o -alias


4 . NAT a nível de interface

Se desejamos usar NAT em alguma interface (ed0, tun0 , etc.) o procedimento é algo mas longo.
Primeiramente devemos compilar nosso FreeBSD para que suporte firewall, neste caso ipfw (IP Firewall). A verdade é que as ultimas versões de FreeBSD (>=4.x) já trazem um modulo compilado para o uso de ipfw , mas por desgraça não vem ativado com IPDIVERT, assim que a única solução será compilar um novo kernel. Para isso devereis compilar um kernel com as seguintes opções:

options IPFIREWALL
options IPDIVERT

Uma vez compilado o kernel com estas opções, faremos uso do programa natd e de umas réguas que agora poremos:

/sbin/ipfw -f flush
/sbin/ipfw add divert natd all from any to any via <interface>  
(Mudai <interface> pelo interface que tenhais para sair a internet ed0, tun0, etc.)
/sbin/ipfw add pass all from any to any

E agora poremos em marcha o natd:

natd -interface <interface>   (Mudai <interface> pelo interface que tenhais para sair a internet, ed0, tun0, etc.)

E isso é todo. As réguas obviamente ativam o 'divert' para o interface que lhe indiquemos, e o programa natd será o encarregado de estar à escuta no interface indicado para ir 'traduzindo' a informação que lhe chega desde internet e desde os computadores clientes.

Todo isto é unicamente o que precisámos para fazer este tipo de NAT, mas como podeis ver, o ter que teclear todas estas réguas e demais cada vez que iniciemos nosso FreeBSD o fazem uma tarefa pesada. Para fazê-lo mas cómodo usaremos os scripts de início. Primeiramente tocaremos o arquivo /etc/rc.conf:

firewall_enable="YES"
firewall_type="/etc/firewall.rules"
firewall_logging="YES"
firewall_script="/etc/rc.firewall"
natd_enable="YES"
natd_interface="ed0"

Tentai colocar as linhas com este ordem, a minha me funcionou bem. Quiçá o mas importante a comentar seja a segunda linha, que especifica o arquivo onde estarão ubicadas as anteriores réguas que tínhamos tecleado a mão e a ultima linha que especifica o interface do programa natd. Muda ed0 pelo que te corresponda. As restantes ativam o firewall e o programa natd

Uma vez feitos estas mudanças em etc //rc.conf criaremos o arquivo /etc/firewall.rules para pôr as anteriores réguas do ipfw. Ficaria algo assim:

-f flush
add divert natd all from any to any via <interface>  
(Mudai <interface> pelo interface que tenhais para sair a internet, ed0 , tun0, etc.)
add pass all from any to any

E guardámos o arquivo.
Agora cada vez que reiniciemos nosso FreeBSD todo será automático e não nos teremos que preocupar de ativar natd nem agregar nenhuma régua ipfw

Antes de acabar este apartado me gostaria comentar uma coisa para todos aqueles que estejais usando modem com PPP (interface tun0) e estejais provando este procedimento.
Já que nós usámos PPP para conectar a internet, não podemos fazer uso destes scripts de início para que todo seja automático. A IP de internet só
temo-la após executar PPP e portanto as réguas de ipfw e a activación de natd *SÓ* funcionarão se já arrancámos PPP e dispomos de uma IP previamente. Soluções?

Para começar modificar ligeiramente nosso /etc/rc.conf e colocar só as opções seguintes:

firewall_enable="YES"
firewall_type="open"
firewall_logging="YES"
firewall_script="/etc/rc.firewall"

E agora nos fazemos a pergunta .. como ativamos as réguas ipfw automaticamente? Uma das opções séria fazer uso do arquivo ppp.linkup. Este arquivo esta destinado a executar o que nós queiramos justamente após estabelecer-se a conexão PPP. Portanto nos vem muito bem.
Só precisámos criar o arquivo /etc/ppp/ppp.linkup e pôr o seguinte:

inet:

 !bg /sbin/ipfw -f flush
 !bg /sbin/ipfw add divert natd all from any to any via tun0.
 !bg /sbin/ipfw add pass all from any to any
 !bg natd -interface tun0.

Assegurai-vos sobretudo de respeitar os espaços, enters, enters dobres, e sangrado. É dizer, deveria de estar o arquivo tal como veis este texto, senão possivelmente vos dará algum erro de script failed. Também assegurai-vos de substituir inet: pela etiqueta que useis vocês em vosso /etc/ppp/ppp.conf para conectar a internet. E finalmente o interface tun0 se de desse o caso de que usais outro.

E crio que isso é todo ;-) agora depois de executar PPP e estabelecer-se a conexão, o arquivo que criámos (/etc/ppp/ppp.linkup) se encarregará de estabelecer as réguas ipfw


5 . Configuração dos clientes

Agora que já temos o servo FreeBSD ativado para fazer NAT só nos fica configurar os clientes, assim que os separaremos para que este mas ordenado:

* CASO WINDOWS 9X *
No caso de Windows especificaremos a IP de nosso FreeBSD no icono rede, propriedades tcpip de nossa targeta, pestana porta de enlace.
Também não deveríamos de esquecer-nos de configurar os DNS. Para isso no mesmo lado mas pestana DNS. Aqui poremos as DNS que usemos normalmente para Internet, e para que nosso Windows seja capaz de resolvê-las.

 * CASO FreeBSD *
Só deveremos estabelecer a variável defaultrouter="IP GATEWAY" pondo a IP de nosso FreeBSD que faz NAT no arquivo /etc/rc.conf
Agora só nos ficasse reiniciar para ativar as mudanças. Se não queremos reiniciar podemos adicionar o comando seguinte:

route add default IP_GATEWAY   (Mudando IP_GATEWAY pela IP do server que faz NAT)

* CASO OpenBSD e NetBSD *
Nestes dois BSD só deveremos colocar a IP de nosso gateway no arquivo /etc/mygate e reiniciar para fazer efetivos as mudanças. Se não desejámos reiniciar podemos usar o mesmo comando que explicámos em FreeBSD:

route add default IP_GATEWAY    (Mudando IP_GATEWAY pela IP do server que faz NAT)

* CASO LINUX *

No caso de linux pode variar segun a distribuição, o que se podemos assegurar que este comando ativa a rota para o gateway:

route add default gw IP_GATEWAY  (Mudando IP_GATEWAY pela IP do server que faz NAT)

Olhar a documentação de vosso linux para fazer efetivos as mudanças cada vez que se inicie vosso Linux

Para acabar, e se estais configurando qualquer *BSD ou Linux como cliente, não vos olvideis de tocar o arquivo /etc/resolv.conf para estabelecer os servos de nomes.


6 . Mas informação

Compilação do kernel: FAQ e Handbook de FreeBSD
NAT: man natd
Rotas: man route
Outras variáveis: /etc/defaults/rc.conf
ipfw: man ipfw
Configuração PPP: /usr/share/examples/ppp

Para terminal dizer, que para qualquer comentário, erro ou qualquer outra coisa podeis escrever-me a koji @jet.é

Hosted by www.Geocities.ws

1