http://www.zago.eti.br/firewall/nat.txt Use CTRL+F para refinar a pesquisa. Linha de: **************** separa mensagens ou tópicos. ******************************************************** Zago http://www.zago.eti.br/menu.html FAQ e artigos sobre Linux ************************************************* ************************************************* |===================================================================| | Protocolo NAT | |===================================================================| Para que o NAT? ############### Os provedores de acesso Internet tem a necessidade de estar sempre expandindo o seu numero de clientes e disponibilizando novos serviços para continuar a crescer nesse mercado tão competitivo. Um dos grandes mercados que o provedor pode investir é o de conexão de pequenas e médias empresas à Internet, ganhando assim nos serviços na consultoria e no acesso. Essas pequenas e médias redes (entre 5 a 25 máquinas) tem necessidades bem definidas e comuns:permitir com que as máquinas da rede local acessem a Internet com segurança e, eventu- almente,permitir com que a Internet acesse um ou maisservidores (WWW, FTP, e-mail, etc.) na rede local. Por outro lado, existem algumas dessas pequenas redes que não estão dispostas a pagarem o alto custo de se conectarem diretamente a In- ternet, quer seja através de um provedor Internet, quer seja através de uma conexão direta com algum "backbone".Essas redes desejam apenas permitir que as máquinas da rede local acessem esporadicamente a In- ternet porém não podem disponibilizar modems, linhas telefônicas e contas em provedor para cada máquina. Esse tipo de rede necessita de algum meio de compartilhar um modem, uma linha telefônica e uma conta de acesso no provedor. O Provedor e o Fornecimento de Conexões de Redes ################################################ Quando o provedor de acesso entra no mercado de fornecimento de cone- xões para pequenas e médias empresas ele se depara com um problema sério: a escassez de endereços IPs. Cada provedor, quando começa as suas operações recebe o que se chama "Uma Classe C". Uma classe C é uma seqüência de endereços que são disponibilizados para a rede desse provedor e cada máquina da rede deve ter um endereço dentro dessa se- qüência, quer seja servidor de WWW, e-mail, estação de trabalho ou u- suário discado (isso mesmo, cada computador que acesse a Internet do provedor ganha, no instante da conexão, um desses endereços IPs). Uma classe C é composta de 256 endereços IPs (porém, por razões téc- nicas, nem todos podem ser utilizados) e não pode haver na rede duas máquinas com o mesmo endereço IP. 256 endereços IPs muitas vezes não sao suficientes para um provedor de acesso Internet, então ele se vê forçado a pedir mais uma classe C; porém esse processo é burocrático e o provedor é obrigado a justificar de maneira clara a sua necessi- dade. A coisa se torna pior quando o provedor tenta vender conexões para pequenas e médias empresas, porque nesse caso cada máquina da rede local dessas empresas deve receber 1 endereço IP. Assim, uma rede com 14 máquinas deve receber 14 endereços IPs (como disse acima, por ra- zões técnicas alguns endereços IP a mais devem são desperdiçados,para saber mais sobre essas razões consulte algum texto sobre roteamento e máscaras de rede). Assim, o provedor necessita de alguma coisa que permita que ele eco- nomize endereços IPs e que atenda as necessidades dos seus clientes. Uma das soluções é o NAT. A Pequena Empresa e o Compartilhamento de Modem/Linha/Conta ########################################################### Já no caso da pequena empresa tentando compartilhar o modem e a linha telefônica o problema é um pouco mais complicado. Nesse caso o único meio de acesso com a Internet é uma conta em um provedor de acesso; essas contas de acesso dão direito a apenas um endereço IP,que o com- putador recebe quando disca para o provedor. Esse endereço IP muda a cada conexão. Assim, a solução nesse caso é algo que consiga compartilhar esse en- dereço IP recebido com todas as máquinas da rede local. Neste caso a solução também é o NAT. O Que é o NAT? ############## O NAT não é um protocolo nem um padrão. O NAT é apenas uma série de tarefas que um roteador (ou equipamento equivalente) deve realizar para converter endereços IPs entre redes distintas. Um equipamento que tenha o recurso de NAT (sigla em inglês: "Network Address Translation" ou Tradução de Endereço de Rede) deve ser capaz de analisar todos os pacotes de dados que passam por ele e trocar os endereços desses pacotes de maneira adequada. Para facilitar o enten- dimento do NAT vamos ver dois exemplos: Exemplo 1 ========= Suponha que nós queremos conectar uma rede de três computadores na Internet através de uma única linha telefônica, um modem e apenas uma conta de acesso ao provedor. Temos entao os computadores com endereços IPs de 10.0.0.2 a 10.0.0.4 (note que esses endereços IPs não são válidos na Internet, assim os pacotes de dados enviados por essas máquinas não podem ser roteados na Internet), um roteador com 2 endereços IPs: 10.0.0.1 na rede local e 200.231.107.41 que ele recebeu ao se conectar ao provedor. Repare que o endereço que o roteador recebeu pode mudar a cada conexão. Vamos agora entender como essa conexão funciona: o roteador deve ter o recurso de NAT. Esses roteadores tem uma porta Ethernet conectada ao hub da rede local e uma porta serial conectada a um modem ou linha ISDN. Enquanto ninguém esta acessando a Internet a conexão com o provedor não esta ativa e a linha telefônica esta disponível.Quando alguma má- quina da rede acessa a Internet ela manda o pacote de dados para o roteador (que é o default gateway da rede),este então envia os coman- dos de discagem para o modem, que se conecta com o modem do provedor; após a conexão dos modems o roteador passa um nome de usuário e uma senha para o servidor de comunicações do provedor e recebe um endere- ço IP. Se os computadores da rede tivessem endereços IPs válidos estaria tu- do pronto e o roteador só passaria o pacote de dados para o provedor, porém, como vimos acima,os endereços IPs são escassos e por isso não podemos nos dar ao luxo de utilizarmos endereços IPs válidos na rede local. Assim, o roteador deve, antes de enviar o pacote de dados para o provedor, trocar o endereço de origem do pacote de dados para o en- dereço que ele recebeu do provedor e só depois jogar o pacote para o provedor; quando o pacote voltar o roteador deve trocar o endereço de destino do pacote novamente para o endereço não válido da máquina na rede local e só depois jogar o pacote para essa máquina.Esse processo de troca de endereços IPs é o chamado NAT. Porem nem tudo e tão simples assim. Esse processo funcionaria muito bem se apenas um computador acessasse a Internet a cada instante, po- rém nós queremos que todas as máquinas possam acessar a Internet ao mesmo tempo. Assim é possível que em um determinado instante pacotes de dados de duas máquinas distintas cheguem ao roteador, ele deve en- tão trocar o endereço de origem dos pacotes e enviar para a Internet e, ao receber a resposta, trocar os endereços IP de destino dos paco- tes adequadamente para os respectivos computadores. Para que o roteador possa encaminhar a resposta corretamente a cada um dos computadores de destino o roteador tem que "lembrar" para onde cada máquina enviou os pacotes,de forma que quando os pacotes de res- posta chegarem ele possa identifica-los corretamente. Assim, o rotea- dor deve armazenar em sua memória os pacotes que passaram por ele até que as respostas cheguem. Devido ao fato de que os pacotes de dados só entram se houve um paco- te correspondente que saiu a segurança da rede fica muito forte. Um pacote enviado por alguém na Internet tentando invadir a rede irá chegar até o roteador,porém como ele não vai encontrar em sua memória um endereço da rede local para enviar esse pacote o roteador irá sim- plesmente jogar o pacote fora. Exemplo 2 ========= No exemplo anterior vimos como ligar a Internet a uma pequena rede utilizando um roteador com NAT, uma linha telefônica, um modem e uma conta de acesso no provedor.Naquele exemplo a rede local acessa a In- ternet, porem a Internet não consegue acessar nenhum serviços da rede local. Neste exemplo vamos analisar um outro caso: uma rede que deseja que suas máquinas locais acessem a Internet, porém também que a Internet seja capaz de enxergar um servidor WWW e um servidor de DNS na rede local. Assim, temos dois computadores na rede local: o 10.0.0.2 e 10.0.0.3, dois servidores: o 10.0.0.4 que é servidor de WWW e o 10.0.0.5 que é servidor de DNS e por último o roteador do exemplo anterior. Algumas diferenças básicas entre este exemplo e o anterior: ----------------------------------------------------------- 1.Neste exemplo a Internet deve ser capaz de endereçar o roteador, ou seja, o endereço do lado válido do roteador deve ser fixo. Para que os computadores na Internet acessem essa rede eles devem conhecer o endereço IP dela,e isso fica muito difícil se o endereço muda a ca- da instante. Isso implica que um acordo deve ser firmado entre o provedor e o administrador da rede de forma que o provedor configu- re os seus servidores de comunicação para passarem para o roteador dessa rede sempre o mesmo endereço IP. 2.O roteador deve ser capaz de identificar cada pacote de dados que chega e definir se ele deve ser encaminhado para os servidores ou para os outros computadores da rede (neste último caso, os pacotes seriam respostas às requisições desses computadores). 3.Para que a Internet enxergue os servidores é necessário que a cone- xão entre a rede e o provedor esteja estabelecida.Assim, é recomen- dável neste exemplo 2 que a ligação entre a rede local e o provedor seja feita através de uma linha privativa dedicada.Utilizar uma co- nexão discada para este caso seria possível, porém nenhuma máquina na Internet conseguirá acessar esta rede quando a roteador não es- tiver conectado ao provedor. Para que este exemplo funcione o roteador tem que fazer mais do que NAT, ele deve ser capaz de implementar o conceito de servidor virtual Vamos relembrar: o roteador com NAT joga os pacotes de dados para a Internet trocando o endereço IP de origem pelo endereço que ele ga- nhou do provedor e pega as respostas que chegam da Internet e joga de volta para a rede local trocando o endereço de destino (que é o seu endereço válido) pelo endereço apropriado da rede local. Muito bem, agora vamos pensar no caso de um computador na Internet tentando acessar o servidor de WWW: o computador da Internet manda o pacote de dados para o endereço que o roteador recebeu do provedor (200.231.107.42), esse pacote chega para o roteador e o roteador deve então trocar o endereço IP de destino do pacote para 10.0.0.4 (ende- reço do servidor WWW da rede local) e pegar o pacote com a reposta gerada pelo servidor e trocar o endereço de destino desse pacote pelo endereço válido e jogar para a Internet. Para isso,o roteador tem que ser informado sobre quais computadores da rede local atendem a quais serviços; esse trabalho é feito pelo administrador da rede local. Essa capacidade de rotear adequadamente os pacotes de acordo com o serviço é chamada de Servidor Virtual, pois permite que o roteador se comporte,do ponto da vista da Internet, como um servidor;porém o ser- vidor real esta na rede local atrás do roteador. Repare que o recurso de servidor virtual traz uma segurança muito grande para a rede, pois apenas os serviços configurados no roteador são passados para a rede, qualquer tentativa de acessar a rede local ou servidores locais em qualquer outro serviço não irá obter sucesso. NAT Avançado ############ O NAT define algumas outras tarefas mais complexas que devem ser rea- lizadas pelo roteador para que ele funcione corretamente, entre elas: 1.Os pacotes de dados TCP/IP tem um campo para verificação de erro: o "checksum IP". Como esse campo é dependente dos dados contidos no cabeçalho do pacote de dados (que inclui os endereços IP de origem e destino) ele deve então ser modificado corretamente pelo roteador 2.Como vimos no exemplo 1, o roteador com NAT deve armazenar a infor- mação sobre qual servidor na Internet os computadores locais estão acessando para poder encaminhar as respostas que chegarem. Porém pode haver instantes onde duas máquinas da rede local podem estar acessando o mesmo servidor na Internet. Nesse caso, não basta arma- zenar os endereços IPs das máquinas que estão sendo acessadas,deve- se também armazenar o "socket" de origem de cada máquina local para que o roteador possa encaminhar corretamente as respostas. 3.A solução apresentada no item anterior também tem um problema: o "socket" de origem de cada máquina é definido por cada uma dessas máquina e é aleatório,então existe a possibilidade de duas máquinas na rede local acessarem o mesmo servidor e escolherem o mesmo "soc- ket" de origem. Neste caso o roteador é obrigado a modificar também o "socket" de origem em uma das conexões, manter essa informação na memória e modificar o "socket" de destino da resposta. Repare que esse procedimento também obriga ao roteador trocar o "checksum" do IP e do TCP. 4.Alguns protocolos como o ICMP, protocolos de roteamento, etc. car- regam dentro do campo de dados informações sobre o endereço da má- quina de origem. O roteador com NAT deve então observar esses paco- tes e modificar essas informações adequadamente. Como cada protoco- lo utiliza essa informação de maneira diferente o roteador deve ter conhecimento específicos sobre o protocolo, caso contrário o proto- colo não irá funcionar. Conclusão ========= Este texto trouxe alguns conceitos básicos sobre o NAT e mostrou como esses conceitos podem ser aplicados, porém o NAT possui algumas com- plicações e aplicações a mais que não foram abordadas neste texto.Pa- ra maiores detalhes recomendamos a leitura do RFC-1631 que detalha o modo de operação do NAT. ************************************************* 4-3-02 - Boletim ViaLinuxis em sintonia com o Fórum tabela NAT Editorial Diversos cuidados devem ser tomados ao se criar uma intranet. Um deles é saber manipular adequadamente a tabela NAT. Extraí o texto seguinte de http://www.metainfo.org/focalinux/guia/avancado/ch-fw-iptables.htm -------------------------------------------------------------------------------- 9.4 A tabela nat (Network Adress Translation) - fazendo nat A tabela nat serve para controlar a tradução dos endereços que atravessam o código de roteamento da máquina Linux. Existem 3 chains na tabela nat: PREROUTING, OUTPUT e POSTROUTING . A tradução de endereços tem inúmeras utilidades, uma delas é o Masquerading, onde máquinas de uma rede interna podem acessar a Internet através de uma máquina Linux, redirecionamento de porta, proxy transparente, etc. Esta seção abordará os tipos de NAT, exemplos de como criar rapidamente uma conexão IP masquerading e entender como a tradução de endereços funciona no iptables. Se sua intenção é ligar sua rede a Internet existem duas opções: Você possui uma conexão que lhe oferece um endereço IP dinâmico (a cada conexão é dado um endereço IP - como uma conexão PPP) então o IP masquerading é o que precisa (veja Fazendo IP masquerading (para os apressados), Seção 9.4.2 ou Fazendo IP Masquerading, Seção 9.4.3.1). Você tem uma conexão que lhe oferece um endereço IP permanente (ADSL, por exemplo) então o SNAT é o que precisa (veja Fazendo SNAT, Seção 9.4.3). -------------------------------------------------------------------------------- Pergunta em Foco pergunta: [22-02-02] linuxdf Danilo Augusto ICQ: 117877447 Como faço para fazer um NAT entre duas placas de rede no linux?o que é preciso ter instalado? Desde já agradeço. -------------------------------------------------------------------------------- resposta 1 [24-02-02] thakilar Wendelmaques Rodrigues Pereira URL: http://www.xlinuxnews.com.br Para fazer NAT você deverá ter o kernel pronto para isso e o pacote IPTables ou IPChains. Você também deverá configurar suas estações para usar tal máquina como gateway. Se você configurou suas estações para usar DHCP você poder habilitar tal configuração dentro do DHCP para fornecer tais informações para as estações. Você também deverá configurar um servidor de nomes no gateway ou em outra máquina ao alcance das estações. -------------------------------------------------------------------------------- ************************************************* De:  Miguel Figueiredo Para:  linux-br@bazar2.conectiva.com.br Assunto:  Re: (linux-br) domínio www Data:  21 Dec 2003 13:13:15 -0300 Em Sáb, 2003-12-20 às 21:15, Thiago Macieira escreveu: > A meu ver, NAT é um "quebra-galho" que só existe porque não tem IP suficiente > para todo mundo na quantidade que cada um quer. Isso estraga com a filosofia > original da Internet, que dizia: > > - - roteamento sem estados (stateless) > - - evitar single-point-of-failure > > Se o seu servidor NAT cai fora do ar, seus outros servidores todos ficam fora. > Se ele reinicia, as conexões que já existiam são perdidas. Além disso, em > muitos casos a conectividade peer-to-peer é quebrada e, a partir daí, nem > toda a Internet vê todo o resto da Internet. Vê porque ele tem suas > desvantagens? > Thiago, Concordo com vc na maioria dos pontos acima. Mas acho que também que se o padrão que foi adotado no protocolo IPv4 não houvesse sido desenvolvido com a flexibilidade de proporcionar recursos como o NAT, hoje a Internet seria ainda mais hostil ou mesmo inviável. Fico imaginando a legião de usuários domésticos e corporativos que hoje usam a internet em seus desktops inseguros e sem a menor noção de segurança. Se os mesmos usuários mesmo atrás de NAT boxes e anti-vírus tem problemas, imagine se todos possuissem IP's públicos? Eu vejo o NAT não só como um recurso pra economizar preciosos e escassos IP's públicos, mas como uma maneira de proteger nossas redes. Acredito que o problema causado pelo Blaster teria sido ainda maior se todos possuissem IP's públicos. Na empresa em que trabalho, estamos na Internet via um Firewall/NAT Box. Nenhuma de nossas estações Windows foi afetadas pelo Blaster... Desde já, quis apenas expressar minha opnião a respeito. Nenhuma intenção de criar um incêndio. No flames please! :) [],s -- Miguel Figueiredo ************************************************* De:  Thiago Macieira Para:  linux-br@bazar2.conectiva.com.br Assunto:  Re: (linux-br) domínio www Data:  Sat, 20 Dec 2003 22:15:33 -0200 -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Anderson Lizardo wrote: >Em Sexta, 19 de Dezembro de 2003 15:50, Thiago Macieira escreveu: >> [...] >> Não recomendo colocar servidor algum atrás de NAT. Mas se for fazê-lo, >> [...] > >Desculpe a intromissão: por que não? Há alguma desvantagem nisso? AFAIK >o NAT é "transparente" para computadores externos à rede. Aqui estamos falando de NAT de servidores. Isso funciona bem até que o servidor precise enviar seu próprio IP para abrir uma conexão secundária, como ocorre muito com FTP. A meu ver, NAT é um "quebra-galho" que só existe porque não tem IP suficiente para todo mundo na quantidade que cada um quer. Isso estraga com a filosofia original da Internet, que dizia: - - roteamento sem estados (stateless) - - evitar single-point-of-failure Se o seu servidor NAT cai fora do ar, seus outros servidores todos ficam fora. Se ele reinicia, as conexões que já existiam são perdidas. Além disso, em muitos casos a conectividade peer-to-peer é quebrada e, a partir daí, nem toda a Internet vê todo o resto da Internet. Vê porque ele tem suas desvantagens? Aliás, existe um RFC que diz exatamente isso e pede que o NAT seja abolido quanto antes possível. Eu vi esse RFC uma vez mas depois nunca mais encontrei. Estou ainda a procura dele. [Não preciso dizer que IPv6 resolve tudo isso e era recomendado pelo RFC] - --   Thiago Macieira  -  Registered Linux user #65028    thiagom (AT) mail (dot) com     ICQ UIN: 1967141  ************************************************* De: Felipe Martins Para: linux-br@bazar2.conectiva.com.br Assunto: Re: (linux-br)IP_Forward e NAT Data: Fri, 4 Feb 2005 13:34:48 -0300 > O que seria exatamente a ativação do ip_forward > (/proc/sys/net/ipv4/ip_forward) e NAT ? A ativacão do ip_forward serve para que vc ative a passagem de pacotes, caso vc faca um router com seu linux vc vai ter qeu usar o ip_forward para repassar os pacotes que "atravessam" a maquina ou de uma placa de rede para outra. O NAT quer dizer Network Address Translation, serve para se mascarar ou trocar um ip, vamos supor que vc tenha 2 intefaces de rede, uma com UM ip publico e outra com uma rede 192.168.0.0/24. Todos eles saem atraves do ip publico, por isso vc vai ter que ativar o ip_forward para repassar os pacotes de uma interafce para outra e tambem o NAT para que seja feita a traducao do IP para outra interface. > Agora a minha duvida é a seguinte, isso que está sendo feito é somente um ip > forward ou um NAT? porque procurei de todas as maneiras e nao encontrei nada > de NAT no servidor dos clientes...somente ip forward ativado > (gateway_enable=YES) seria dizer que o trafego vindo do radio está sendo > passado total para a interface de rede e vice-versa? já que os ips da rede > sao todos roteados para o ip do radio no servidor de nat... Toda e qualquer traducao de IP é NAT independente se for de "publico" para publico, ou privado para privado é NAT, se os pacotes estão passando de uma interface para outra tambem deve ser ativo o IP_FORWARD. Ou seja são os dois. Vamos suporte que eu tenha uma maquina com 2 interfaces de rede,eth0 200.145.76.2 (PUblico), e eth1 192.168.0.0/24 (Privado). Quero que meus clientes saiam para a internet com o IP publico, tenho que habilitar o NAT para sair com traducao para o publico, caso contrario nao sairão, e tambem tenho que habilitar o forward de pacotes (ip_forward) para que os pacotes saiam ... QQ duvida, tamos ai ... -- Felipe Martins Linux System Administrator Tep Solution Provider Mundivox Communications Rua Lauro Muller, 116/Sala 505 RJ - Brasil - 22290-906 Tel.: 55 21 3820-8839 Fax.: 55 21 3820-8844 ************************************************* *************************************************