quarta-feira, 28 de setembro de 2011

SeaMonkey Portable 2.4 Versão portátil do navegador que substitui o Netscape e o Mozilla e conta com leitor de e-mails, notícias e editor HTML Fonte: http://www.superdownloads.com.br/download/58/seamonkey-portable/#ixzz3pDhHl84C

O SeaMonkey Portable é uma versão portátil do projeto que reúne em um só programa um navegador web, cliente newsgroup, editor de HTML e leitor de e-mails.
O programa usa o mesmo renderizador (visualizador) de páginas usado no Mozilla Firefox 3 Em português Bronze, o que o torna compatível com as mesmas páginas abertas no Firefox. Ao mesmo tempo é compatível com algumas das extensões para ele, disponíveis em http://addons.mozilla.org/.

Modo de uso

O modo de uso é simples: feito o download do arquivo, clique com o botão direito do mouse sobre ele e ative a opção Allow executing file as program. Depois, clique duas vezes sobre o arquivo como um executável convencional.
Roda em Windows 2000, XP, Vista, 7
Disponível nos idiomas:  Português de Portugal Português de Portugal  
Download SeaMonkey Portable

Fonte: http://www.superdownloads.com.br/download/58/seamonkey-portable/#ixzz3pDhDobU3

Windows 8 traz novo visual na tela de boot

No lugar dos códigos de BIOS, usuário verá o logotipo do fabricante do PC, mesmo com dual-boot.

Um dos muitos e notáveis novos recursos do Windows 8 é a rapidez com que o sistema inicia. Pode levar menos de 7 segundos para o computador estar pronto para o uso. Mas com tão pouco tempo de inicialização, o que você verá em vez de uma tonelada de textos de aceleração de BIOS?
No Windows 8, a Microsoft acabou com as mensagens de BIOS. Você vê apenas um logotipo do fabricante do seu PC em alta resolução. Como a Microsoft explicou no blog oficial do Windows 8, "o firmware renderiza o logotipo durante o POST ("Autoteste de inicialização", uma sequência de testes de hardware realizada pelo BIOS) e o logotipo persiste na tela mesmo através do boot do Windows. Certamente, estamos fazendo a ponte entre duas experiências (firmware + sistema operacional) para proporcionar uma experiência ..."
("Fazendo a ponte entre duas experiências?" Santa engenharia, Batman!)
A mudança na tela de carregamento não afeta apenas o processo de inicialização. Se você tentar fazer um boot a partir de um drive USB, por exemplo, você não precisará mais se aprofundar em menus BIOS - você poderá usar as opções de boot do dispositivo diretamente no menu de opções do login.
E, se você tem uma configuração dual-boot, também será exibida uma tela simples com as duas opções de sistemas operacionais. Ambos são apresentados diretamente na tela azul Metro. O estranho texto de carregamento será mais ou menos escondido na interface, a menos que você opte por usar o prompt de comando.
Confira o vídeo abaixo para uma explicação visual da nova interface de inicialização:

windows

13/09/2011 13h31 - Atualizado em 13/09/2011 16h25 Microsoft mostra o novo Windows 8 e libera versão para desenvolvedores Novo sistema operacional será compatível com PCs e tablets. Empresa apresentou primeiro tablet com Windows, fabricado pela Samsung. Do G1, em São Paulo imprimir Tablet para Windows (Foto: Divulgação)Nova versão do Windows rodando em tablet com processador ARM (Foto: Divulgação) A Microsoft mostrou detalhes do Windows 8 nesta terça-feira (13), durante abertura da conferência Built, em Anaheim, na Califórnia. O programa, que será voltado não apenas para computadores tradicionais com processadores Intel (PCs), mas também para tablets, trará nova interface voltada para controle por tela sensível ao toque, integração com a chamada "nuvem" da internet e uma loja digital para compra e download gratuito de aplicativos. Veja imagens do Windows 8. A empresa mostrou ainda o primeiro tablet com o sistema operacional, fabricado pela Samsung e batizado de Samsung Windows Developer PC. O aparelho, que inicialmente não será vendido para consumidores, foi distribuído para desenvolvedores presentes na conferência. A versão prévia para desenvolvedores também foi liberada nesta terça. Sem divulgar datas, a companhia confirmou que fará uma fase aberta de testes da versão beta antes do lançamento final do produto. Uma versão de testes gratuita do Windows 8 será lançada à meia-noite desta quarta-feira (13). Steven Sinofsky durante apresentação do Windows 8 (Foto: Reuters)Steven Sinofsky durante apresentação do Windows 8 (Foto: Reuters) Na apresentação do novo sistema operacional, feita pelo presidente da divisão de Windows da Microsoft, Steven Sinofsky, a companhia anunciou que a nova versão não marca uma ruptura em relação ao Windows 7, e que programas criados para o sistema atual serão compatíveis com o Windows 8. A adaptação do Windows tradicional para uso em tablets com arquitetura ARM - anunciada pelo presidente da empresa Steve Ballmer em janeiro - mostra que a Microsoft adota uma estratégia diferente da atual líder deste novo mercado, a Apple. A companhia fundada por Steve Jobs tem sistemas diferentes para linhas de produto distintas, o iPad e os computadores Mac. A Microsoft decidiu fazer um sistema único. Tela inciar do novo Windows, também com o visual 'MetroUI', mais indicado para tablets e computadores operados por telas sensíveis ao toque (Foto: Reprodução)Tela inciar do novo Windows, também com o visual 'MetroUI', mais indicado para tablets e computadores operados por telas sensíveis ao toque (Foto: Reprodução) 'Touch-centric' "É uma evolução. Tudo o que já era bom no Windows 7, ficará melhor no Windows 8", afirmou Sinofsky. Durante a apresentação, o executivo usou um netbook da Lenovo que já havia sido utilizado há 3 anos na apresentação do Windows 7. O sistema antigo ocupava 540 MB de memória RAM da máquina. A nova versão "emagreceu", e utiliza 281 MB. Durante a apresentação, Sinofsky reforçou que a Microsoft quer trazer o Windows para a nova tendência de computadores em formato de tablets, mas sem quebrar as funções que fizeram do Windows 7 o maior sucesso da empresa. O sucessor do Vista vendeu 450 milhões de cópias, e após 3 anos no mercado, finalmente uperou o Windows XP - lançado em 2001 - como sistema operacional mais utilizado para computadores pessoais. Steven Sinofsky durante apresentação do Windows 8 (Foto: Divulgação)Steven Sinofsky durante apresentação do novo Windows 8 nos Estados Unidos (Foto: Divulgação) De acordo com Sinofsky, o programa seguirá duas tendências que surgiram nos últimos anos: telas sensíveis ao toque e equipamentos portáteis, que o usuário não se contenta em apenas transportar, mas quer usar enquanto se movimenta. "Um novo jeito de usar o computador surgiu e queremos que o windows responda a isso", afirmou Sinofsky, que repetiu durante toda a apresentação que a nova interface é "touch-centric", ou seja, voltada para ser operada por toques na tela. "O Windows 7 já estava habilitado para telas sensíveis ao toque, mas nós melhoramos muito no Windows 8. Uma vez que você usa um equipamento com tela sensível ao toque com Windows 8, você vai querer tocar em qualquer equipamento". "Mas haverá um momento em que você pode precisar de um mouse ou um teclado, e o Windows 8 poderá funcionar da maneira tradicional também. É você quem deve escolher a maneira de interagir com o programa", afirmou Sinofsky. Esta é a área de trabalho do novo Windows 8, que utiliza a chamada interface de usuário 'MetroUI', herdada do Zune e atualmente utilizada nos telefones celulares com Windows Phone 7 (Foto: Reprodução)Esta é a área de trabalho do novo Windows 8, que utiliza a chamada interface de usuário 'MetroUI', herdada do Zune e atualmente utilizada nos telefones celulares com Windows Phone 7 (Foto: Reprodução) Tela inicial Se a principal mudança no novo Windows está na interface gráfica, a tela inicial é o que mais chama a atenção. Baseada na chamada "MetroUI", criada originalmente para o tocador de MP3 Zune mas que já foi integrada aos telefones com Windows Phone 7 e ao videogame Xbox, a tela utiliza "blocos" para representar programas e funções do sistema operacional. Michael Angiulo, VP da Microsoft, mostra linha de aparelhos com novo Windows 8 (Foto: Divulgação)Michael Angiulo, VP da Microsoft, mostra linha de aparelhos com novo Windows 8 (Foto: Divulgação) "A tela inicial representa um ponto central para a abertura de programas e para acessar os que já estão funcionando", afirmou Sinofsky. Dentro dos aplicativos, o usuário pode acessar uma barra de tarefas no canto inferior e outra no canto direito --é preciso deslizar o dedo sobre a tela para acessá-las. A do canto direito permite a interação entre aplicativos e o acesso a funções do próprio Windows. Entre as novidades do novo sistema também está uma redução no número de notificações que o usuário recebe do Windows. "Não teremos pop-ups ou relógios em contagem regressiva para fazer as atualizações. Haverá apenas um pequeno aviso na tela de login do usuário", disse Steven Sinofsky. Para os desenvolvedores, o Windows 8 parece trazer mais opções de criação na comparação com um de seus novos concorrentes, o iPad. "O Windows 8 deixa você escolher a linguagem que quer usar para constriuir seu aplicativo", disse Sinofsky. Demonstração de 'boot' de PC em menos de 10 segundos (Foto: Divulgação)Demonstração de 'boot' de PC em menos de 10 segundos (Foto: Divulgação) Uma mudança relevante para desenvolvedores é a forma de disponibilizar programas para usuários. Agora, será possível comprar ou baixar gratuitamente aplicativos de uma loja digital gerenciada pela Microsoft, como a famosa "App Store" da Apple ou o Android Market, do sistema operacional do Google para celulares e tablets. "Queremos manter vivo o ecossistema que já existe em torno do Windows, mas vamos oferecer também esta nova opção para desenvolvedores", disse Sinofsky. A loja de aplicativos também funcionará no esquema de "blocos", por meio dos quais o usuário poderá navegar e escolher seus programas. Gerenciador de tarefas ganha cara nova (Foto: Divulgação)Gerenciador de tarefas, presente desde o primeiro Windows, ganha cara nova (Foto: Divulgação) Tablet ou PC? Durante o evento, a Microsoft apresentou ainda o primeiro tablet compatível com o sistema operacional. Batizado de Samsung Windows Developer PC, o aparelho foi distribuído para os desenvolvedores presentes na conferência. O aparelho, apesar do formato tablet, tem características de um computador tradicional. O sistema conta com uma versão compacta do processador Core i5 da Intel, 4 GB memória RAM, 64 GB para armazenamento e entrada para teclado, mouse e monitor. A tela sensível ao toque tem resolução de 1.366 x 768 pixels.

segunda-feira, 11 de abril de 2011

Configurando o kernel

Todo o processo de mascaramento de endereço IP - NAT - é uma funcionalidade do kernel. Para que seu NAT funcione, o kernel de seu sistema deve ter os seguintes suporte: (opções configuradas na compilação):

* 1.Under General Setup Networking support Sysctl support
* 2.Under Networking Options Network packet filtering TCP/IP networking
* 3.Under Networking Options -> IP: Netfilter Configuration Connection tracking IP tables support Full NAT REDIRECT target support
* 4.Under File Systems /proc filesystem support

Estas configurações são relativas ao kernel 2.4, no kernel 2.2 há algumas modificações. Pois o kernel 2.2 utiliza do ipchains enquanto o kernel 2.4 utiliza do iptables. Ipchains e iptable são assuntos que estão tratados posteriormente.

Caso seu kernel não esteja suportando estas opções, será necessário recompilá-lo. Porém, provavelmente isto não será necessário porque na instalação básica do Linux o kernel já vem com estas configurações.

IP masquerade com o ipchains

A configuração do IP masquerade é muito simples, a configuração do IP masquerade se traduz em dois comandos:

#echo 1 > /proc/sys/net/ipv4/ip_forward

Este comando ativa o ip_forward, funcionalidade do kernel que ativa o roteamento.

hand O comando anterior já era conhecido, veja o próximo comando:

#ipchains -A forward -s 10.1.0.0/16 -d 0.0.0.0/0 -j MASQ

Estes dois comandos devem ser executados toda vez que a máquina for reiniciada. Para evitar este trabalho manual, coloque estes comandos nos scripts de inicialização do sistema, no caso do Conectiva Linux, este arquivo é o /etc/rc.d/rc.local, no caso do Slackware o arquivo é o /etc/rc.d/rc.inet1. Neste exemplo, consideramos a rede privada sendo 10.1.0.0/16 que neste caso será a origem dos pacotes.

O IP masquerade é ativado através do comando ipchains. O ipchains tem uma grande gama de configurações, pois ele pode controlar os pacotes de entrada e saída do sistema, assim o ipchains pode ser utilizado para configurar seu Linux como um filtro de pacotes. Este tipo de funcionalidade do ipchains é bastante utilizado em configurações de firewall. Aqui estaremos estudando apenas as opções apresentadas, para maiores informações veja as páginas de manual do ipchains.

hand Para listar quais regras foram definidas, execute:

ipchains -L

Vejamos agora algumas das opções suportadas pelo ipchains:

* -A : Esta opção adiciona uma nova regra de ipchains, no exemplo anterior a regra é forward.
* -s address/máscara [port[:port]] : Define a origem do pacote para o qual será aplicado a regra do ipchains. Address pode ser um endereço de host, um endereço de rede com sua respectiva máscara. Port deve ser um número ou um nome de porta do arquivo /etc/services. Se nenhum valor for passado, a regra é atribuída a todas as portas. Veja um exemplo de comando onde é definido uma faixa de porta:

#ipchains -A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 1024:65535 -i ppp0 -p 17 -j ACCEPT

Este último comando define que as regras de entrada input será atribuída a apenas as portas de 1024 a 65535. A opção -i define a interface para o qual se aplica a regra.

* -d address/máscara [port[:port]] : Define o destino do pacote para o qual será aplicado a regra do ipchains.
* -j target : Identifica o método de manipulação do pacote, define o tipo de controle do pacote. Neste caso é o MASQ, este tipo define o IP masquerade.

A configuração dos clientes é bastante simples, basta adicionar uma rota padrão nas máquinas clientes. O gateway desta rota será a máquina que está com o IP masquerade configurado. Observe que não há a necessidade de configurar o navegador do cliente.

A este ponto os clientes podem utilizar de outros serviços, não se limitando ao acesso a Internet, o cliente pode utilizar de serviços como ftp, email, ICQ, etc. Pois o mascaramento foi feito para todas as portas do sistema. Logo, a rede fica transparente em relação aos acessos dos clientes.

IP masquerade com o iptables

A finalidade do iptables é a mesma do ipchains. Obviamente, a estrutura do iptables difere do ipchains, porém explicar a forma de trabalho destes filtros de pacotes foge do objetivo deste material, para maiores informações veja um livro específico de segurança em redes.

hand No caso do iptables, antes definir suas regras é necessário carregar seu módulo correspondente.

#modprobe ip_tables

hand É necessário também ativar ip_forward.

#echo 1 > /proc/sys/net/ipv4/ip_forward

hand Agora é hora de adicionar a regra utilizando o iptables.

# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

Uma consideração a ser feita é o uso da interface ppp0. Neste exemplo, estamos considerando que esta máquina tem uma conexão com a Internet através do Protocolo Ponto a Ponto, ou seja, está máquina possui uma conexão discada com a internet e quer dar acessos às demais máquinas da rede.

hand É possível verificar quais regras do iptables foram definidas, para isto execute:

#iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination

Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- anywhere anywhere

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Proxy Transparente com o Squid.

Vimos que o IP masquerade faz com que os serviços oferecidos pelo Linux fique transparente aos seus clientes quando os mesmos estão em uma rede privada, pois não é necessário configurar o navegador [browser] do cliente. Agora observe sobre os seguintes questionamentos:

* Como utilizar o Squid e não precisar configurar o browser do cliente?
* Como utilizar o Squid e não ficar restrito aos protocolos HTTPS, HTTP, FTP e gopher?

A resposta para primeira pergunta é redirecionar a porta 80 para a porta 3128, porta onde tradicionalmente o squid trabalha. A resposta da última reside em utilizar o squid e o IP masquerade conjuntamente. Logo, surge uma nova pergunta:

Como utilizar do IP masquerade e ao mesmo tempo utilizar o Squid para o acesso a WEB?, analise a seguinte idéia: se o IP masquerade estiver rodando e o squid também, o cliente ao solicitar uma página WEB, o mesmo fará uma requisição na porta 80 do gateway onde está o IP masquerade - para isto o cliente deve estar com uma rota padrão definida cujo o gateway será o proxy -, o gateway buscará a página na Internet e entregará para o cliente utilizando o IP masquerade, logo este cliente não utilizará o Squid, pois o Squid utiliza a porta 3128. E, neste caso, nós queremos que o cliente utilize o Squid sem configurar o seu browser, pois assim você está forçando a utilização do Squid e também utilizando das funcionalidades que o squid tem. Haja visto que o IP masquerade não suporta determinadas funcionalidades que o squid comporta.

Logo, a solução é redirecionar a porta 80 para a porta 3128. Pois assim, toda requisição feita na porta 80 do servidor será direcionada para a porta 3128. Então, não será mais necessário configurar o navegador [browser] do cliente. Assim somente será necessário, no caso dos clientes, definir uma rota para o proxy assim como no exemplo anterior. Com relação ao cliente não ficar restrito ao protocolos HTTPS, HTTP, FTP e gopher, basta depois de fazer o redirecionamento de porta, fazer o IP masquerade como explicado anteriormente.

pag_395a.jpg
Fig. 7 - Ilustração do processo de redirecionamento de porta.

Nota: Ao trabalhar com proxy transparente não foi obtido sucesso com o sistema de autenticação do Squid. Por alguma razão ainda desconhecida, o squid não solicita a autenticação de usuário.

Configurando o Proxy transparente no kernel 2.2.
Os comando que se seguem são relativos ao kernel 2.2, se seu sistema utiliza o kernel 2.2, você deve seguir os comandos abaixo.

hand Primeiramente, execute:

#echo 1 > /proc/sys/net/ipv4/ip_forward

hand Bom, este comando você já conhece, vejamos os próximos:

#ipchains -A input -j REDIRECT 3128 -p tcp -d 0/0 80 -l

Este comando redireciona a porta 80 para a porta 3128, porém este atributo está relativo a apenas ao protocolo tcp - observe a opção -p. Além deste protocolo, devemos também redirecionar requisições que utilizam o protocolo udp. Vejamos o exemplo:

hand

#ipchains -A input -j REDIRECT 3128 -p udp -d 0/0 80 -l

Agora utilizaremos o IP masquerade para fazer o serviço de proxy para os demais serviços:

#ipchains -A forward -s 10.1.0.0/16 -d 0.0.0.0/0 -j MASQ -l

Depois de redirecionado as portas, é hora de habilitar o squid para aceitar este redirecionamento de porta, para isto é necessário editar o arquivo /etc/squid/squid.conf e adicionar as seguintes entradas:

hand

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

A localização destas linhas no arquivo squid.conf é diferente para cada distribuição. Portando, procure pela palavra httpd_accel dentro do arquivo, provavelmente existirá algum comentário relacionada a esta entrada. Depois de encontrada, você pode começar a adicionar as novas definições. Reinicie o squid e teste as novas configurações.

Para testar seu proxy transparente, vá até o seu primeiro cliente, adicione uma rota para o servidor proxy e, em seguinte, teste se você está tendo acesso a Internet.

Para saber se você está realmente utilizando o Squid e não o IP masquerade para ter acesso a Internet, verifique o arquivo de log do squid - obviamente depois de acessar a Internet através de um cliente.

Observe que você conseguirá também utilizar de programas como ssh, ftp, ICQ e etc...

Nota: Todos os serviços utilizarão NAT, somente o HTTP (porta 80) utilizará o proxy.

Configurando o proxy transparente no kernel 2.4

Para o kernel 2.4, o comando utilizado não é mais o ipchains, o comando que faz o trabalho de redirecionamento de portas e mascaramento da rede é o iptables.

O iptables, também chamado de netfilter, pode ser baixado do endereço http://netfilter.samba.org, e compilado e instalado na máquina local. Vejamos o comando de redirecionamento de porta utilizando o iptables:

#iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
#iptables -t nat -A PREROUTING -i eth0 -p udp --dport 80 -j REDIRECT --to-port 3128

Neste comando há duas considerações: a interface que está sendo utilizada para fazer o serviço de proxy é a eth0, ou seja, está interface é a interface de saída, ou seja, que dá acesso à outra rede; a outra consideração é relativa a porta onde o squid está escutando, neste exemplo estamos utilizando a porta padrão de comunicação do squid - porta 3128.

hand Agora devemos fazer o IP masquerade através do iptables. O comando será:

#iptables -t nat -A POSTROUTING -o -s 10.1.0.0/16 -d 0.0.0.0/0 -j MASQUERADE

Depois disto altere o arquivo squid.conf da mesma forma que mostrado no exemplo para o kernel 2.2.

Aqui termina nossa configuração do proxy, para maiores informações sobre o iptables veja o endereço http://www.linuxdoc.org/HOWTO/mini/TransparentProxy-4.html . Faça bom proveito!!!!

Utilizando o ipchains no kernel 2.4
O ipchains pode ser utilizado no kernel 2.4. Basta carregar o módulo do ipchains antes de tentar utilizá-lo. Vejamos:

hand

#modprobe ipchains

A partir deste instante você pode utilizar o ipchains no kernel 2.4.

Links indicados

* http://www.squid-cache.org - É o site oficial do Squid - Contém código-fonte e várias documentações.

* http://tldp.org/HOWTO/IP-Masquerade-HOWTO/index.html - É um como-fazer (HOWTO) de como implementar o IP masquerade (NAT).

* http://ldp-br.linuxdoc.org/documentos/comofazer/html/IPCHAINS/IPCHAINS-HOWTO.txt - É um documento como-fazer (HOWTO) que mostra como utilizar a ferramenta ipchains. Em português.

* http://squid-docs.sourceforge.net/latest/html/book1.htm - guia oficial do Squid - de autoria Oskar Person, é um guia bastante completo, englobando vários tópicos, como: instalação, configuração básica, inicialização, configuração do navegador, otimização e proxy transparente. É um documento ideal para aqueles que desejam se aprofundar no Squid. Em inglês.

* http://www.freshmeat.net - site especializado em busca de aplicativos - É um site obrigatório para administradores achar aplicativos, principalmente software livre (GPL), podendo verificar classificação, site oficial, etc.

* http://www.squid-cache.org/Doc/FAQ/FAQ.html - é o FAQ (perguntas e respostas) oficial do squid. Tem informações interessantes sobre a origem, comunicação com os navegadores, arquivos de log, gerenciamento de cache, etc.

Terminologia utilizada neste capítulo

* acl - lista de controle de acesso, utilizado para restringir o acesso ao proxy.

* Cache - é um dispositivo de armazenamento utilizado para se obter maior desempenho em operações de entrada e saída (I/O); a técnica de caching se baseia em armazenar em um cache as informações mais utilizadas, assim evita-se acessar a fonte de informação a toda solicitação de acesso. Geralmente o dispositivo usado para cache é mais veloz que a origem da informação. Por exemplo, para guardar informações mais utilizadas do disco é utilizado um cache em memória (RAM); para armazenar páginas obtidas na rede por um proxy pode-se utilizar memória RAM ou disco rígido.

* FTP - File Transfer Protocol - Protocolo utilizado para transferir arquivos em uma rede de computadores TCP/IP.

* Gopher - é um mecanismo para a recuperação de informações, é semelhante a própria Web, porém aceita somente textos - o gopher não aceita imagens.

* Hacker - Indivíduo hábil em enganar os mecanismos de segurança de sistemas de computação e conseguir acesso não autorizado aos recursos destes, geralmente a partir de uma conexão remota em uma rede de computadores.

* HTTP - HyperText? Transfer Protocol - Protocolo padrão dos servidores Web.

* HTTPS - Protocolo utilizado pelos servidores Web para implementar conexão segura. Este protocolo é implementado por SSL - Secure Socker Layer - e permite que toda transação entre o cliente e o servidor Web seja criptografado.

* ip masquerade -Mesmo que NAT, forma de compartilhamento de Internet através de manipulações no pacote TCP.

* ipchains - Também conhecida como um ferramenta de filtro de pacotes, é utilizada para configurações de firewall e NAT - IP masquerade.

* iptables - Similar ao ipchains; porém específica do kernel 2.4.

* NAT - Network Address Translation. Utilizado para transladar endereços não válidos na Internet para endereços válidos na Internet cuja finalidade é compartilhar o acesso a Internet. A ferramenta que implementa NAT é o ipchains.

* proxy - Intermediário/Procurador, tem a função de compartilhar uma conexão Internet via conexão TCP.

* proxy transparente - Intermediário transparente, configuração de proxy onde não há necessidade de configurar o navegador do cliente.

* URL - Uniform Resource Locator - Utilizado para localizar um recurso específico em uma máquina, é dividido em três partes: O protocolo, o nome da máquina e geralmente um arquivo do sistema remoto. Exemplo:http://www.sistemasabertos.com.br/bem-vindo.html.

Exercícios de Revisão

* 1. Qual a finalidade do Proxy? O Proxy Squid trabalha com quais protocolos? Explique a função de cada um destes protocolos.

* 2. Explique o funcionamento do proxy, relatando como o proxy é capaz de compartilhar seu acesso a Internet com máquinas que não possuem endereço válido na Internet.

* 3. Como implementar restrições ao meu servidor Proxy? Como eu poderia restringir acesso ao meu servidor proxy através de autenticação de usuários?

* 4. Qual é o arquivo de Log do Proxy onde posso obter informações sobre sites acessados e negados?

* 5. O que é proxy transparente? Como criar um proxy transparente? Qual a sua vantagem?

* 6. O que é NAT? Qual ferramenta pode ser utilizada para implementar o NAT? Explique a vantagem do NAT em relação ao proxy.

* 7. Como funciona o NAT(IP Masquerade)?

* 8. Como utilizar o Proxy e o IP Masquerade conjuntamente, sendo que o proxy será utilizado apenas para trabalhar com o protocolo HTTP e o IP Masquerade para trabalhar com os demais protocolos?

* 9. Qual as vantagens e as desvantagens do proxy em relação ao IP Masquerade?

* 10. Qual a diferença entre a ferramenta ipchains e iptables?

O Protocolo PPP

Este documento trata de conexões utilizando interfaces seriais através do protocolo PPP, com enfoque em conexões por linhas telefônicas, tratando aspectos de configuração tanto do cliente quanto do servidor.

pag_405a.jpg

Comunicação Serial - O Protocolo PPP
Para comunicação entre dois pontos, podemos fazer uso do protocolo PPP (Protocolo ponto-a-ponto). A forma mais simples de uso deste protocolo, é utilizando dois computadores conectados um com o outro através de um cabo ligando suas portas seriais.

Outra forma mais complexa e largamente utilizada é através de uma linha telefônica, ou seja, ligando-se cada computador de cada ponta em um modem e os modem's ligados um com outro através da linha telefônica. Cada modem tem a função de possibilitar a comunicação no meio físico (linha telefônica) que originalmente foi projetado para trafegar apenas voz, e não dados. Para se ter uma idéia do PPP, hoje o grande sucesso da Internet é uma conseqüência da bem sucedida conexão ponto a ponto - a conexão discada através de linhas telefônicas.

O protocolo SLIP também é um protocolo para comunicação serial, mas foi superado pelo PPP, uma vez que:

* permite que as pontas da conexão negociem opções como endereço IP e tamanho máximo do datagrama durante a sua inicialização;
* provê uma forma de autenticação de acesso para clientes.
* permite o encapsulamento de diversos protocolos como o IP (Internet), IPX (Novell) ou Appletalk (Apple). Isto é possível graças a um dos componentes do PPP, o protocolo NCP, que tem uma implementação específica para cada tipo de protocolo de rede. Por exemplo, para o IP, o NCP utilizado é o IPCP. (Para saber de mais detalhes, veja o documento http://www.freesoft.org/CIE/Topics/65.htm)

A pilha de protocolo PPP corresponde ao nível de enlace do modelo de referência OSI, e é composta de NCP, LCP e HDLC (para saber mais, veja o endereço http://www.cisco.com/warp/public/779/smbiz/service/knowledge/wan/ppp_auth.htm).

------------------------------------
Outros protocolos acima do nível enlace
------------------------------------
Network-Control Protocol (NCP)
------------------------------------
Link-Control Protocol (LCP)
------------------------------------
High-Level Data Link Control (HDLC)
------------------------------------
Camada Física (tal como EIA-232, V.24, V.35)
------------------------------------

Seguem a descrição de cada protocolo:

* NCP - Na verdade NCP é uma camada composta de vários NCPs, que permitem comunicar com protocolos de redes específicos
o IPCP - Internet Protocol Control Protocol - para encapsulamento do protocolo IP.
o IPXCP - Internetwork Packet Exchange Control Protocol - para encapsulamento do protocolo IPX da Novell.

* LCP - Protocolo de Controle de Conexão. O LCP negocia opções referente à conexão de dados, como por exemplo a Unidade Máxima de Transferência - MTU - que define o tamanho máximo do datagrama que uma das pontas da conexão pode suportar. O LCP também auxilia e monitora a qualidade de conexão que está estabelecida sobre a porta serial.

* HDLC - High-level Data Link - Controle de Conexões de Dados de Alto Nível. Tem como principal funções: o controle de fluxo (não permitir o fluxo de envio de dados maior que o receptor pode suportar), a correção de erros (utiliza um esquema de verificação de erros denominado CRC , geralmente de 16 a 32 bits, é análogo ao dígito verificador utilizado em CPF's) e a ordenação de informações (permitir que todos os frames de dados alcancem o receptor na ordem em que foram enviadas pelo emissor).. Para saber mais sobre o HDLC, veja http://www.freesoft.org/CIE/Topics/122.htm.

Nota: Caso você queira saber mais sobre o protocolo PPP, aconselha-se estudar os documentos referenciados na seção “Links indicados”.

Detectando e configurando o modem

pag_407a.jpg
Fig. 1 - Esquema de interação aplicação > Dispositivo > Kernel > Hardware.

Depois que o modem estiver fisicamente conectado ao computador, o próximo passo é descobrir em qual porta serial o modem foi detectado. Na maioria dos PC's, temos por padrão quatro portas seriais e estas são associadas a arquivos de dispositivos (ttyS*), com endereços de porta e IRQ padrões, conforme a tabela:

----------------------------------------------------------
nome do dispositivo Endereço da Porta IRQ
----------------------------------------------------------
/dev/ttyS0 (COM 1) 3F8 4
/dev/ttyS1 (COM 2) 2F8 3
/dev/ttyS2 (COM 3) 3E8 4
/dev/ttyS3 (COM 4) 2E8 3
----------------------------------------------------------

hand Para sabermos quais portas seriais o kernel está reconhecendo, execute:

#dmesg | grep ttyS*

hand Depois da porta ser encontrada é interessante criarmos um link simbólico padrão denominado modem apontando para o arquivo de dispositivo. Para nosso exemplo vamos considerar que o modem foi encontrado na porta ttyS2 (com3).

#ln -s /dev/ttyS2 /dev/modem

O link é interessante pelo fato de que alguns softwares, como padrão, procuram pelo link /dev/modem.

O próximo passo é configurar a porta. Se a velocidade do seu modem for menor do que 38400 e se você estiver usando um dos pares padrões de IRQ/endereço de porta serial, não há mais o que fazer. No entanto, se precisar mudar algumas definições, você pode fazê-lo com o utilitário setserial. Veremos mais à frente mais detalhadamente o uso do comando setserial.

Nota: O assunto sobre dispositivos seriais no Linux é um assunto extenso. Se o leitor quiser saber mais, visite http://ldp-br.linuxdoc.org/documentos/comofazer/html/Serial-HOWTO/Serial-HOWTO.pt_BR.html

setserial

O comando setserial tem como objetivo obter informações e configurar as portas seriais do Linux. O setserial informa sobre configurações de I/O e IRQ de uma porta serial em uso.

Durante o processo de boot, apenas as portas COM 1 a COM4 são inicializadas, estas irão usar valores padrões de I/O e IRQ. O programa setserial pode ser usado para mudar estas configurações padrões. Tipicamente o comando setserial é colocado para ser executado no arquivo /etc/rc.d/rc.local. Caso nenhum parâmetro seja especificado, o setserial irá imprimir o tipo de porta (i.e., 8250, 16450, 16550, 16550A, etc.), a porta de I/O do hardware, o IRQ, a taxa de baud, e algumas variáveis operacionais.

hand O setserial tem uma sintaxe de consulta assim:

setserial dispositivo

As seguintes opções de consulta são as mais utilizadas:

* -a : Esta opção faz com que seja mostrada todas as configurações de uma porta específica. Por exemplo, setserial -a /dev/ttyS0.
* -b : Esta opção mostra apenas as informações essenciais da configuração da porta serial. As informações mostradas são: o endereço de I/O, o número de interrupção e o tipo de UART (chip responsável pela conversão de dados em bits seriais e vice-versa). Este tipo de comando é muito utilizado na inicialização da máquina; note que é a mesma mensagem retornada pelo comando dmesg | grep tty. Veja o exemplo:

# setserial -b /dev/ttyS0
/dev/ttyS0 at 0x03f8 (irq = 4) is a 16550A

* -G : Mostra as opções utilizadas para se configurar o dispositivo serial tal como está configurado. Veja o exemplo:

# setserial -G /dev/ttyS0
/dev/ttyS0 uart 16550A port 0x03f8 irq 4 baud_base 115200 spd_normal skip_test

Note que neste exemplo, o resultado deste comando informa exatamente como este dispositivo poderia ser configurado com as configurações atuais:

#setserial /dev/ttyS0 uart 16550A port 0x03f8 irq 4 baud_base 115200 spd_normal skip_test

Através do setserial também é possível alterar as configurações para um dispositivo serial, porém a sintaxe de consulta é ligeiramente diferente (não se utilizam as opções anteriores):

setserial dispositivo .

Abaixo está explicado os principais parâmetros que podem ser utilizados pelo comando setserial:

port número_da_porta

Este parâmetro é utilizado para configurar a porta de I/O. É a área da memória RAM onde os dados serão armazenados pelo hardware. Por isso muitas vezes é também chamado de “porto”, pois é o local onde os dados são despejados e carregados.

irq número_irq

A opção irq configura o IRQ do hardware. É o número de referência que o hardware serial irá utilizar para solicitar pedidos de interrupção para a CPU. A combinação irq e o número da porta devem ser únicos para o computador. Se existirem dois dispositivos com mesmo irq e mesmo número de irq, ocorre um conflito de hardware, impedindo o funcionamento normal de um dos dispositivos. Para verificar quais são as atuais combinações das irq+portas utilizados pelos dispositivos do seu computador, você deve prestar atenção nas mensagens da BIOS de sua máquina, e listar os arquivos /proc/ioports e /proc/interrupts. Caso você não tenha uma noção boa sobre interrupções e portas I/O de hardware, procure bibliografia especializada sobre assuntos de hardware, o qual não são abordados aqui.

uart tipo_uart

Esta opção é utilizada para configurar o tipo UART. Os tipos permitidos são: 8250, 16450, 16550, 16550A, 16650, 16650V2, 16654, 16750, 16850, 16950, e 16954. Usar o tipo UART none irá desabilitar a porta. UARTs (Transmissor e Receptor Assíncrono Universal ou Universal Asynchronous Receiver Transmitter) são chips localizados na placa serial do PC (caso se utilize uma) ou na placa mãe. A função da UART pode ser executada também por chips que executam outras funções. O propósito da UART é converter dados para bits, enviá-los pela linha serial e reconstruir os dados novamente na outra extremidade da linha. UARTs lidam com dados divididos em pedaços de bytes, os quais são convenientemente o tamanho dos caracteres ASCII. Os modelos de UART ajudam no desempenho de I/O. A mais comum delas é a UART 16550A, que tem um ótimo desempenho comparados aos outros.

autoconfig

Quando está opção é ativada, o setserial fará com que o kernel estabeleça uma configuração automática para a porta serial. A porta I/O será corretamente configurada, e o kernel irá tentar determinar o tipo UART, e caso o parâmetro auto_irq esteja configurado, o Linux irá tentar automaticamente determinar o IRQ. As opções port, auto_irq e skip_test deve ser configurado separadamente, ou seja, o parâmetro autoconfig não fará as configurações automaticamente destes parâmetros.

spd_hi

Usa a velocidade de 57.6kb/s quando o programa de comunicação solicita 38.4kb/s. Esta opção é utilizada para aumentar a velocidade na conexão.

spd_vhi

Usa 115kb/s quando o programa de comunicação requer 38.4kb/s. Esta opção é utilizada para aumentar a velocidade na conexão.

spd_shi

Usa 230kb/s quando o programa de comunicação requer 38.4kb/s. Esta opção é utilizada para aumentar a velocidade na conexão.

spd_warp

Usa 460kb/s quando o programa de comunicação requer 38.4kb/s. Esta opção é utilizada para aumentar a velocidade na conexão.

spd_normal

Usa 38.4kb/s quando o programa de comunicação requer 38.4kb/s. Esta opção é utilizada para aumentar a velocidade na conexão.

#setserial -a /dev/modem

hand A saída ficará parecida com a seguinte:

/dev/modem, Line 1, UART: 16550A, Port: 0x02f8, IRQ: 3
Baud_base: 115200, close_delay: 50, divisor: 0
closing_wait: 3000
Flags: spd_normal skip_test

Esta saída nos fornece um IRQ igual a 3 e usa a porta 2F8. A taxa de BAUD é a maior velocidade disponível nesta porta serial, em particular ela é geralmente 115200. Note que não há taxa de baud - este número é atribuído quando um aplicativo abre a porta. A maioria dos programas abre a porta solicitando uma taxa de baud de 38400, mas você pode usar o setserial para configurar uma taxa maior. O seguinte comando irá configurar a porta de forma que qualquer solicitação de 38400 resultará em uma taxa de baud real de 57400:

#setserial /dev/modem spd_hi

Também é possível usar o setserial para configurar os números do IRQ e da porta. Para alterá-las use o comando setserial da seguinte forma:

#setserial /dev/modem port 0x3A8 irq 10

Comunicando com o modem

Uma vez que o seu modem estiver devidamente instalado, você pode começar a comunicar com ele através de comandos baseados em strings, que de certa maneira é nada amigável. Várias strings são padrões para todos modens, outras são proprietárias. Através de strings enviadas para o modem você pode configurar, inicializar, programar, discar (por tom ou pulso), etc; enfim controlar completamente o modem.

Existem vários utilitários para comunicação com o modem. Os mais conhecidos no Linux são o kermit e o minicom. O primeiro é totalmente em linha de comando (veja a seção de links indicados para saber mais) e o segundo é baseado em uma tela em modo caractere. Neste documento iremos somente lidar com o minicom. Para chamá-lo através da linha de comando, digite:

hand

#minicom

Se tudo estiver funcionando como planejado, o minicom abriu a porta do modem e está esperando por suas instruções. No menu do minicom vá até configuração da porta serial, esta permite alterar a configuração do dispositivo serial - por padrão o minicom estará usando o link /dev/modem.

Como é mostrado na tela inicial do minicom:

* Pressione Crtl+A e depois Z, para exibir a lista de comandos.
* Selecione o comando M para inicializar o modem.
* Clique em yes, e depois de alguns segundos, se tudo ocorre bem, você verá a mensagem de OK na tela, a partir deste momento você poderá comunicar diretamente com o modem através das strings.
* Segue abaixo um exemplo da string de discagem:
* ATDT 5232323

Esta string - ATDT - tem como parâmetro o número do telefone a ser discado. A string ATDT faz ligações multifreqüenciais (tom), suportadas em linhas digitais e analógicas; para fazer discagem decádica (pulso), suportadas em linhas analógicas use a string ATDP. Se você desejar saber mais sobre como são as strings de comunicação, veja o endereço http://www.zoltrix.com/support_html/modem/USEMODEM.HTM, que cita as strings para o modem da marca Zoltrix, mas também apresenta strings padrões.

pag_413a.jpg
Fig. 2 - Interação do usuário com modem através do minicom.

A partir deste instante, você pode até mesmo discar diretamente para o seu ISP - Provedor de Serviços Internet. Quando uma conexão é feita, a palavra "login:" aparecerá. Depois de digitado o provedor solicitará "password:". Assumindo que o ISP está esperando para fazer uma conexão ponto a ponto (PPP), você receberá uma sequência de caracteres contendo o endereço IP do ISP e o endereço que está sendo atribuído a você para esta sessão. Depois de algumas informações inúteis na tela, o ISP começa a comunicar com você seguindo o protocolo PPP, sobre o qual o minicom nada sabe. Veremos mais adiante como estabelecer uma comunicação PPP.

Nota: O minicom fornece um controle de baixo nível para o modem, porém existem outros utilitários mais amigáveis como o wvdial que é usado na linha de comando. Para interfaces gráficas existem o kppp, gnome-ppp, etc. Estes dois últimos possuem uma interface gráfica bastante amigável e são geralmente bastante adequadas para usuários finais.

PPP no Linux

Instalação do PPP

No Linux, a implementação do PPP mais popular e praticamente a única é a de autoria de Paul Mackerras, com homepage oficial em http://www.samba.org/ppp. Na distribuição conectiva, este mesmo pacote é disponibilizado em formato rpm, facilmente instalável através do comando:

hand

#rpm -i ppp*.rpm

Este pacote, além de documentação e arquivos de configuração, também instala os seguintes arquivos:

* chat - um utilitário que interage com o modem, discando através de scripts.
* pppd - o daemon ppp, que veremos a utilidade mais a seguir.

Caso você queira instalar a versão através do código-fonte do pacote oficial, leia o arquivo README.linux. A instalação básica é baseada nos comandos:

#./configure
#make
#make install

Arquitetura

Você pode utilizar o linux para discar de um modem para outro e assim estabelecer uma conexão dial-up (discar para). Assim como também é possível receber ligações de outros modens, em uma configuração denominada dial-in (receber ligações).

O Linux também utiliza um daemon denominado pppd tanto no cliente quanto no servidor, que interage com um módulo ppp (arquivo ppp.o), que por sua vez interage com o modem através do kernel. Veja o esquema:

pag_415a.jpg
Fig. 3 - Estrutura do cliente/servidor PPP.

O módulo ppp.o

Para que tenhamos acesso ao serviço PPP, temos que possuir um kernel com suporte a módulos e ter o módulo ppp.o, que é responsável pela implementação de todo a pilha de protocolo PPP no linux. Na verdade, este módulo também faz uso de outro módulo, chamado slhc, responsável pela otimização através da compactação de cabeçalhos TCP/IP (header compression).

Este módulo é obtido através dos fontes do kernel, para saber se o módulo foi criado após a compilação, liste o diretório /lib/modules//net. Por exemplo:

hand

# ls /lib/modules/2.2.17-14cl/net/ppp.o

hand Uma vez confirmado a existência do módulo, já é permitido carregar o módulo ppp.o. Para isto execute:

# modprobe ppp.o

Neste exemplo acima, apenas mostramos como verificar e testar para ver o suporte PPP de seu kernel. Na prática isto não é necessário, porque isto já é feito automaticamente quando se usa um discador.

O daemon pppd

A primeira ação que o pppd toma após a sua inicialização é negociar as diversas características da conexão com o usuário remoto usando o LCP. Depois desta primeira fase, o pppd irá então negociar os parâmetros com a outra ponta da conexão usando o IPCP, o protocolo de controle de IP. Uma vez que não especificamos qualquer endereço IP em particular para o servidor pppd, ele tentará obter o endereço da máquina local através da pesquisa junto ao servidor DNS local. Logo, ambos anunciarão o seu endereço, um para o outro. Porém, é sempre interessante que o endereço seja definido no servidor e o mesmo seja passado dinamicamente para o cliente PPP.

pag_416a.jpg
Fig. 4 - Comunicação PPP e as funções do Daemon PPPD.

Depois das considerações acima, é hora do servidor pppd preparar a camada de rede da máquina para uso da conexão PPP. Inicialmente ele configura a interface de rede PPP como uma conexão ponto a ponto, usando para isto a interface ppp0 para a primeira interface ppp ativa. Depois de configurado a interface ppp0, o servidor pppd irá, então, adicionar uma entrada na tabela de roteamento que apontará para a outra ponta da conexão, geralmente uma rota padrão definida através da opção defaultroute do pppd.

hand Para inicialização através da linha de comando devemos seguir a sintaxe do pppd que segue abaixo:

pppd [options]

* tty-device: Determina o nome do dispositivo serial no qual o protocolo PPP trabalhará.
* speed : Determina a velocidade de transmissão da porta escrita em bits por segundo
* options : Determina opções de linha de comando

Existe um enorme número de opções que podem ser passado para o pppd. Existem também arquivos que armazenam opções, segue abaixo estes arquivos:

* /etc/ppp/options: Este arquivo é usado para armazenar opções de PPP válidos para todo o sistema [system-wide]. Este arquivo sempre é pesquisado quando o pppd é inicializado. Logo, este arquivo deve ser utilizado para passar parâmetros globais, uma vez que ele pode restringir determinados privilégios de clientes.

* .ppprc: É usado para estabelecer opções PPP personalizadas, para isso ele deve ser criado no diretório pessoal do usuário. Ele permite que cada usuário tenha suas próprias configurações padrões.

* /etc/ppp/options.device : Estabelece opções PPP para um dispositivo serial específico. Por exemplo, options.ttyS1 estabelece opções PPP /dev/ttyS1

Nota: A ordem de prioridade das configurações relativa a estes arquivos é: /etc/ppp/options.device ,.ppprc e por último /etc/ppp/options.

Abaixo estão algumas das principais opções que podem ser passado para o pppd, vejamos: /dev/modem

Este será necessariamente um link para o porta de seu modem. Portanto, geralmente será um link para um dos dispositivos: /dev/ttyS0(COM1), /dev/ttyS1(COM2), /dev/ttyS2(COM3).

* 38400 : Está será a velocidade de comunicação.

* crtscts : Ativa o controle de fluxo por hardware.

* defaultroute : Adiciona um rota padrão na tabela de roteamento do kernel. O roteador padrão será a máquina da outra ponta da conexão PPP. Esta rota é retirada automaticamente quando a conexão PPP é terminada. Está opção é utilizada por padrão, para não utilizar desta funcionalidade utilize da opção nodefaultroute.

* auth : Esta opção faz com que o PPP exija autenticação.

* connect script : Ao inicializar a conexão PPP, o script específico script será executado.

* persist : Está linha faz com que o pppd tente restabelecer a conexão caso a conexão venha a cair.

* noipdefault : Define que o endereço IP local será fornecido pelo servidor PPP.

* Endereço-IP-Local:Endereço-IP-Remoto : Este parâmetro é muito utilizado no servidor para definir o endereço IP da interface PPP do servidor e para definir o endereço IP que o cliente irá obter. Neste caso o endereço IP local será o endereço do servidor PPP e o endereço remoto será o endereço IP do cliente PPP. Como o cliente irá receber o endereço IP do servidor, o cliente não deve passar o endereço IP como parâmetro e sim aguardar que o servidor atribua o endereço. Logo, é interessante que o cliente tenha a opção noipdefault apesar de não ser necessariamente.

* login : Faz com que o PPP utilize do arquivo de senhas do Linux.

Servidor PPP dial-up

Conforme já citado anteriormente, o pppd pode tanto atuar discando (dial-up) quanto recebendo ligações (dial-in). Iremos nesta seção mostrar como o pppd atua como servidor dial-up.

Configurando um Servidor PPP

hand Para configurar o pppd, basta adicionar uma linha no arquivo de inicialização /etc/rc.d/rc.local. Segue abaixo a linha que deve ser adicionada:

pppd /dev/ttyS1 115700 crtscts

Este comando inicia o daemon PPP e o conecta ao dispositivo serial ttyS1.

As opções:

* 115700: estabelece a velocidade desta linha dedicada em bps.
* crtscts
* abre o controle de fluxo de hardware Request To Send (RTS) e o Clear To Send (CTS). O controle de fluxo de hardware usa pinos RTS E CTS na interface serial para controlar o fluxo de dados.

hand Para o cliente PPP a linha de comando seria similar, com a adição da opção defaultroute, veja abaixo:

pppd /dev/ttyS1 115700 crtscts defaultroute

* defaultroute : Este parâmetro adiciona automaticamente uma rota padrão para o servidor PPP remoto. uma rota definida, esta opção é ignorada.

É importante atentarmos para o fato de que estas configurações são para servidores e cliente de linhas dedicadas. Atualmente é mais comum máquinas serem conectadas via linhas seriais dial-up. Este último tipo de configuração é mais complexo.

Inicialização do pppd dial-up

Podemos iniciar o daemon pppd através da linha de comando, porém é interessante que isto seja realizado na inicialização do sistema. Em algumas distribuições é fornecido um script para inicialização do serviço. Na verdade, a utilização de scripts é freqüente em servidores.

Em distribuições Red Hat e Conectiva temos o script que já vem pré-configurado em /etc/sysconfig/network-scripts/ifup-ppp, este script é utilizado para inicializar automaticamente o serviço. Ele é controlado através de ferramentas como o linuxconf e kppp.

Servidor dial-up sob demanda

É possível configurar o pppd para discar para um provedor sob demanda, ou seja, de acordo com a solicitação de tráfego externo a partir da rede local. Conforme o esquema:

pag_420a.jpg
Fig. 5 - Servidor Dial-Up sob demanda.

Neste esquema acima, o servidor dial-up irá discar automaticamente para um servidor dial-in quando existir alguma solicitação de uma estação da rede local. O servidor dial-up irá atuar como um roteador para as estações da rede local. Vejamos como isto pode ser feito:

* 1) Configure o servidor dial-up com as seguintes opções:

demand
idle 180

A opção demand faz com que conexão ppp seja feita sob demanda, ou seja, a conexão é automaticamente quando haver necessidade de tráfego externo pelo modem.

A opção idle configura o tempo em que o link será desconectado quando não houver mais pacotes a serem transmitidos através dele. Ou seja, se não houver mais solicitações de tráfego externo, quanto tempo ele ficará aguardando pelo próximo pacote; caso este pacote não venha antes deste intervalo, o modem é automaticamente desconectado.

* 2) Configure o servidor para realizar ipmasquerading (nat)

hand

# ipchains -A forward 10.1.0.0/16 -j MASQ

Aqui mostramos como utilizar o ipchains para realizar o NAT. Para o iptables é um comando semelhante. Neste exemplo consideramos habilitar o NAT para a rede 10.1.0.0, com máscara de sub-rede 255.255.0.0.

* 3) Habilite o roteamento

hand

# echo 1 > /proc/sys/net/ipv4/ip_forward

* 4) Configure as estações com roteador padrão o servidor ppp dial-up.

hand No Linux, você deve executar:

#route add -net 0.0.0.0/0 gw 10.1.0.1

Neste exemplo estamos considerando que o roteador padrão (a interface de rede do servidor dial-up sob demanda) tem número IP 10.1.0.1.

Caso você deseje saber mais sobre servidor dial-up sob demanda, consulte o endereço http://www.tldp.org/LDP/nag2/x7297.html#AEN7379.

Configuração de servidor Dial-In

Na configuração do servidor PPP é importante atentarmos para as suas necessidades. No lado servidor, o mesmo necessita de um modem e um processo escutando este modem, o servidor também necessita do daemon pppd. No lado cliente, o mesmo necessitará de um modem, um aplicativo para fazer discagem e, assim como no servidor, o daemon pppd também é necessário no cliente.

Configurando atendimento do modem

Para configurar o atendimento do modem, é importante relembrar alguns conceitos básicos do Unix. Lembrem-se que toda comunicação com dispositivos é realizada através de arquivos especiais de dispositivo (os arquivos do diretório /dev, lembra?). O modem não poderia ser diferente. Ele utiliza os arquivos /dev/ttyS*, onde "*", pode ser 0, 1, ... n, onde n é o número de portas serias que você possui. Cada modem deverá estar associado a uma das portas seriais de seu sistema.

Uma vez conectado os modens em cada porta serial, é necessário um aplicativo que abra o arquivo serial, "ouvindo" qualquer atividade e "respondendo" às solicitações recebidas. Este tipo de aplicativo é um tipo de tty. O termo tty na linguagem unix é um aplicativo de terminal, do qual você pode enviar e receber caracteres. Um tipo de tty apropriado para a comunicação com modem é o aplicativo mgetty.

Nota: o Unix é um sistema que tem um suporte a comunicação serial através de terminais. Hoje é mais popular o uso da Interface Gráfica com sistemas em plataforma Cliente/Servidor, porém ainda existem muitos sistemas com comunicação serial, baseados em telas em modo caractere, principalmente onde a largura de banda é limitada.

Utilizando o mgetty

Para utilizarmos o mgetty para atender uma ligação vinda de um modem, temos que ter em mente os seguintes problemas:

* Onde inicializar o mgetty?
* Qual nível de execução o mgetty será executado?
* Uma vez o mgetty atender uma ligação e esta cair, o mgetty deverá ser chamado novamente?

pag_423a.jpg
Fig. 6 - Funcionalidades mgctty.

Nota: Com esta configuração e com um cliente utilizando o minicom,este cliente terá disponível um terminal remoto através da interface serial e poderá executar comandos caso tenha uma conta de usuário na máquina remota. Em outras palavras, só é necessário utilizar o mgetty para configurar um servidor de terminal remoto através de interface serial.

Para inicializarmos o mgetty iremos utilizar o arquivo /etc/inittab, neste arquivo é definido o processo que escuta o modem. Note que o arquivo /etc/inittab é o arquivo de configuração do init - programa que inicia todos os outros processos do sistema. Cada entrada no inittab, além da primeira que define o nível de execução padrão, é uma sequência de quatro campos separados por dois-pontos. O programa que fica escutando a porta serial do modem chama-se mgetty, para que o mgetty escute o modem e abra uma sessão com a máquina remota, adicione a seguinte entrada mgetty através da linha:

md:3:respawn:/sbin/mgetty ttyS1 -D /dev/ttyS1

Neste arquivo os campos são separados por ":", segue abaixo a descrição de cada campo

* md : Define um nome de referência, deve ser único no arquivo e no máximo ter dois caracteres.
* 3 : Diz ao programa init para que o programa mgetty seja inicializado apenas no nível de execução 3 do init.
* respawn: Responde indefinidamente às solicitações. Caso uma conexão caia, este parâmetro faz com que o mgetty novamente esteja esperando por uma nova conexão.
* /sbin/mgetty ttyS1 -D /dev/ttyS1 : Este é o programa a ser chamado pelo init e, consequentemente, ser executado. Este é o programa que tem como finalidade ficar escutando o modem e atender a uma solicitação de conexão. Observe que estamos considerando que o modem foi detectado na porta /dev/ttyS1

hand O próximo passo é fazer com que o init leia novamente o seu arquivo de configuração, para isso digite:

#init q

Caso tudo ocorra bem, seu modem será inicializado e o mgetty estará esperando por uma ligação telefônica. Porém é preciso fazer com que o serviço pppd seja inicializado no servidor quando houver uma tentativa de conexão ao servidor. Há ainda a necessidade de passarmos alguns parâmetros para o pppd como por exemplo: endereço IP local da interface "ppp0", endereço IP que o cliente irá receber, etc.

Nota: Com esta configuração e com um cliente utilizando o minicom, este cliente terá disponível um terminal remoto através da interface serial e poderá executar comandos caso tenha uma conta de usuário na máquina remota. Em outras palavras, só é necessário utilizar o mgetty para configurar um servidor de terminal remoto através de interface serial. Entretanto, para configurar o servidor PPP dial up, o mgetty é apenas um pré-requisito.

Como inicializar o serviço pppd no servidor?

Para que duas máquinas comuniquem fazendo uso do protocolo PPP, o serviço do PPP deve ser ativado tanto no cliente como no servidor. No caso do cliente, o próprio discador utilizado fará esta tarefa. Já no caso do servidor existe duas maneiras:

* 1.Criar um shell para os usuários dial-up.
* 2.Utilizar do AutoPPP? do programa mgetty

pag_425a.jpg
Fig. 7 - Processo de inicialização do PPPD no Servidor.

Em ambos os casos, a finalidade desta configuração é inicializar o serviço pppd no servidor PPP.

Criando o shell para usuários PPP.

Para configurar este servidor é necessário criarmos usuários dial-up. Depois de criar o usuário edite o arquivo /etc/passwd, configurando a seguinte linha:

hand

lima:x:502:502:Joao Paulo de lima:/tmp:/etc/ppp/ppplogin

Depois que este usuário efetuar logon, através da linha acima, é direcionado para o diretório /tmp. O sistema então inicia o login shell do usuário lima. Neste caso, o login shell é o /etc/ppp/ppplogin, que atualmente é um script shell que inicia o servidor PPP, Segue abaixo um exemplo:

hand

#!/bin/sh
mesg n
stty -echo
exec /usr/sbin/pppd -detach passive crtscts modem

Este shell do usuário tem como finalidade inicializar o serviço pppd no lado do servidor, pois no lado do cliente o próprio "discador" fará esta tarefa.

Quando a sessão login for aberta, o pppd será iniciado do lado servidor, haja visto que deve haver o processo pppd ativo nos dois lados da conexão.

Não precisa necessariamente o script ser igual a este, você pode criar o seu. Neste exemplo temos:

* mesg n : Previne os usuários de enviar mensagens para este terminal com programas como o talk, write e wall.
* stty -echo : Desabilita o comando echo.
* exec : Esta instrução do shell chama outro processo, este processo que é requisitado denomina-se processo filho. Logo, verificamos que esta instrução é utilizada para iniciar o serviço pppd.

Na última linha não é necessário passar parâmetro de velocidade, na verdade, esta velocidade da linha é obtida da configuração da porta. Assim, você pode usar o script para outras portas seriais.

Abaixo encontra-se as opções que ainda não foram estudadas:

* modem : Diz ao PPP daemon para monitorar o indicador do modem Data Carrier Detect - DCD. Ao monitorar o DCD, o sistema local pode dizer se o sistema remoto deixou cair a linha. Isto é útil porque nem sempre é possível para o sistema remoto fechar gentilmente a conexão.
* passive : Diz ao pppd para esperar até que ele receba do sistema remoto um pacote de Protocolo de Controle de Link - LCP - válido. Normalmente, o PPP daemon tenta iniciar uma conexão enviando os pacotes LCP apropriados. Se ele não receber uma resposta apropriada do sistema remoto, ele deixa cair a conexão. Usar a opção passive dá tempo para o sistema remoto iniciar o PPP daemon. Com a opção passive estabelecida, o pppd mantém a linha aberta até que o sistema remoto envie um pacote LCP.
* auth : Solicita ao sistema remoto sua autenticação. Esta não é uma autenticação de nome de usuário e de senha exigida pelo login, e não substitui a segurança do login. A segurança PPP é uma segurança adicional projetada para autenticar o usuário e o computador na outra extremidade da conexão PPP.

Usando o AutoPPP? do programa mgetty

Esta forma de configuração é menos trabalhosa que a anterior. O AutoPPP? é um parâmetro do programa mgetty que tem a função de inicializar o serviço pppd toda vez que for feita uma requisição de conexão na porta serial do servidor PPP.

A primeira definição é relativa ao usuário dial-up, o shell deste usuário deve ser um shell falso, para isto edite o arquivo /etc/passwd:

hand

lima:x:502:502::/tmp:/bin/false

Novamente estamos usando o usuário lima como exemplo, logo este será o usuário dial-up.

O arquivo /etc/mgetty+sendfax/login.config

Neste arquivo procure pela entrada AutoPPP?, a linha que contém esta entrada está comentada. Vejamos o exemplo:

hand

#/AutoPPP/ - a_ppp /usr/sbin/pppd auth -chap +pap login debug

hand Descomente esta linha e deixe-a da seguinte forma:

/AutoPPP/ - a_ppp /usr/sbin/pppd noauth debug

Configurando os parâmetros do pppd

Os arquivos que se seguem são arquivos de configurações do daemon pppd, ou seja, são usados para passar argumentos para o serviço pppd.

hand O arquivo /etc/ppp/options Edite este arquivo e coloque as seguintes opções:

#vi /etc/ppp/options
modem
crtscts

hand Caso você queira atribuir dinamicamente o endereço IP dos servidores de nomes para seus clientes PPP, adicione as seguintes linhas neste arquivo:

ms-dns 10.1.0.101
ms-dns 10.1.0.102

Neste exemplo estamos considerando como servidor primário a máquina 10.1.0.101 e como servidor secundário a máquina 10.1.0.102.

Como as opções já são conhecidas daremos prosseguimento à nossa configuração.

O arquivo /etc/ppp/options.ttyS1

Seguindo a nossa sequência de configuração, o próximo passo é criar o arquivo que define as opções específicas para uma porta serial. Este arquivo deve ser criado dentro do diretório /etc/ppp e deve ter o nome options e sua extensão deve ser o dispositivo serial a ser configurado. Neste exemplo devemos criar o options.ttyS1, haja visto que nosso modem foi detectado na porta /dev/ttyS1. Neste arquivo iremos definir o endereço IP que as respectivas interfaces do servidor e do cliente irão receber. Vejamos um exemplo deste arquivo:

10.3.0.50:10.3.0.51

Adicionado estes parâmetros, você garante que o cliente irá receber o endereço "10.3.0.51", enquanto o servidor ficará com o endereço "10.3.0.50". Este IP poderá ser visualizado depois que a conexão for estabelecida, para isto utilize do comando ifconfig

Pronto seu servidor PPP está configurado e pronto para receber ligações. Veja a configuração do cliente para discar para o servidor criado por você.

A este nível de configuração o seu servidor também está apto a também receber conexões de clientes Windows.

Caso você deseje saber mais sobre servidor PPP dial-in, consulte um dos endereços: http://www.swcp.com/~jgentry/pers.html ou http://www.yolinux.com/TUTORIALS/LinuxTutorialPPP-Dial-in.html.

Segurança PPP

Em conexões PPP existem dois tipos de protocolos de autenticação. O processo pelo qual uma máquina convence a outra de sua identidade é chamado de autenticação. Isto envolve o primeiro par [peer] que emite seu nome ao outro, junto com algum tipo da informação secreta que poderia somente vir do usuário autorizado. Esta autenticação tem como finalidade evitar possíveis ataques externos através das portas seriais.

O primeiro tipo de protocolo denomina-se PAP - Password Authentication Protocol - e o Challenge Handshake Authentication Protocol - CHAP. O PAP trabalha com um sistema de senhas simples, enquanto o CHAP é um sistema que usa strings criptografados e chaves secretas para a autenticação. Logo abaixo será mostrado como utilizar o método de autenticação PAP.

Autenticação PAP

pag_430a.jpg
Fig. 8 - Esquema de autenticação PPP usando PAP.

Na autenticação PAP, o cliente emite seu nome e uma senha em texto limpo para o servidor PPP, este irá fazer ou não a autenticação do cliente. Através da autenticação PAP você pode estabelecer quais usuários podem acessar o servidor PPP, pode estabelecer quais interfaces PPP (interface ppp0, ppp1, etc) podem ser inicializados do lado do servidor e ainda pode estabelecer qual endereço IP o cliente está autorizado a usar. Veja agora como utilizar desta tecnologia:

hand Edite o arquivo /etc/ppp/options e adicione a seguintes entradas:

auth
login
+pap

Nota: caso já exista definido neste arquivo a opção noauth, retire-a e adicione, como mostrado acima, a opção auth.

hand Edite o arquivo pap-secrets

lima * senhadolima 10.3.0.51

A sintaxe deste arquivo pode ser deduzida da seguinte forma:

usuario interfacePPP senhadousuario Endereço IP do cliente

Logo, observamos que o primeiro campo é o usuário autorizado, o segundo define a interface PPP que pode ser inicializada no servidor, o * permite que seja inicializada qualquer interface PPP (ppp0, ppp1, etc), o terceiro campo é a senha deste usuário e o último campo é o endereço IP que o cliente está autorizado a utilizar.

Nota: No cliente PPP também é necessário alterar o arquivo pap-secrets para que haja uma sincronia na negociação PPP, entretanto a maioria dos discadores (wvdial, kppp, etc) alteram este arquivo automaticamente.

É importante saber se o PPP exige algum tipo de autenticação. Observamos durante algumas experiências que somente é necessário autenticação quando há alguma rota definida no servidor PPP.

Configurando o Cliente dial-up PPP

Primeiramente, o usuário deve ser capaz de discar o número de telefone do servidor e executar qualquer procedimento de login necessário. Em seguida deve-se inicializar o pppd com os seguintes parâmetros:

hand

#pppd /dev/ttyS1 115700 connect "chat -v dial-server" crtscts modem defaultroute

As opções que ainda não conhecemos estão apresentadas abaixo:

* connect: Esta opção identifica o comando usado para ativar a conexão de linha serial. No exemplo, o comando está entre aspas porque contém caracteres com espaços em branco. O comando completo chat -v dial-server.
* chat: É usado para comunicar com dispositivos. A opção -v faz com que o chat anexe informações sobre possíveis defeitos através do serviço syslogd. Neste exemplo, dial-server é um script que o chat utiliza para controlar sua interação com o modem e o servidor remoto.

Fazendo conexões através do wvdial

O utilitário wvdial permite fazer conexões PPP, ou seja, através dele podemos discar para o nosso ISP e conectarmos na Internet. Um dos fatores interessantes para utilizarmos o wvdial é o fato de que inicializa automaticamente o daemon PPP. O wvdial utiliza um arquivo de configurações onde passamos configurações gerais como número de telefone, login, password, etc. Este arquivo situa-se no diretório /etc e chama-se wvdial.conf.

Existe um programa que vem junto ao pacote do wvdial que é utilizado para gerar um exemplo do arquivo /etc/wvdial.conf, este programa também detecta onde o modem está instalado.

pag_432a.jpg
Fig. 9 - Interação do wvdial com o modem e o processo de discagem.

Nota: O pppd não tem a função de discagem e quem faz isso é o wvdial, ou outro programa discador, como por exemplo o chat.

hand Vejamos um exemplo deste comando:

#wvdialconf /etc/wvdial.conf

Scanning your serial ports for a modem.

Port Scan<*1>: Ignoring ttyS0 because /dev/mouse is a link to it.
ttyS1<*1>: ATQ0 V1 E1 -- OK
ttyS1<*1>: ATQ0 V1 E1 Z -- OK
ttyS1<*1>: ATQ0 V1 E1 S0=0 -- ATQ0 V1 E1 S0=0
ttyS1<*1>: ATQ0 V1 E1 -- ATQ0 V1 E1 ttyS1<*1>: ATQ0 V1 E1 -- ATQ0 V1 E1 ttyS1<*1>: ATQ0 V1 E1 S11=55 -- ATQ0 V1 E1 S11=55
ttyS1<*1>: ATQ0 V1 E1 +FCLASS=0 -- ATQ0 V1 E1 +FCLASS=0
ttyS1<*1>: Modem Identifier: ATI -- 5601
ttyS1<*1>: Speed 2400: AT -- OK
ttyS1<*1>: Speed 4800: AT -- OK
ttyS1<*1>: Speed 9600: AT -- OK
ttyS1<*1>: Speed 19200: AT -- OK
ttyS1<*1>: Speed 38400: AT -- OK
ttyS1<*1>: Speed 57600: AT -- OK
ttyS1<*1>: Speed 115200: AT -- OK
ttyS1<*1>: Max speed is 115200; that should be safe.
ttyS1<*1>: ATQ0 V1 E1 -- OK
Port Scan<*1>: S3

Found a modem on /dev/ttyS1.
ttyS1: Speed 115200; init "ATQ0 V1 E1"

Depois de executado este comando, o wvdialconf irá gerar no arquivo algumas entradas padrões no arquivo /etc/wvdial.conf. Observe que a saída do exemplo acima indica que foi encontrado um modem na porta /dev/ttyS1.

hand Vejamos as novas definições do arquivo /etc/wvdial.conf:

[Dialer Defaults]
Modem = /dev/ttyS1
Baud = 115200
Init1 = ATZ
Init2 = ATQ0 V1 E1
; Phone =
; Username =
; Password =

A instrução entre colchetes define uma sessão, esta instrução é utilizada quando é necessário ter mais de uma conta de acesso, assim você pode definir outras sessões com outros telefones, logins, etc. No nosso exemplo só temos a sessão defaults que foi gerado pelo wvdialconf. Vamos analisar agora os parâmetros que seguem no exemplo:

* init1 e init2 : Estes parâmetros são utilizados para enviar strings para o modem, estas string tem como objetivo a inicialização do modem. Estas strings são enviadas seguindo uma numeração. Por padrão é utilizado a string ATZ para o init1.

* Dial command: É utilizado para denominar qual tipo de discagem será usado pelo modem, ATDT define discagem por tom (reconhecido somente por centrais digitais), ATDT define discagem por pulsos (reconhecido por centrais analógicas e digitais). Existe ainda a string ATX3DT que é utilizado por clientes que estão conectados a uma central telefônica privada, neste caso a discagem seria por tom, mas você poderia ainda passar a string ATX3DP para discagem em central telefônica utilizando comunicação por pulsos (analógica).

* Modem : Define a porta serial onde situa o modem instalado, neste caso optamos por um link simbólico que aponta para o arquivo de dispositivo real.

* Baud : Velocidade da porta serial modem.

* Phone : Define o número do telefone com o qual se deseja realizar a conexão.

* Username : Define o login do usuário.

* Password : Define a senha do usuário

Você pode discar de outra máquina para testar o seu servidor PPP, para isto descomente a linhas do arquivo referente ao Phone, Username, Password. Caso você for testar o servidor PPP configurado na seção Configurando o Servidor Dial-up, utilize usuário lima que nos configuramos anteriormente para ser usuário dial-up. Antes de discar você deve definir a string utilizada para a ligação, esta string deve ser escolhida de acordo com a sua linha telefônica, logo você deve adicionar no arquivo o parâmetro Dial command = ATDT por exemplo.

hand Depois de configurar o arquivo, o próximo passo é executar o wvdial:

#wvdial

Neste caso você não necessita passar parâmetro para o wvdial, pois no arquivo só existe uma sessão, a sessão [default].

hand Agora iremos criar uma nova conta de acesso no arquivo /etc/wvdial.conf, vejamos o exemplo:

[Dialer Defaults]
Modem = /dev/ttyS1
Dial command = atdt
Baud = 115200
Init1 = ATZ
Init2 = ATQ0 V1 E1
Phone = 2616617
Username = fulano
Password = senhadofulano

[Dialer isp]
Modem = /dev/ttyS1
Dial command = atdt
Baud = 115200
Init1 = ATZ
Init2 = ATQ0 V1 E1
Phone = 9999999
Username = beltrano
Password = senhadobeltrano

Observe que uma nova sessão foi definida, a sessão isp. Com esta flexibilidade, você pode ter várias contas de acesso a Internet.

hand Para discar para a conta isp basta executar:

#wvdial isp

O parâmetro isp nada mais é que a sessão definida no arquivo wvdial.conf. Em seguida, o wvdial inicializará o modem e depois o pppd, estabelecendo a conexão ppp.

Sempre que estabelecer uma conexão PPP, surgirá obviamente uma interface chamada ppp0 - primeira interface PPP ativa. É possível obter informações sobre ela através do comando ifconfig, veja abaixo:

hand

#ifconfig ppp0

A saída deste comando nos fornece o IP da máquina local e da máquina remota respectivamente. Ao efetuar uma conexão PPP, você, no momento, terá acesso apenas a máquina remota e não a toda rede a qual a máquina remota pertence, para ter acesso a esta rede, no caso de um provedor a Internet, deve-se atribuir uma rota padrão para está máquina remota. Isto é feito através do comando route. Muitos dos aplicativos, principalmente gráficos, já definem a máquina remota como o roteador padrão.

Não se esqueça que você deve ter um DNS para fazer a resolução de nomes - Veja o capítulo sobre DNS.

Existem outros aplicativos bem mais simples de serem usados. Como exemplo: linuxconf, kppp, gnome-ppp, etc. Obviamente eles não têm a mesma flexibilidade que os apresentados neste capítulo, mas para quem quer apenas uma simples conexão com a Internet, não deixa de ser uma boa opção.

Links indicados

* http://www.samba.org/ppp/index.html - Site oficial do pacote ppp - é o site oficial do pacote ppp, uma implementação do protocolo PPP, criado por Paul Mackerras. É onde você pode obter os fontes da localização oficial.
* http://www.cisco.com./univercd/cc/td/doc/cisintwk/ito_doc/ppp.htm - É um documento bem resumido de autoria da empresa CISCO, inclusive com questões de revisão no final do capítulo.
* http://www.ietf.org/rfc/rfc1661.txt - (RFC) Point to Point Protocol - rfc de alto nível técnico, uma das que descrevem como o PPP funciona.
* http://www.networksorcery.com/enp/protocol/PPP.htm - contém uma boa descrição de como é composto o protocolo PPP e uma lista bastante extensa de todos as RFCs que referenciam o PPP.
* http://www.tldp.org/HOWTO/PPP-HOWTO/index.html - Linux PPP Howto, escrito por Corwin Light-Williams e Joshua Drake - é um como-fazer bastante extenso, que informa como utilizar o PPP no Linux. Vários detalhes são abordados, inclusive sobre: o que deve estar habilitado no kernel, quais são os arquivos de configuração, principais problemas e como resolvê-los.
* http://www.tldp.org/LDP/nag2/x-087-2-ppp.html - Capítulo do livro sobre PPP do famoso livro “Network Administration Guide”, por Olaf Kirch e Terry Dawson. Esta é a segunda edição bastante melhorada desde a primeira, e é uma alternativa a mais ao Linux PPP HOWTO.
* http://www.freesoft.org/CIE/Topics/122.htm - Documento que explica o formato do frame HDLC, de como é checado erros (CRC).
* http://br.tldp.org/documentos/comofazer/html/Serial-HOWTO/Serial-HOWTO.pt_BR.html - É um como-fazer de autoria de Greg Hankins, traduzido em português pela empresa Conectiva. Explica sobre vários equipamentos seriais suportados no Linux, os programas que interagem com os dispositivos seriais e uma seção de problemas e repostas.
* http://members.tripod.com/~vkalra/hdlc.html - É um tutorial sobre HDLC, utiliza uma linguagem técnica avançada, cita alguns detalhes do protcolo e contém várias referências bibliográficas sobre HDLC.
* http://www.sangoma.com/hdlc.htm - É um tutorial sobre HDLC que utiliza uma linguagem bem simples, bem resumido e objetivo.
* http://www.columbia.edu/kermit/ - É o site oficial do kermit, um utilitário para comunicação direta com o modem, de mesma funcionalidade que o minicom, porém é totalmente por linha de comando. Foi desenvolvido e é mantido pela Universidade de Columbia, é um site que tem uma documentação muito interessante sobre o assunto.
* http://www.tldp.org/LDP/LG/issue38/gentry.html - É um artigo que trata especificamente do uso do PPP com servidor de atendimento de chamadas (dial-in).

Terminologia utilizada neste capítulo

* CHAP -Challenge Handshake Authentication Protocol - Outra forma de autenticação utilizado pelo PPP(forma mais segura que o PAP, pois utiliza de criptografia)
* Cliente PPP - Máquina que faz requisições ao servidor PPP, geralmente utiliza de um discador para este propósito
* dial-in - é o termo utilizado para o processo de recebimento de discagens.
* dial-out - ou dial-up, é o termo utilizado para o processo de discagem para provedor.
* Dispositivo de comunicação serial - qualquer dispositivo que pode ser associado uma porta serial, geralmente um modem.
* HDLC -High-level Data Link - Controle de Conexões de Dados de Alto Nível. É um protocolo de transmissão de dados utilizado na camada 2 (enlace), conforme o modelo OSI. Tem como principal funções: o controle de fluxo (não permitir o fluxo de envio de dados maior que o receptor pode suportar), a correção de erros (utiliza um esquema de verificação de erros denominado CRC , geralmente de 16 a 32 bits, é análogo ao dígito verificador utilizado em CPF's) e a ordenação de informações (permitir que todos os frames de dados alcancem o receptor na ordem em que foram enviadas pelo emissor).
* ISP - Provedor de acesso a Internet.
* LCP - Link Control Protocol - Protocolo de Controle de conexão. O LCP negocia opções referente à conexão de dados, como por exemplo a Unidade Máxima de Transferência - MTU - que define o tamanho máximo do datagrama que uma das pontas da conexão pode suportar. O LCP também auxilia emonitora a qualidade de conexão que está estabelecida sobre a porta serial.
* NCP - Network Control Protocol - Protocolo de Controle de Rede. O NCP permite comunicar com protocolos de redes específicos.
* PAP -Password Authentication Protocol -Forma padrão de autenticação utilizado pelo PPP (envia senha em texto puro)
* PPP - Protocolo Ponto-a- Ponto. Sua finalidade é viabilizar conexões TCP/IP sobre linhas seriais.
* pppd -Daemon do PPP. O daemon pppd é responsável pela negociação das conexões. A negociação inclui diversas formas de autenticação e coleta de informações.
* Servidor PPP - Denominado como a máquina que recebe requisições em porta serial, no caso servidor PPP Dial-up este irá receber as ligações.
* tty - é o termo utilizado em Linux para denominar terminais em modo caractere. Toda comunicação serial em geral é realizada através de um tty.

Exercícios de revisão

* 1.Em que situação é utilizado PPP sob demanda? Quais seriam os passos para se implementar um servidor PPP sob demanda? Quais opções deveriam ser configuradas no servidor PPP?
* 2.Suponha que você deseje discar para um provedor através do utilitário minicom. Uma vez executado o minicom e o minicom ter reconhecido o modem sem problemas, qual ou quais comandos necessários para: - discar para o seu provedor por uma linha analógica direta; - discar para o seu provedor por uma linha digital direta; - discar para um provedor por uma linha dentro de uma central telefônica digital, deve-se discar o O antes, para liberar a linha;
* 3.Por que o PPP pode ser considerado como um pilha de protocolos? Quais protocolos que o PPP se compõe? Qual a função de cada um?
* 4.O PPP daemon deve ser utilizado tanto no cliente quanto no servidor. Esta afirmação é verdadeira? Explique o porquê.
* 5.Qual é a função do mgetty em um servidor ppp? Onde ele é configurado?
* 6.Para configurar um servidor de terminal remoto o que é necessário? Qual aplicativo deve ser utilizado no cliente para acessar o servidor de terminal remoto?
* 7.Quais as diferenças entre um servidor de terminal remoto e um servidor PPP?

Visão Geral de Redes TCP/IP

Este capítulo é uma introdução aos conceitos do protocolo TCP/IP, tal como números IP, portas TCP, serviços, roteamento, etc.


Introdução
TCP/IP
O protocolo TCP/IP foi originado da rede ARPANET, que foi criada como uma rede de pesquisa criada pelo Departamento de Defesa dos Estados Unidos, que pouco a pouco, centenas de universidades e repartições públicas foram sendo a ela conectadas através de linhas telefônicas privadas, resultando à atual rede mundial de computadores, a Internet.

O objetivo do TCP/IP era conectar várias redes locais, por isso o nome Internet, ou seja, inter-redes ou entre-redes. De vários anos de trabalho de pesquisa, surgiu o modelo de referência TCP/IP, graças ao seus dois principais protocolos: o TCP, que significa Protocolo de Controle de Transporte; e o IP que significa Protocolo Internet.

Na verdade, o acrônimo TCP/IP refere-se a uma grande família de protocolos que funciona em conjunto para permitir uma comunicação completa. Veremos mais adiante, que o conjunto de protocolos TCP/IP além de englobar os protocolos TCP e IP, também engloba outros protocolos, tais como o ICMP (Internet Control Message Protocol) e o DNS (Domain Name Service), que permite a troca de mensagens de controle e a tradução de nomes (www.sistemasabertos.com.br) em endereços numéricos (200.193.79.1), respectivamente.

O projeto TCP/IP teve sua origem por volta de 1969, porém, esta rede tornou-se operacional somente a partir de 1975 quando sua funcionalidade já estava comprovada. Por volta de 1983, o novo modelo de referência TCP/IP estava completamente padronizado e disponível publicamente, permitindo sua rápida popularização. O sucesso foi tão grande que hoje o protocolo TCP/IP está totalmente disseminado tanto na Internet quanto nas redes locais privadas. O TCP/IP tornou-se praticamente uma "língua" (protocolo) universal das redes de computadores.

Conceitos básicos
&&ilustrar cliente, servidor, roteador ou gateway e firewall?&&

Todo computador em uma rede TCP/IP é denominado hospedeiro [host]. Para entender melhor uma rede, é necessário saber classificar cada host que a compõe, onde cada um desenvolve tarefas variadas. Através das funções de cada hospedeiro, é que podemos classificá-los nas seguintes denominações: servidor, cliente, roteador ou gateway e firewall.

A característica primordial que determina a classificação de um hospedeiro em servidor está no fato de que o mesmo deve possuir serviços que aguardam solicitações vindas de outros hospedeiros, de forma a responder com algum dado. Por exemplo, um servidor Web retornará o conteúdo de uma página Web quando algum cliente requisitá-lo.

Fig. 1 - Ilustração Cliente/Servidor.

Um cliente solicita determinados serviços ao servidor. Por exemplo, um cliente poderia estar executando um editor de texto e enviar uma solicitação para que um servidor de impressão imprima seu texto.

Um roteador tem a função de repassar pacotes de uma rede para outra através da checagem dos endereços de destino. Dentro desta funcionalidade o roteador funciona como uma ligação entre uma rede e outra, portanto geralmente utiliza de tecnologias e protocolos diferentes.



Fig. 3 - Ilustração de um firewall filtrando uma rede interna.

Por exemplo, pode existir firewall entre a rede interna e a externa que assegura que nenhum cliente fora da rede interna terá acesso às informações de um banco de dados.

A verdade é que, em uma rede TCP/IP, um hospedeiro pode ser qualquer combinação desses itens descritos anteriormente. Um mesmo computador pode ser um servidor para um serviço ao mesmo tempo que atua como cliente de outro e ao mesmo tempo ele pode estar realizando roteamento de pacotes de uma rede para outra.

O exemplo mais fácil de visualizar esta miscelânea de hosts com papéis variados é a Internet; que é formada uma grande quantidade variada de máquinas atuando como servidores, clientes, roteadores e firewalls.

O Protocolo IP
O protocolo IP - Protocolo Internet - é a chave da interligação de redes que utilizam tecnologias e hardwares diferentes. Uma das características mais importantes do Protocolo IP é a divisão da informação a ser transportada de um ponto ao outro em fragmentos denominados datagramas.

Todo datagrama é dividido em cabeçalho e corpo. No cabeçalho encontra-se informações como: origem do pacote, destino do pacote, e informações específicas do protocolo pertinente a este pacote; já o corpo do datagrama é utilizado para armazenar os dados, ou seja, ao mandar um email a concatenação do corpo dos datagramas no destino formará a mensagem original do email enviada pela origem.

O datagrama tem uma estrutura padronizada pelo protocolo IP que é independentemente do hardware utilizado. A principal vantagem do IP reside no fato de transformar redes fisicamente separadas com diferentes hardwares em uma rede funcionalmente homogênea. O protocolo IP, consequentemente, requer uma forma de endereçamento independente do hardware, para isto existe o que chamamos de endereçamento IP que será explicado mais à frente no tópico sobre endereços IP.



Fig. 4 - Ilustração da transferência de dados através de datagrama.

Para saber mais sobre a estrutura do datagrama IP, acesse o endereço http://www.cisco.com/univercd/cc/td/doc/cisintwk/ito_doc/ip.htm, ou consulte uma bibliografia especializada.

O Protocolo TCP

O protocolo TCP - Protocolo de Controle de Transmissão - tem como objetivo controlar os dados quando estão em tráfego, de forma que todos dados enviados de uma máquina devem ser divididos em pacotes pelo emissor, podendo trafegar por caminhos distintos e finalmente serem remontados corretamente pelo receptor. O protocolo também cuida da perda de pacotes no trajeto entre um ponto ao outro, solicitando a retransmissão do pacote ao remetente.

Vejamos um exemplo: duas redes compartilham um roteador , ponto de passagem entre duas redes. Se várias máquinas da mesma rede enviar pacotes para uma outra máquina da outra rede, obviamente estes pacotes devem passar pelo roteador e se a quantidade de tráfego gerada for intensa, além da capacidade de repasse do roteador, este poderá ficar sem espaço livre no buffer, sendo incapaz de retransmiti-lo. O protocolo IP resolve este problema simplesmente descartando pacotes. Porém, o protocolo TCP faz com que a máquina cheque a integridade dos dados e solicita a retransmissão dos pacote faltantes em caso de erros. Assim, toda vez que um pacote é enviado na rede, o protocolo TCP cuida das confirmações de recebimento. Portanto, é dito que o protocolo TCP constrói um serviço confiável sobre o protocolo IP.

Outra característica importante do TCP é o controle de fluxo. Ao enviar dados na rede, a parte receptora indica à parte transmissora a quantidade de bytes que podem ser recebidos após os últimos dados recebidos, assim evita-se ultrapassar o limite da capacidade de buffer da máquina receptora.

Teoria de protocolo de rede

Para toda comunicação existe uma linguagem. Comunicação é impossível sem algum tipo de linguagem ou código preestabelecido. Em redes de computadores, estes códigos de comunicação são chamados de protocolos. Logo, em uma comunicação de computadores existem regras bem definidas e formalizadas, ou seja, é através dos protocolos que os dados conseguem fluir de modo organizado e sem perdas.

Outro aspecto importante no processo de comunicação é a hierarquia de protocolo. A hierarquia de Protocolo é baseada em uma série de camadas ou níveis que são dispostas uma em cima da outra, de forma semelhante a uma pilha de protocolos. O número, o nome, o conteúdo e a função de cada camada difere de uma rede para outra. Porém, o objetivo de cada camada é oferecer determinados serviços para as camadas superiores, tornando se um filtro e conversor de dados para a camada superior.

No âmbito lógico da rede, a camada n comunica com a camada n da outra máquina. As regras e convenções usadas nessa comunicação são chamadas de protocolo. Resumidamente, um protocolo é um conjunto de regras sobre o modo como se dará a comunicação entre as partes envolvidas. Assim, ao comunicar-se com determinada máquina existem regras que devem ser respeitadas conjuntamente. Caso isto não venha a acontecer , a comunicação será dificultada e em alguns casos pode impossibilitá-la, ocorrendo o que chamamos de violação do protocolo.

Veja o exemplo de uma comunicação baseada em camadas:


Fig. 5 - Comunicação através de camadas.

O conjunto de camadas de um protocolo é chamada de arquitetura de rede. Entre cada par de camadas adjacentes existe uma interface. A interface consiste nas operações e serviços que a mesma deve prover para camada superior a ela. A especificação de uma arquitetura deve conter informações suficientes para permitir que um desenvolvedor crie um programa ou construa um hardware de cada camada de modo que ela transmita-o corretamente ao protocolo adequado.

As operações e serviços que ocupam as mesmas camadas em diferentes máquinas são chamadas de pares - peers. Em outras palavras, são os pares que se comunicam usando o protocolo. Na verdade, os dados não são transferidos diretamente da camada n de uma máquina para a camada n de outra máquina. Cada camada transfere os dados e as informações de controle para a camada imediatamente abaixo dela, até a última camada ser alcançada. Abaixo da camada 1 está o meio físico através do qual se dá a comunicação propriamente dita.

O objetivo deste material não é aprofundar muito na extensa teoria de redes, mas sim dar embasamento teórico para a prática de administração de redes. Veja os links indicados e a bibliografia para saber mais sobre este assunto.

O modelo OSI

O modelo de referência OSI - Open System Interconnection - é conhecido como o modelo de padronização de tecnologias de redes de computadores . O modelo OSI teve como objetivo estabelecer uma regra e direcionamento no desenvolvimento de modelos de arquiteturas de redes.

O modelo OSI define 7 camadas. Estas camadas estão dispostas da seguinte forma:

---------------------------
APLICAÇÃO
---------------------------
APRESENTAÇÃO
---------------------------
SESSÃO
---------------------------
TRANSPORTE
---------------------------
REDE
---------------------------
ENLACE DE DADOS
---------------------------
FÍSICA
---------------------------

Física
Esta camada tem como função adaptar o sinal de comunicação com o meio de transmissão. Esta camada possui acesso físico ao meio de transmissão e, portanto, trata de fatores como especificação elétrica, mecânica e outros fatores físicos que fazem a interface entre o equipamento e o meio de transmissão.

Enlace
Esta camada trata a organização dos dados em pacote. Quando um pacote é enviado, esta camada é responsável pelo último empacotamento antes da transmissão. Quando um pacote é recebido, este verifica, em primeira instância, a integridade do pacote. Se o pacote apresentar erros, este será descartado.

Rede
Responsável pela tabela de roteamento, portanto esta camada controla o envio de pacotes para os dispositivos corretos e deve garantir que o pacote chegue ao dispositivo correto.

Transporte
Esta é uma camada intermediária que tem a função de corrigir as eventuais deficiências provenientes do nível rede.

Sessão
Esta camada fornece serviços como controle de comunicação (diálogo), gerenciamento de token (sinalização) e gerenciamento de tarefas.

Apresentação
Esta camada tem como objetivo manipular dados antes do envio ao próximo nível, ou seja, neste nível várias transformações são feitas, por exemplo: criptografia, compressão, etc.

Aplicação
Este nível oferece os meios de aplicação para que seja possível a comunicação através do protocolo OSI. Nesta camada são definidos as funções de gerenciamento e mecanismos que tem como finalidade dar suporte ao desenvolvimento de aplicações em rede para o usuário.

Modelo TCP/IP

O protocolo TCP/IP - Protocolo de Controle de Transporte/Protocolo Internet - foi desenvolvido na plataforma UNIX e, atualmente, é o protocolo mais utilizado no mundo.

O protocolo TCP/IP, na verdade, é uma pilha de protocolo, ou seja, não está limitado ao TCP e o IP. A sigla TCP/IP se refere aos dois principais protocolos: o TCP, que trabalha na camada de transporte, e o IP, que trabalha na camada de rede.

O protocolo IP permite a comunicação de dois pontos da rede sem a necessidade destes estarem no mesmo meio físico. Já o TCP fornece uma conexão confiável sobre o IP.

Vejamos como está estruturado o protocolo TCP/IP:


---------------------------
APLICAÇÃO
---------------------------
TRANSPORTE
---------------------------
INTERNET
---------------------------
ACESSO DE REDE
---------------------------

&&colocar o modelo OSI do lado deste diagrama&&

Acesso de Rede

Similar a camada física do protocolo OSI. Tem a função de determinar as características elétricas e mecânicas do meio de transmissão. Enfim, especificar os aspectos físicos da comunicação.

Internet

Nesta camada o IP é o protocolo mais importante. Esta camada, assim como o protocolo IP, tem a função de tornar as redes homogêneas entre si, ou seja, tem a função de reunir redes com arquiteturas diferentes, fazendo com que sejam transparentes. Transporte

Nesta camada encontra-se os protocolos TCP e UDP - Protocolo de Datagrama de Usuário. Esta camada tem a responsabilidade de transmitir e controlar o envio de dados.

Aplicação

Aplicação é a camada que interage com o usuário. Exemplo de insteração são: o smtp(envio de email), o telnet(terminal remoto), o ftp (transferência de arquivos).


Fig. 6 - Comparação do modelo TCP/IP com o OSI.

Para saber mais sobre o funcionamento do protocolo TCP/IP, acesse o endereço: http://www.cisco.com/univercd/cc/td/doc/product/iaabu/centri4/user/scf4ap1.htm.

RFC

Os protocolos do conjunto TCP/IP são definidos por documentos chamados de Request for Comments (RFC). A princípio, as RFCs definem os padrões dos protocolos TCP/IP, entretanto vários outros tipos de documentações foram acrescentadas, incluindo artigos e dicas de como gerenciar uma rede TCP/IP. As RFCs podem ser criadas e enviadas por qualquer pessoa desde que seja aprovado pela Internet Engineering Steering Group (IESG). As RFCs podem ser acessadas através do endereço http://www.ietf.org/rfc.html.

As RFCs mais conhecidas que definem padrões associados à rede TCP/IP são:

* RFC 768 - User Datagram Protocol
* RFC 791 - Internet Protocol
* RFC 792 - Internet Control Message Protocol
* RFC 793 - Transmission Control Protocol

O endereço IP

Como comunicar e/ou localizar uma máquina na Internet? Todo hospedeiro tem um endereço exclusivo. O endereço IP na versão 4 (ipv4), que é atualmente o mais utilizado, é um número de 32 bits. Você está acostumado a ver endereços de Internet como www.sistemasabertos.com.br e www.linux.org; porém, na verdade, este nome está referenciado a um endereço IP que permite acesso a determinada máquina sem a necessidade de decorar números. Um endereço IP é normalmente representado por quatro números decimais, um para cada porção de 8 bits, separados por pontos. Logo, o endereço IP é um número formado por 4 octetos, cada octeto com 8 bits.

TIP atualmente está em teste e futuramente em uso o IP v6, de 6 octetos e com capacidade de endereçar muito mais endereços que o atual IP v4. Para saber mais sobre o IP versão 6, acesse o endereço http://www.cisco.com/univercd/cc/td/doc/cisintwk/ito_doc/ipv6.htm.

Por exemplo, uma única máquina pode ter um endereço de IP geralmente expresso de 3 formas:

* 149.76.12.4 = notação decimal de quatro partes, é a mais utilizada e mais legível;
* 0x954C0C04 = notação hexadecimal;
* 10010101.01001100.00001100.00000100 = notação binária. Note a quantidade de 32 bits, divididos em 4 octetos (conjuntos de 8 bits) e a correspondência entre cada octeto com o valor decimal equivalente.

Número IP: identificando rede e máquina

Simplesmente por razões de tornar o controle da atribuição de números IP mais organizada, os criadores do TCP/IP resolveram dividir o número IP em duas partes:

* 1.Número de rede: este número está contido em um ou mais octetos do número IP. Este número indica em que rede o hospedeiro está conectado. Cada rede deve ter endereço único.
* 2.Número de máquina: este é o número de identificação da máquina na rede. É através deste número que localizamos um determinado host na rede, este número também deve ser único na rede.

Assim, o número IP possui uma estrutura do tipo . Por exemplo, poderíamos ter um número IP com 13.121.111.1, onde 13 é o número que identifica a rede e 121.111.1 identifica um host desta rede.

Classes de endereços IP

Ao iniciar a distribuição dos números IP para empresas, os criadores do TCP/IP perceberam que era vantajoso definir blocos de endereços contíguos, no sentido de facilitar a administração. Verificaram também que as empresas tinham portes diferentes, e com isto surgiram as classes, que além de definir tipos de redes de tamanhos diferentes. Quando alguma empresa necessitava de números IP, era fornecido um bloco contíguo de endereços IP de uma classe adequada à sua necessidade, baseada na quantidade de hosts a serem identificados com números IP.

Foram definidos 5 tipos de classes: A, B, C, D e E. Para se identificar uma classe, procurou-se definir algo que seria melhor implementado em nível de hardware. Por isto, cada classe, foi definida baseando-se no primeiro dos quatro bytes do número IP, como segue:

Classe Valor binário do 1o. byte Faixa de valores expresso em binário do 1o. byte Faixa de valores expresso em decimal do 1o. byte
A 0XXXXXXX 00000000 a 01111111 0 a 127
B 10XXXXXX 10000000 a 10111111 128 a 191
C 110XXXXX 11000000 a 11011111 192 a 223
D 1110XXXX 11100000 a 11101111 224 a 239
E 11110XXX 11110000 a 11110111 240 a 254

Assim, para se identificar se um número IP pertence à classe A basta saber o valor do bit do primeiro byte. Caso seja 0 pode-se concluir imediatamente que refere-se à classe A, caso contrário deve-se testar o segundo bit. Se o segundo bit for 0 pode-se concluir imediatamente que refere-se à classe B, caso contrário deve-se verificar o terceiro bit, e assim por diante. Note então que para se identificar uma classe, basta saber qual a posição do bit 0 no primeiro byte.

Quando este valor binário é convertido em valor decimal, podemos compreender melhor a faixa de endereços IP definidos por cada classe. Por exemplo, todo endereço IP de classe A tem o primeiro byte localizado na faixa de 0 a 127. Vejamos mais sobre cada classe:

Classe A
Por padrão, este tipo de classe compreende os endereços de 0.0.0.0 até 127.255.255.255, sendo que, o número de rede está contido no primeiro octeto, ou seja, o endereço de rede varia de 0 a 127, um total de 128 redes. A classe A possibilita que a parte do endereço reservada às máquinas tenha um tamanho de aproximadamente 24 bits (três últimos octetos), possibilitando assim obter matematicamente 224 = 16.777.216 endereços de hosts, que na prática é um número muito grande.

Endereço de rede Endereço de host
0 - 127 0 - 255 0 - 255 0 - 255

TIP Como o endereço IP é um número de 4 octetos de 1 byte, os valores decimais para cada octeto pode variar de 0 a 255.

O endereço de rede corresponde apenas ao primeiro octeto, podendo estar entre o número 0 e 127. Já o endereço de host tem três octetos podendo variar de 0 até 255. Qualquer endereço IP que contenha as características acima é considerado um endereço IP de classe A.

Note que esta classe endereça 50% dos endereços IP possíveis, uma vez que é relativo à todos endereços IP que tiverem o primeiro bit do primeiro byte com valor 0, exatamente a mesma quantidade de 50% dos restantes, que têm valor 1 no primeiro bit.

Existem dois tipos de endereços reservados desta classe, que tem um uso especial:

* 0.0.0.0 - este endereço IP nunca será atribuído a um host, uma vez que é utilizado para referenciar “todas redes” ou “qualquer rede”. É muito utilizado para definir o ponto de passagem para outras redes (gateway) padrão de um host. Por exemplo, para definir o gateway padrão de uma máquina, o seguinte comando pode ser executado:

route add -net 0.0.0.0/0 gw 10.0.0.1

Este comando, significa que estamos adicionando (add) o caminho (route) para todas redes (-net 0.0.0.0/0) que necessariamente deverá passar pelo gateway (gw 10.0.0.1). Neste exempo, estamos apenas adiantando um pouco o que veremos detalhadamente adiante.

* 127.X.X.X - este tipo de endereço, que inicia-se com o valor 127, e com qualquer valor para os outros octetos, também é utilizado para referenciar o seu próprio host. Este endereço também é denominado endereço de loopback, porque é bastante útil para executar testes na pilha TCP/IP, permitindo que você verifique, por exemplo, a comunicação de um software cliente com um servidor na mesma máquina. Experimente executar: ping 127.0.1.2 ou ping 127.234.1.1; note que se você tiver instalado corretamente a pilha TCP/IP, você sempre irá obter resposta, pois você está “pingando” na sua própria máquina. Apesar de poder ser qualquer número IP com o primeiro octeto com valor 127, o valor 127.0.0.1 é o mais utilizado como endereço de loopback.

TIP no fundo, definir todo o endereço de loopback iniciando-se com 127 foi um certo contra-senso, uma vez que seria necessário apenas um. Ou seja, foram desperdiçados cerca de 16 milhões de números IP que não podem ser utilizados para outro tipo de endereçamento. Porém isto não pode ser mais corrigido, pois seria muito complicado atualizar todo software e hardware que suporta este tipo de endereço de loopback.

Classe B

Por padrão, os endereços de rede desta classe estão na faixa 128.0 à 191.255. Observe que o endereço de rede está contido nos dois primeiros octetos, no primeiro octeto o número deve estar no intervalo de 128 a 191, enquanto o segundo octeto pode variar entre 0 e 255. Os últimos dois octetos ficam reservado ao endereço de host, estes dois últimos octetos podem variar de 0 a 255.

Endereço de rede Endereço de host
128 - 191 0 - 255 0 - 255 0 - 255

Como os dois bits iniciais deste endereço são utilizados para indicar esta classe, não variando seus valores, temos apenas 6+8=14 bits restantes, que podem variar e portanto, permitem 214=16.384 endereços de rede. Note que o restante dos bits é utilizado para endereçamento de host, ou seja, suportam até 216=65.536 endereços de host para cada rede.

Classe C

Por padrão, esta classe utiliza somente o último octeto para uso de endereçamento de máquinas nas redes de Classe C.

Endereço de rede End. de host
192 - 223 0 - 255 0 - 255 0 - 255

Observe que o primeiro octeto deve estar entre os números 192 e 223 , já o segundo e o terceiro podem assumir valores entre 0 e 255. Os endereços de hosts ficam restrito ao último octeto, podendo assumir valores de 0 a 255.

Como os três bits iniciais deste endereço são utilizados para indicar esta classe, não variando seus valores, temos 5+8+8=21 bits restantes, que podem variar e portanto, permitem 221= 2.097.152 endereços de rede. Note que o restante dos bits, é utilizado para endereçamento de host, ou seja, suportam até 28= 256 endereços de host para cada rede.

Classe D, E

Estes endereços são especiais. Um endereço classe D é usado para multicasting [multidifusão], que de uma forma bem simplificada, é qualquer comunicação entre um simples remetente e vários destinatários. Diferente das mensagens de broadcast [difusão], os quais são enviadas para todos os endereços de uma rede, mensagens multicast são enviadas para um subconjunto de uma rede de endereços, portanto pode ser considerado como um broadcast dirigido. Devido à sua característica de ser direcionada a público específico e boa performance, é utilizado principalmente em aplicações de vídeo-conferência, e-learning, notícias, etc. Para saber mais sobre multicasting, acesse o endereço: http://www.cisco.com/warp/public/cc/pd/iosw/tech/ipmu_ov.htm. Os endereços classe E são utilizados para fins experimentais.

Endereço de rede e broadcast [difusão]

Assim como foi padronizado que os endereços 127.X.X.X e 0.0.0.0 são utilizados respectivamente para endereços de localhost e rede padrão, também foram padronizados os seguintes endereços especiais:

* broadcast [difusão] - é o endereço utilizado para enviar mensagens para todos da mesma rede, ou seja, difundir uma mensagem para todos. Assim como ocorre nos transmissores de rádio, através do processo denominado radiodifusão. Por padrão, o endereço de broadcast é obtido atribuindo-se todos os bits da porção do endereço de host para o valor 1. Por exemplo, suponha que tenhamos o endereço de classe A 10.1.2.3; qual é o endereço de broadcast padrão? o endereço de broadcast é 10.255.255.255.
* de rede - é o endereço utilizado para especificar a rede e não um host específico. Por padrão, o endereço de broadcast é obtido atribuindo-se todos os bits da porção do endereço de host para o valor 0. Por exemplo, suponha que tenhamos o endereço de classe A 10.1.2.3; qual é o endereço de rede? o endereço de rede é 10.0.0.0.

Máscara de rede

Um conceito muito importante introduzido após a padronização das classes foi o conceito de máscara de rede. A máscara de rede é utilizada para delimitar o endereço de rede e o endereço de host de um endereço IP.

Veja o exemplo, para o endereço IP de classe A 10.1.2.3 e máscara de rede 255.0.0.0:
Endereço de rede Endereço de host
Número IP 10. 1.2.3
Máscara de rede (em binário) 11111111. 00000000.00000000.00000000
Máscara de rede (em decimal) 255. 0.0.0
Máscara de rede (quantidade de 1's) 8

A máscara é um valor de 32 bits, exatamente como um endereço IP, podendo ser expresso também na forma decimal e na forma hexadecimal. A máscara de rede por padrão define todos os bits do primeiro byte igual a 1 (equivale ao valor 255) para o endereço de rede. Para os endereços de hosts ela deve ter todos os bits iguais a 0 (número 0 na forma decimal). Outra maneira de expressar a máscara de rede é a quantidade de bits 1, no caso para a classe A acima, tem um valor de 8. Portanto, uma forma resumida do endereço acima, juntamente com sua máscara de rede, é o valor 10.1.2.3/255.0.0.0 ou 10.1.2.3/8.

Isto implica que:

* Máscara de rede Classe A: tem valor 255.0.0.0. Pois na classe A o endereço de rede está contido no primeiro octeto, onde a máscara de rede está definido com todos os bits iguais a 1 ( Na forma decimal 255). Observe que os endereços de host estão nos últimos três octetos em que a máscara de rede tem todos os bits iguais a 0. Pode também ser denominada como máscara de valor 8.
* Máscara de rede Classe B: tem valor 255.255.0.0. Pois o endereço de rede Classe B está contido nos dois primeiros octetos em que a máscara de rede tem todos os bits iguais a 1. Neste caso, os endereços de hosts ficam reservados aos últimos dois octetos em que a máscara de rede tem todos os bits iguais a 0. Pode também ser denominada como máscara de valor 16.
* Máscara de rede Classe C: tem valor 255.255.255.0. Pois o endereço de rede Classe C está contido nos três primeiros octetos em que a máscara de rede tem todos os bits iguais a 1. Como o endereço de hosts está contido no último octeto, o octeto correspondente da máscara deve ter todos os bits iguais a 0. Pode também ser denominada como máscara de valor 24.

Sub-rede
Ao se utilizar o esquema de classes acima, na prática percebeu-se que a quantidade de hosts disponibilizada por uma rede de uma classe ora era muito pouca ou era excessiva para o uso de uma entidade. Lembre-se que a faixa de endereços classe A, B e C correspondem a 65 milhões, 65 mil e 255 endereços de hosts respectivamente e que quando uma rede de uma destas classes era fornecido para uma entidade, pecava-se pelo excesso, desperdiçando uma quantidade enorme de endereços IP. Para resolver este problema, surgiu a idéia de sub-rede, lançada na RFC950 e que proporcionou um melhor aproveitamento do conjunto de números IP disponíveis, fornecendo faixas de endereços IP sob medida de acordo com a necessidade de cada entidade.

O esquema original de máscara de rede, com máscaras 255.0.0.0, 255.255.0.0 e 255.255.255.0 para as classes A, B e C respectivamente, é considerada como máscara natural; enquanto que o novo esquema utilizado em sub-redes é baseado no avanço dos bits de valor 1 para direita do esquema antigo. Por exemplo, suponha que tenhamos o número IP 10.1.2.3, com máscara de sub-rede 255.255.0.0. Note que a máscara natural para a classe deste endereço é 255.0.0.0 e ela foi estendida para 255.255.0.0, ou seja, estendendo a parte que determina a parte de rede do endereço IP.

TIP devido ao avanço dos bits 1 a partir da máscara natural, estendendo a parte de endereçamento de rede do número IP, a máscara de sub-rede também é chamada de máscara de rede estendida.

Classe Primeiro byte Segundo byte Terceiro byte Quarto byte
A bit 0 + 7bits de endereço de rede 24 bits disponíveis
B bits 10 + 14 bits de endereço de rede 16 bits disponíveis
C bits 110 + 21 bits de endereço de rede 8 bits disponíveis

Note neste quadro acima, que em endereços IP classe A, B, C, temos 24, 16 e 8 bits disponíveis respectivamente para o avanço da máscara de sub-rede e endereço de host. Portanto, a máscara de sub-rede pode avançar somente até o antepenúltimo bit, pois se avançamos até o penúltimo bit, teremos disponível somente 1 bit para número de host, o que seria insuficiente para identificar hosts reais, uma vez que o bit 0 seria para identificar a rede e o bit 1 para broadcast. Da mesma forma, se avançarmos até o último bit, não teríamos mais bits disponíveis para identificar hosts. Portanto, para a máscara de sub-rede, para as classes A, B e C, temos disponível para avançar 22, 14 e 6 bits respectivamente.

Outro conceito importante a ser notado é o número de sub-rede. Antes da sub-rede, todo número IP era do tipo , com o uso de sub-redes, o endereço IP pode ser expresso de uma forma diferente: . Por exemplo, suponha que tenhamos um número IP 10.1.2.3, com máscara de sub-rede 255.255.0.0. Este número proporciona o valor de 10 como número de rede, 1 como número de sub-rede e 2.3 como número de host.

ALERT! Um equívoco muito comum é determinar a classe de um endereço baseado na máscara que um endereço IP utiliza. O que define a classe em que um endereço IP pertence é seu primeiro octeto. Por exemplo: O endereço IP 11.0.0.101 é um endereço IP de classe A, pois seu primeiro octeto tem valor entre 0 e 127 independente da máscara que ele estiver utilizando.

Agora vem uma boa pergunta: Até o momento só temos lidado com máscaras de sub-rede que ocupam totalmente um octeto, por exemplo 255.255.0.0, 255.255.255.0; e se utilizarmos uma máscara de sub-rede que ocupa parte de um octeto, como 255.255.255.248? Veja como fica esta máscara convertida em base binária:

1o. octeto 2o. octeto 3o. octeto 4o. octeto
255. 255. 255. 248
11111111. 11111111. 11111111. 11111000

Quando utilizamos máscaras de sub-rede como esta, temos um cálculo mais complexo. Para mostrar isto, vamos utilizar um exemplo: suponha que tenhamos a rede 200.163.79.0. Se utilizarmos a máscara de sub-rede 255.255.255.248, estaremos aumentando a parte de rede e diminuindo a parte de hosts. Vamos ver como calcular quais são as sub-rede e seus possíveis números IP.

Os endereços de rede são obtidos fixando-se a parte de host com bits 0's e variando-se a parte de sub-rede. Ou seja, teremos as sub-redes variando de 00000000=0 a 11111000=248. Veja o quadro:

sub-rede (em binário) sub-rede (em decimal)
00000000 0
00001000 8
00010000 16
00011000 24
... ...
11111000 248

Note que para obtermos as sub-redes, simplesmente somamos recursivamente o valor de 8 (equivalente a 1000 binário) ao valor da primeira sub-rede 00000000. Se aplicarmos esta regra, obteremos as seguintes sub-redes: 0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120, 128, 136, 144, 152, 160, 168, 176, 184, 192, 200, 208, 216, 224, 232, 240, 248, ou seja 32=25 sub-redes, ou seja 2n sub-redes, onde n é a quantidade de bits disponibilizados a mais para formação de sub-rede.

Agora que já obtemos as sub-redes, suponha que tenhamos o endereço IP 200.163.79.10. Qual é o endereço de rede, sub-rede e host?

Veja o quadro:
Endereço IP 200.163.79.10
Endereço de rede 200.163.79
Endereço de sub-rede 8 = 1000
Endereço de host 2 = 010
Endereço IP (em binário) 11001000.10100011.01001111.00001010
Máscara de sub-rede (em binário) 11111111.11111111.11111111.11111000

Note pela máscara de sub-rede (em binário) que ela divide as partes que nos interessa:

* O endereço de rede permanece sempre o mesmo, independentemente se está usando máscara de rede ou sub-rede: 200.163.79. Note que é exatamente a parte indicada pela parte de rede da máscara: 11111111.11111111.11111111.
* O endereço de sub-rede é a parte indicada pela máscara com os bits 1: observe no quarto octeto, que os bits 1 indicam a parte de sub-rede, ou seja 00001000, equivalendo à sub-rede 8.
* O endereço de host é a parte indicada pela máscara com os bits 0: observe no quarto octeto, que os bits 0 indicam a parte de host, ou seja 00000010, equivalendo ao host 2.

Seguem mais exemplos: para o endereço IP 200.163.79.19 e máscara de rede 255.255.255.248, temos os endereços: de rede 200.163.79, de sub-rede 16 e de host 3. Para o endereço IP 200.163.79.253 temos os endereços: de rede 200.163.79 ou 200.163.79.0, de sub-rede 248 ou 200.163.79.248 e de host 5. Note que para obtermos a sub-rede, basta verificarmos a maior sub-rede calculada possível para o número ip em questão e o número de host é obtido subtraindo-se este número. Por exemplo, veja que para o número IP 200.163.79.253 a maior sub-rede calculada é 248 e portanto o número de host é 253-248=5.

Note que também, neste caso, que o uso de máscara de sub-rede, obtivemos 32 endereços de sub-redes, com 8 endereços de hosts cada, sendo que 2 são especiais (de rede e de broadcast), portanto somente 6 podem ser utilizados para endereçar hosts reais. Portanto, utiizando sub-redes, você teria 32x6=192 endereços reais de hosts. Por exemplo, vejamos somente os hosts da sub-rede 200.163.79.248:
Endereço IP Endereço (em binário) Tipo de endereço
200.163.79.248 11001000.10100011.01001111.11111000 Especial de Rede
200.163.79.249 11001000.10100011.01001111.11111001 Normal de host
200.163.79.250 11001000.10100011.01001111.11111010 Normal de host
200.163.79.251 11001000.10100011.01001111.11111011 Normal de host
200.163.79.252 11001000.10100011.01001111.11111100 Normal de host
200.163.79.253 11001000.10100011.01001111.11111101 Normal de host
200.163.79.254 11001000.10100011.01001111.11111110 Normal de host
200.163.79.255 11001000.10100011.01001111.11111111 Especial de broadcast

Até o momento, mostramos um endereço classe C. Também é bom apresentar um exemplo para um endereço IP classe B e observarmos as diferenças. Suponha por exemplo, que recebemos uma rede classe B, 140.10.0.0 e de acordo com um levantamento da necessidade da empresa em que você trabalha, vai ser necessário 50 sub-redes, com no mínimo 200 hosts cada sub-rede, podendo ter um possível crescimento de 50% em sub-redes (esta realmente é uma grande empresa). Vem a pergunta: qual a máscara de sub-rede ideal e suas consequentes sub-redes?

Veja o quadro:

Quantidade de bits de sub-rede Valor de octeto de máscara de sub-rede Quantidade de sub-redes
1 128 (10000000) 2
2 192 (11000000) 4
3 224 (11100000) 8
4 240 (11110000) 16
5 248 (11111000) 32
6 252 (11111100) 64
7 254 (11111110) 128
... ... ...
n 1111...1000 onde n é a quantidade de bits 1 2n

Note que quanto mais a máscara de sub-rede avança em quantidade de bits 1, maior é a quantidade de sub-redes e menor a quantidade de hosts. Lembrando também que para as classes A, B e C, podemos avançar a máscara de sub-rede em no máximo 22, 14 e 6 bits respectivamente. Portanto, o maior avanço que podemos fazer na sub-rede do nosso exemplo é de 14 bits.

Se atualmente temos 50 sub-redes, com possível crescimento de 50%, temos uma previsão de crescimento em até 75 sub-redes. Note que se avançarmos 6 bits, seria suficiente para a arquitetura atual da rede, no entanto não seria suficiente para o previsto futuramente. Portanto, o avanço de 7 bits seria suficiente, permitindo até 128 sub-redes. Podemos escolher então, a máscara de sub-rede de 7 bits, ou seja, 255.255.254.0=11111111.11111111.11111110.00000000.

Agora vamos calcular as sub-redes. As sub-redes serão de 0 (000000000) a 254 (11111110), sempre mantendo o último bit com 0, uma vez que este bit está alocado para endereçamento de hosts. Portanto, a segunda sub-rede será (00000010=2), a terceira sub-rede será (00000100=4) e assim por diante. Ou seja, será todas redes pares (de 2 em 2) a partir de 0 até 254, ou seja, exatamente as 128 sub-redes citadas anteriormente.

Para a máscara de sub-rede determinada acima, 255.255.254.0 e número IP 140.10.27.10, qual seria o endereço de rede, de sub-rede e de host? Veja o quadro abaixo:
Endereço IP 140.10.27.100
Endereço de rede 140.10 (o endereço é classe B e a máscara é 255.255.0.0)
Endereço IP (em binário) 10001100.00001010.00011011.00001010
Máscara de sub-rede (em binário) 11111111.11111111.11111110.00000000
Endereço de sub-rede 26 = 00011010
Endereço de host 266 = 100001010

Note neste exemplo, que foram aplicadas as mesmas regras para o exemplo anterior classe C, com a diferença foi que surgiu uma curiosidade: o endereço de host para este endereço IP é 266, ou seja, acima do valor de um octeto de valor máximo 255. Isto é totalmente normal, uma vez o endereço de host ficou com 9 bits, 1 bit a mais que um octeto, totalizando 29 = 512 endereços.

Entidades de alocação de endereços

Até o momento, sabemos que os blocos de endereços podem ser atribuídos para empresas, que por sua vez podem repassá-las para outras empresas ou filiais, fazendo uso de sub-redes. Mas surge uma boa pergunta: quem fornece uma rede ou sub-rede? Mundialmente existe uma hierarquia de organizações, que cuidam da alocação dos endereços IP, dispostos em blocos, geralmente atribuídos a continentes, países, empresas, etc. Veja o esquema:


Fig. 7 - Hierarquia das entidades de alocação de endereços IP.

Note que quem administra os grandes blocos de endereços IP são:

* nível mundial: IANA (Internet Assigned Numbers Authority - http://www.iana.org/ipaddress/ip-addresses.htm)
* Américas (do Norte, Central e do Sul): ARIN (http://www.arin.net/registration/index.html)
* Europa: RIPE (Réseaux IP Européens - http://www.ripe.net)
* Ásia e Pacífico: APNIC ( Asia Pacific Network Information Centre - http://www.apnic.net)
* Brasil: Registro.br (http://www.registro.br). É administrado atualmente pela entidade pública FAPESP (Fundação de Amparo à Pesquisa do Estado de São Paulo).

Endereços IP para redes privadas

Como todo computador da Internet recebe um endereço IP único, caso você queira ter uma rede local própria, precisará de alguns endereços únicos. Neste caso você não precisa usar os números válidos na Internet, porque há um bloco de endereços que foi reservado apenas para as redes privadas. Os endereços de rede apresentados abaixo podem ser utilizados em sua rede local. Vejamos:

* 10.0.0.0 a 10.255.255.255 - permite endereçar uma rede classe A
* 172.16.0.0 - 172.31.255.255 - permite endereçar 16 redes classe B
* 192.168.0.0 - 192.168.255.255 - permite endereçar 256 redes classe C

Para conhecer mais detalhadamente o uso de endereços privados, acesse o endereço: http://www.cisco.com/warp/public/701/35.html.

O Número de Porta

&&criar ilustração para número de porta?&&

Embora o endereço IP seja suficiente para localizar um computador, é necessário localizar também um aplicativo específico naquele computador. Por exemplo, se a mensagem que está sendo recebida for uma correspondência eletrônica, ela precisará ser enviada para o leitor de correio. Se a mensagem recebida for uma solicitação de página Web, ela precisa ser roteada para o programa que envia páginas Web.

Existe um número de identificação, chamado número da porta, que é enviado em cada mensagem. É necessário que o remetente saiba o número da porta, bem como o endereço da porta, portanto, certos números são padronizados. Esses valores padronizados são conhecido como os números de portas bem conhecidos. Por exemplo, todo navegador Web sabe que a porta número 80 de todos os hospedeiros é por padrão, de um servidor Web. Há também números dedicados a correio eletrônico, FTP e a todos os outros tipos de serviço da Internet.

Embora o número padrão da porta Web seja 80, é possível especificar um número diferente. Por exemplo, se um computador tiver um servidor Web experimental na porta 8080, uma URL para endereçá-lo poderia ser escrito assim:

http://www.testandook.com.br:8080/index.html

Sempre que uma mensagem é enviada de um cliente para um servidor, os números do endereço de retorno e da porta de retorno são incluídos. O servidor usa esses números para formar o endereço de retorno da mensagem. Sempre que você inicia seu navegador Web ou leitor de correio eletrônico, eles solicitam à máquina local um número de porta não utilizado. Eles usam esse número como parte do seu endereço de retorno e irão monitorar, e receber, quaisquer mensagens endereçadas para aquela porta. É por isso que é possível executar diversos programas de Internet simultaneamente sem que haja interferência entre eles.


Fig. 8 - Exemplo de comunicação virtual através de porta.


Fig. 9 - Exemplo de comunicação real através da porta.

Roteamento

Analise o seguinte exemplo: você mora em Goiânia-GO e quer mandar uma correspondência para Cascavel-PR. O seu primeiro passo seria entregar esta carta ao correio (Goiânia) que, porventura, mandaria a carta para o correio de Cascavel que, por sua vez, entregaria para o destinatário. Em redes de computadores acontece analogamente como foi descrito acima, mas neste caso o correio seria o roteador, ou seja, tudo que não pertencer a rede local será enviado para o roteador que comunicará com o roteador da outra rede onde se encontra o destinatário, que por sua vez, entrega para este. Observe que no caso do correio, podem existir "roteadores" intermediários em um trajeto; ou seja, o mesmo pode primeiramente enviar a carta para São Paulo e somente depois chegaria ao destino, assim acontece com as redes e consequentemente com a Internet: para comunicar com uma máquina é possível e bastante comum passar por vários


Fig. 10 - Exemplo de rede interligada através de 5 roteadores.

A vantagem de utilizar esta forma estruturada está no fato de não haver uma preocupação com o caminho que o pacote irá percorrer, a única preocupação está limitada a origem e ao destino. Toda a Internet consiste em um número de redes próprias que são denominadas como redes autônomas. Cada rede necessita de um roteamento interno que tem a tarefa de entregar o datagrama para a rede da máquina de destino.

DNS - Domain Name Server

Raramente os programas fazem referência a hosts, e-mail e outros recursos utilizando seus endereços binários de rede - endereços IP. Em vez de números binários, eles utilizam strings ASCII, como exemplo www.sistemasabertos.com.br. Todavia, a rede em si só compreende endereços binários; portanto, é necessário algum tipo de mecanismo para converter os strings ASCII em endereços de rede. Esta é a grande função do DNS, ele transforma strings(nomes) para endereço IP. Um exemplo para ilustrar seria o uso da lista telefônica, conhecendo o nome da pessoa ou estabelecimento, você adquire o número de telefone - número necessário para comunicação. Nas redes de computadores, você conhecendo o nome e domínio da máquina, obtêm-se o endereço IP - número necessário para comunicação entre computadores.

Primeiramente, os nomes e endereços eram armazenados automaticamente no seu computador local por meio de arquivo texto. Na verdade, foi assim que a Internet começou, e continua sendo uma prática comum em redes pequenas. Tão logo uma rede ultrapassa alguns poucos computadores, começam a surgir os problemas referentes a manter todos os endereços em todos os computadores. Faz sentido automatizar a manutenção da lista. Para resolver este problema foi criado o DNS - Domain Name Server - que se baseia em um computador que gerencia a lista e faz com que os outros computadores o consultem para procurar endereços (veremos isso posteriormente em um capítulo exclusivo).

Arquivos Gerais

A partir desta seção, será utilizado muito o conceito de conversão entre base decimal e binária; e vice-versa. Portanto, é extremamente recomendável que o leitor tenha noção deste assunto. Caso isto não seja de seu conhecimento, favor procure bibliografia apropriada, ou estude o anexo que trata de conversão de números binários.

Há uma grande gama de arquivos de configurações e informações de rede. Estes arquivos armazenam números de portas e endereços usados nas comunicações. A grande maioria destes arquivos podem ser editados manualmente.

/etc/protocols

Este arquivo define os protocolos de baixo nível utilizados na comunicações de redes TCP/IP. Um pacote quando é enviado necessita ser encapsulado em um tipo de protocolo, este arquivo serve como uma referência para saber como “desembrulhá-lo”.

Essa referência é feita através de ID (Números de Identificação) do protocolo. Para conseguir a conexão em rede, o computador comunica através dos números de identificação dos protocolos, os dois hospedeiros concordam com um grupo de ID que é usado como etiqueta para identificar o protocolo quando a mensagem chega. Esses números de ID são mantidos no arquivo /etc/protocols que é apresentado a seguir:

ip 0 IP # internet protocol, pseudo protocol number
icmp 1 ICMP # internet control message protocol
igmp 2 IGMP # Internet Group Management
ggp 3 GGP # gateway-gateway protocol
ipencap 4 IP-ENCAP # IP encapsulated in IP (officially ``IP'')
st 5 ST # ST datagram mode
tcp 6 TCP # transmission control protocol
egp 8 EGP # exterior gateway protocol
pup 12 PUP # PARC universal packet protocol
udp 17 UDP # user datagram protocol
hmp 20 HMP # host monitoring protocol
xns-idp 22 XNS-IDP # Xerox NS IDP
rdp 27 RDP # "reliable datagram" protocol
iso-tp4 29 ISO-TP4 # ISO Transport Protocol class 4
xtp 36 XTP # Xpress Tranfer Protocol
ddp 37 DDP # Datagram Delivery Protocol
idpr-cmtp 39 IDPR-CMTP # IDPR Control Message Transport
rspf 73 RSPF #Radio Shortest Path First.
vmtp 81 VMTP # Versatile Message Transport
ospf 89 OSPFIGP # Open Shortest Path First IGP
ipip 94 IPIP # Yet Another IP encapsulation

A primeira coluna é o nome do protocolo, a segunda se refere ao seu número de ID. A terceira coluna é um nome alternativo, geralmente estará em letra maiúscula, mas poderia ser outro nome. Através do arquivo é possível observar que existem outros protocolos além do TCP/IP, alguns destes protocolos são usados na Internet por hospedeiros para obter informações sobre endereço e roteamento.

A grande maioria de mensagens que circulam a Internet usam o protocolo TCP ou UDP. A diferença está exclusivamente na forma com que cada protocolo trata as informações. O protocolo UDP envia o pacote de dados não se importando se ele será recebido, enquanto o TCP espera por uma resposta, ou seja, ele envia o pacote e espera por uma resposta de recebimento por parte do outro hospedeiro.

/etc/services

Este arquivo define os números de porta de cada serviço. Ter uma entrada neste arquivo não indica necessariamente que o programa estará sendo executado, pois este arquivo apenas controla o número de porta que o processo/programa é executado. Veja um exemplo deste arquivo:


Tcpumx1 1/tcp #rfc-1078
echo 7/tcp
echo 7/udp
discard 9/tcp sink null
discard 9/udp sink null
systat 11/tcp users
daytime 13/tcp
daytime 13/udp
netstat 15/tcp
qotd 17/tcp quote
chargen 19/tcp ttytst source
chargen 19/udp ttytst source
ftp-data 20/tcp
ftp 21/tcp
telnet 23/tcp
smtp 25/tcp mail
time 37/tcp timeserver
time 37/udp timeserver
rlp 39/udp resource #resource location
name 42/udp nameserver
whois 43/tcp nicname #usually to sri-nic
domain 53/tcp
domain 53/udp
mtp 57/tcp #deprecated
bootps 67/udp #bootp server
bootpc 68/udp #bootp client
tftp 69/udp
gopher 70/tcp
rje 77/tcp
finger 79/tcp
http 80/tcp
link 87/tcp ttylink
kerberos 88/udp kdc #Kerberos authentication-udp
kerberos 88/tcp kdc #Kerberos authentication-tcp
linuxconf 98/tcp #added by linxuconf RPM
hostnames 101/tcp hostname #usually to sri-nic
pop-3 110/tcp #PostOffice V.3
pop 110/tcp #PostOffice V.3
snmp 161/udp
snmp-trap 162/udp
login 513/tcp #BSB rlogind(8)
who 513/udp whod #BSB rwhod(8)
pcnfs 640/udp #PC-NFS DOS Authentication
dos 7000/tcp msdos

Este arquivo contém os serviços mais conhecidos, por exemplo, espera se que a World Wide Web, baseado no protocolo HTTP, tenha seu servidor escutando a porta 80. Da mesma forma que o serviço telnet esteja esperando por solicitações na porta 23. Já o serviço ftp requer duas portas - ele usa a porta 20 para transmitir e receber dados e a porta 21 para enviar e receber informações de controle (solicitação de interrupção de transferência de arquivo, por exemplo).

Apesar da maioria dos protocolos listados no arquivo especificarem tanto o protocolo de baixo nível TCP e UDP, estes não necessariamente são realmente implementados nos dois protocolos. A IANA - órgão oficial regulador da Internet que tem como uma das atribuições regulamentar as entradas neste arquivo - atribui sempre ao protocolo a reserva de uso dos dois protocolos de baixo nível TCP e UDP, no sentido de permitir uso futuro . Outra característica deste arquivo, está no fato de que um serviço pode ter mais de um nome, veja o serviço name que também é chamado de nameserver.

TIP Veja a lista PORT NUMBERS disponível on-line através do endereço http://www.isi.edu/in-notes/iana/assignments/port-numbers.

hand Vejamos este exemplo, ao executar:

#telnet 127.0.0.1

hand Você estará automaticamente tentando uma solicitação de conexão na sua própria máquina através de sua porta 23, uma vez que a porta padrão configurada no arquivo /etc/services do serviço telnet é 23.

hand Para fazer o teste anterior, você deve estar executando o serviço telnetd, este serviço é controlado pelo serviço inetd(Voltaremos a tratar este assunto posteriormente no tópico Serviço Inet). Para ativar o serviço telnet edite o arquivo de configuração do inet, o arquivo /etc/inetd.conf.

#vi /etc/inetd.conf
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd

hand Observe se a linha similar a apresentada acima está comentada. No Linux os arquivos de configuração usam o caractere “#” ou “;” para comentar uma linha.

hand Depois de configurado o arquivo você deve reiniciar o serviço inetd, ou inicializá-lo se ele estiver parado.

hand Para verificar se ele está parado ou ativo, execute:

#ps aux | grep inetd root 946 0.0 1.6 1164 484 ? S 02:15 0:00 inetd
root 951 0.0 1.7 1368 512 pts/0 S 02:15 0:00 grep inet

hand Caso obtenha uma saída desta forma, o serviço está ativo e seu número de identificação de processo - PID - é 946. Para reinicializá-lo, execute:

#kill -HUP 946

hand Caso o serviço não esteja ativo, execute:

#inetd

hand Agora você pode utilizar o telnet para fazer a requisição.

/etc/hosts

Este arquivo tem como objetivo relacionar nomes de máquinas com endereços IP.

Este arquivo trabalha como se fosse uma agenda telefônica, ou seja, através do nome da pessoa você descobre o número do telefone. Em redes de computadores o funcionamento é análogo: você atribui um nome a um endereço IP no arquivo (lista telefônica) e depois disso não é necessário lembrar do endereço IP e sim do nome da máquina, pois este arquivo é utilizado para converter o nome do hospedeiro no seu endereço IP.

A seguir um exemplo do arquivo:

127.0.0.1 localhost
10.1.0.101 lab1.sistemasabertos.com.br lab1
10.1.0.102 lab2.sistemasabertos.com.br lab2
10.1.0.103 lab3.sistemasabertos.com.br lab3
10.1.0.2 servidor.sistemasabertos.com.br servidor

A primeira coluna refere-se ao endereço IP, a segunda coluna é o nome da maquina com seu domínio, a terceira coluna é um alias. Com essa configuração você pode ter acesso ao host 10.1.0.2 através do seguinte exemplo:

#ftp servidor.sistemasabertos.com.br

ou ainda,

#ftp servidor

No arquivo /etc/hosts um host pode ter mais de um nome, ou seja, pode ter mais de uma entrada no arquivo, esses nomes são chamados de nomes alternativos. O primeiro endereço 127.0.0.1 no arquivo é um endereço IP especial chamado de loopback. É uma boa prática ter esta entrada em todos os arquivos /etc/hosts de hospedeiros. Ter o endereço definido desta forma permite que vários softwares usem o nome padrão localhost para referenciar a máquina na qual ele está sendo executado.

Outro fato a ser salientado, é o fato de que se houver 500 hosts em uma rede, todos as máquinas da rede deverão ter o arquivo /etc/hosts com os nomes das 500 máquinas. Pois, caso contrário, os que não estiverem configurados, não poderão utilizar nomes ao invés de números IP, o que se torna inviável. Neste caso utiliza-se um serviço de banco de dados com informações de nomes e seus números IP associados da rede, chamado de DNS - Domain Name Server, o qual será estudado nos próximos capítulos.

%DEBIAN% hand
/etc/network/interfaces
No Debian, configuramos as interfaces de rede locais de forma permanente no arquivo /etc/network/interfaces.Podemos analisar os parametros do arquivo:

lab152:~# cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
address 10.2.0.152
netmask 255.255.0.0
network 10.2.0.0
broadcast 10.2.255.255
gateway 10.2.0.20
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 10.2.0.2
dns-search sa.com.br

Logo, vemos a interface loopback e a interface eth0, com endereço ip 10.2.0.152/16. hand Para ativas as alteraçoes, devemos reiniciar o serviço network:

#/etc/init.d/networking restart

Configuração Geral TCP/IP

Na configuração geral do protocolo TCP/IP, temos:

* 1.Configuração do Nome da Máquina
* 2.Configuração da placa de rede
* 3.Configuração das rotas
* 4.Configuração da Resolução de Nomes DNS

Configuração do Nome da Máquina

Pada cada máquina na rede é atribuído um nome. No protocolo TCP/IP existe uma padronização de nomes para hosts. Os nomes das máquinas devem seguir o padrão FQDN - Nome Totalmente Qualificado - que nada mais é que o nome da máquina mais o seu respectivo domínio DNS (será explicado posteriormente no capítulo DNS). O nome servidor.sistemasabertos.com.br é um exemplo de nome totalmente qualificado, servidor é o nome da máquina, sistemasabertos.com.br é o domínio que a máquina servidor pertence.

hand O comando que configura o nome da máquina chama-se hostname, vejamos sua aplicação:

#hostname servidor.sistemasabertos.com.br

hand Para verificar se a configuração foi executado com êxito, execute somente hostname, este deve retornar o nome da máquina configurado como mostrado abaixo:

#hostname
servidor.sistemasabertos.com.br

Entretanto, este comando configura o nome da máquina temporariamente, ou seja, se esta máquina for reiniciada, ela perderá a configuração. Logo, você deve colocar este comando em um dos scripts de inicialização do sistema, na Conectiva® e Red Hat® existe o arquivo /etc/rc.d/rc.local, no Slackware® existe o arquivo /etc/rc.d/rc.inet1.

hand Nas distribuições Conectiva® e Red Hat® existe outra forma mais apropriada para definir o nome da máquina. Esta forma é feita através do arquivo /etc/sysconfig/network. Vejamos um exemplo deste arquivo:

NETWORKING=yes
HOSTNAME="servidor.sistemasabertos.com.br"
FORWARD_IPV4=yes
GATEWAY=10.2.0.5
GATEWAYDEV=eth0
DOMAINNAME=sistemasabertos.com.br

Observe a entrada HOSTNAME. Com esta configuração, a nome da máquina fica definido estaticamente, ou seja, não perderá a configuração quando reiniciada.

Segue abaixo as explicações referente ao arquivo:

NETWORKING
Caso sua máquina esteja em uma rede, você deve usar o valor yes, caso contrário use no.
FORWARD_IPV4
Esta opção quando assinalada com "yes" ativa o roteamento. Se sua máquina for um roteador a mesma deve estar assinalada com yes.
HOSTNAME
Define o nome totalmente qualificado da máquina(FQDN).
DOMAINNAME
Define o domínio o qual está máquina pertence.
GATEWAY
Define o roteador padrão desta máquina.
GATEWAYDEV
Define a interface de rede que dá acesso ao roteador.

Configuração da placa de rede

Esta configuração está baseada na detecção da placa de rede, configuração do endereço IP e máscara de rede.

Interface Ethernet

O kernel é responsável pela interação com todo hardware, inclusive placas de rede. Para que o kernel reconheça a interface de rede, é necessário os seguintes componentes:

* placa de rede: pode ser do tipo ISA ou PCI. Para placas ISA, os parâmetros endereço de I/O e IRQ não são detectados automaticamente, portanto devem ser passados para o kernel através de configuração do lilo. Se for uma placa PCI, será bastante simples, pois os endereços de I/O e IRQ são atribuídos e reconhecidos dinamicamente e não precisam ser repassados para o kernel.
* módulo da placa de rede: também chamado de driver de placa de rede.

Configurando as interfaces de rede

Existem várias ferramentas que podem ser utilizadas para configurar a interface de rede, a principal ferramenta de configuração é o ifconfig.

Inicialmente iremos tratar de configurações para redes privadas, depois estenderemos os conceitos para uma rede com acesso público para Internet. Antes de começar a configurar a interface de rede, você deve definir uma faixa de endereço a ser utilizado pelas máquinas. Você deve escolher umas das faixas definidas no tópico Endereços IP especiais, pois como se trata de uma rede interna, estes endereços não precisam ser válidos na Internet. Em nossa configuração estaremos utilizando da faixa 10.0.0.0 - 10.255.255.255.

Carregando o módulo da placa de rede

A arquitetura do Linux® é baseada em um kernel que interage com o hardware. Portanto, assim como existem vários tipos de hardware (vídeo, placa de rede, cdrom, etc) e vários tipos de fabricantes e modelos, existem vários módulos (partes do kernel) que o kernel utiliza para interação com estes hardwares. Uma vez que todo módulo ocupa espaço em memória, o kernel permite que os módulos sejam carregados e descarregados de acordo com a necessidade.

Fig. 11 - Ilustração entre a interação do Kernel - Módulo - Placa de Rede.

Para carregar o módulo da placa de rede deve ser utilizado o comando modprobe (veja este e outros comandos relacionados: lsmod, rmmod e insmod nas páginas de manual - man). Vejamos um exemplo da aplicação deste comando:

Neste exemplo o módulo a ser carregado é o referente à placa de rede de marca Realtek , modelo 8139 (por isso, carregamos o módulo rtl8139).

#modprobe rtl8139

Para saber qual módulo carregar, você deve:

* 1)Identificar a sua placa de rede: você deve conhecer a marca e o modelo de sua placa;
* 2)Obter o driver (módulo): muitos fabricantes fornecem o driver para Linux juntamente com o seu hardware ou no seu site. Opcionalmente, você pode encontrar o nome do arquivo do módulo a ser carregado na documentação das fontes do kernel (obtido em http://www.kernel.org , ou pelo arquivo kernel-sources*.rpm na Conectiva®). O arquivo de documentação de documentação do kernel a ser procurado é geralmente o arquivo /usr/src/linux--/Documentation/Configure.help; este arquivo é muito extenso e você deve fazer uma busca no arquivo pela marca de sua placa de rede.
* 3)Conferir a existência do módulo de kernel: os módulos de kernel existentes em seu sistema são localizados em /lib/modules//net. Todos arquivos de módulos tem extensão ".o", mas podem ser carregados através do comando modprobe sem a extensão.

Para automatizar o carregamento do módulo na inicialização, existe o arquivo /etc/modules.conf ou /etc/conf.modules

De acordo com algumas distribuições ou versões do Linux, o nome do arquivo é diferente. Este arquivo é o arquivo de configuração dos módulos do kernel.

hand Eis aqui um exemplo deste arquivo:

alias eth0 rtl8139
alias parport_lowlevel parport_pc
pre-install pcmcia_core /etc/rc.d/init.d/pcmcia start
alias parport_lowlevel parport_pc
pre-install pcmcia_core /etc/rc.d/init.d/pcmcia start
alias eth1 dmfe
alias scsi_hostadapter aic7xxx
alias parport_lowlevel parport_pc
pre-install pcmcia_core /etc/rc.d/init.d/pcmcia start
alias scsi_hostadapter aic7xxx
alias parport_lowlevel parport_pc

Este arquivo define quais módulos estão referenciados a quais dispositivos. Neste exemplo a primeira linha corresponde a interface de rede, a palavra rtl8139 se refere ao módulo da placa de rede realtek. Com esta entrada no arquivo não é necessário carregar o módulo manualmente, se houver outra placa de rede você deve colocar uma entrada neste arquivo referente a outra interface, por exemplo, eth1. Interfaces de rede ethernet são denominadas como eth, onde X é um número que especifica a interface de rede. Veja a linha:

alias eth1 dmfe

Neste exemplo o módulo da placa de rede é dmfe.

Com este arquivo configurado não é necessário ficar carregando o módulo manualmente, o próprio sistema irá carregar o módulo quando houver necessidade.

Utilitário ifconfig

Este utilitário tem como finalidade obter informações de configurações de interface de rede, assim como fazer novas configurações, porém todas as alterações feitas pelo ifconfig são temporárias. O formato usual do ifconfig é o seguinte:

ifconfig [ [-net | -host] [parâmetros] ]

A interface se refere ao próprio nome da interface, as opções -net e -host faz com que o ifconfig trate o endereço como uma rede ou um endereço de máquina. O endereço se refere ao endereço IP.

hand Digitando o ifconfig sem nenhum parâmetro, obtemos a seguinte saída:

#ifconfig
lo Link encap: Local loopback
inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0
UP BROADCAST LOOPBACK RUNNING MTU: 3584 Metric:1
RX packets: 460 errors:0 dropped:0 overruns:0 frame:0
TX packets:460 errors:0 dropped:0 overruns:0 carrier:0
Collisions:0

eth0 Link encap: Ethernet Hwaddr 00:90:06:54:05:11
inet addr:192.81.82.10 Bcast:192.81.82.255 Mask:255.255.255.0
UP BROADCAST LOOPBACK RUNNING MTU: 1500 Metric:1
RX packets: 421 errors:0 dropped:0 overruns:0 frame:0
TX packets:75 errors:0 dropped:0 overruns:0 carrier:0

Neste caso existem duas interfaces ativas - lo e eth0. A primeira é chamada de interface de loopback. A segunda, chamada eth0, é a interface de conexão Ethernet. Na primeira linha da interface eth0 encontra o endereço de hardware da placa ethernet, neste caso o endereço é 00:40:C7:29:9D:98. Um dos trabalhos do protocolos TCP/IP é converter endereço IP em endereços de hardware.

O endereço de hardware, também chamado de endereço MAC - Medium Access Control [Controle de Acesso ao Meio] ou endereço Ethernet, é próprio da tecnologia Ethernet. É um número de 6 octetos e é único para cada placa de rede. No sentido de preservar esta identidade única de endereços Ethernet é que foi padronizado que cada fabricante possui um prefixo próprio (parte dos 6 octetos). Assim cada fabricante cuida de seu própria identificação interna.

TIP Existe um protocolo chamado ARP - Address Resolution Protocol[Protocolo de Resolução de Endereços] - cujo objetivo é mapear endereços IP em endereços de hardware, veja as RFCs 826 e 903 no endereço http://www.ietf.org/rfc.html, veja também as páginas de manual: execute o comando man arp.

hand O número IP se encontra na segunda linha, no caso da interface eth0, o endereço é 192.81.82.10, em seguida vem o endereço de broadcast que é um endereço reservado referente à todas as máquinas da rede. Por exemplo, digitando o seguinte comando:

#ping 192.81.82.255

Você estará referenciando a todas as máquinas na rede, ou seja, as máquinas que estão com as interfaces ativas e ao mesmo tempo conectadas na rede.

O último item da segunda linha - Mask - é utilizado para definir a máscara da rede.

Os campos MTU e Metric mostram a unidade máxima de transferência e o valor métrico respectivamente para a interface de rede. As linhas TX e RX mostram quantos pacotes foram recebidos ou transmitidos livres de erros, quantos erros ocorreram, quantos pacotes foram perdidos provavelmente devido à falta de memória e quantos foram perdidos por falta de sincronismo no seu envio.

Abaixo encontra uma relação dos principais parâmetros do ifconfig:

up
Define uma interface como ativa, ou seja, acessível para camada IP. Esta opção é utilizada automaticamente quando é passado o endereço IP para o ifconfig. É usada para ativar uma interface que porventura tenha sido desabilitada (down).
down
Define uma interface como inativa, inacessível ao nível IP. Qualquer tráfego que utiliza a interface será desabilitado. netmask [mask]: Define uma máscara de sub-rede a ser usada pela interface. pointopoint [address]: Esta opção é utilizada para estabelecimento de conexões ponto a ponto que envolve somente duas máquinas. É o caso do protocolo PPP, SLIP e PLIP. broadcast [address]: Utilizado para atribuir o endereço de broadcast. Este endereço deve estar de acordo com a máscara.

hand Veja o seguinte comando:

#ifconfig eth0 10.1.0.201 netmask 255.0.0.0 broadcast 10.255.255.255 up

Este comando atribui a interface eth0 o endereço IP 10.1.0.201, a máscara de rede 255.0.0.0 e endereço de broadcast 10.255.255.255.

hand Para desativar esta interface basta digitar,

#ifconfig eth0 down

Nos parágrafos anteriores foi apresentado o utilitário ifconfig, este utilitário muda as configurações das interfaces de rede temporariamente. Para configurar a interface de rede estaticamente, no caso das distribuições Conectiva e Red Hat, os arquivos de configuração das interfaces de rede ficam no diretório /etc/sysconfig/network-scripts. Cada interface de rede tem necessariamente um arquivo dentro deste diretório, denominado ifcfg-. Veja os passos que devem serem seguidos para uma configuração da interface ethernet eth0.

#cd /etc/sysconfig/network-scripts
#vi ifcfg-eth0

DEVICE="eth0"
IPADDR="10.1.0.101"
NETMASK="255.255.0.0"
ONBOOT="yes"
BOOTPROTO="none"

Os parâmetros pertinentes ao protocolo TCP/IP são referentes às cinco primeiras linhas deste arquivo. Neste caso o nome do arquivo é ifcfg-eth0 porque faz referência a primeira interface ethernet. Caso exista duas interfaces ethernet deve existir também o arquivo ifcfg-eth1.

DEVICE
Este parâmetro define a interface de rede que no nosso exemplo é a primeira interface ethernet, a interface eth0.
IPADDR
Usado para definir o endereço IP desta interface de rede.
NETMASK
Usado para definir a máscara de rede para este endereço IP.
ONBOOT
Os valores válidos são "yes" ou "no". Com o primeiro valor a interface será ativada na inicialização da máquina. Para o segundo valor a interface não será ativada na inicialização.
BOOTPROTO
Este parâmetro define o tipo de ação desta interface de rede. Existem principalmente dois valores: "none ou static" para endereço IP estático e "dhcp" para endereço IP dinâmico. No último caso deve haver na rede um servidor DHCP(vide capítulo sobre DHCP) para atribuir um endereço IP a esta interface.

TIP No Slackware® a configuração da interface de rede é feita através do arquivo /etc/rc.d/rc.inet1. Vejamos um trecho deste arquivo:

IPADDR="10.2.0.7" # REPLACE with YOUR IP address!
NETMASK="255.255.0.0" # REPLACE with YOUR netmask!
NETWORK="10.2.0.0" # REPLACE with YOUR network address!

A entrada NETWORK é utilizada para definir o endereço de rede, obviamente o endereço de rede deve estar de acordo com o endereço IP e máscara atribuída.

Configuração das rotas

Caso você tenha sub-redes ou queira dar acesso a Internet para as máquinas da rede, você deve configurar as rotas. Ao adicionar uma rota, você deve ter as seguintes preocupações:

rede de alcance: especifica a rede de destino que você quer ter acesso, pode ser a Internet ou outra sub-rede interna.

roteador
define a máquina que dará acesso à rede de alcance, esta máquina terá no mínimo duas interfaces de rede e deve estar acessível às duas redes.

TIP Para configurar rotas existe o utilitário route

Visualizando rotas

hand O utilitário route permite adicionar e remover rotas e visualizar as rotas que já estão definidas. Para visualizar as rotas, basta digitar route sem nenhum argumento. Vejamos a saída do comando:

#route
Tabela de Roteamento IP do Kernel
Destino Roteador MáscaraGen. Opções Métrica Ref Uso Iface
10.1.0.0 * 255.255.0.0 U 0 0 0 eth0
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
default roteador.siste 0.0.0.0 UG 0 0 0 eth0

Observe o que cada coluna define: Primeira coluna: a rede de destino(alcançe); Segunda coluna: o roteador para acesso à rede de destino; Terceira coluna: a máscara da rede de destino. Quarta coluna: As opções possíveis para está coluna são: U - rota está ativa; H - O alvo é uma máquina; G -Use roteador; existem outras opções mais avançadas que fogem do escopo deste material, veja man route para maiores informações. Quinta coluna: Metric A 'distância' até o alvo (geralmente contada em hops). Não é utilizada pelos kernels recentes, somente daemons de roteamento podem usá-la. Sexta coluna: Numero de referências a esta rota. Não usado no kernel do Linux, portanto é sempre 0. Sétima coluna: Contagem de procuras por esta rota. Nos kernels recentes estes números são bem baixos, pois os sockets tem seu próprio cache e não precisam procurar por rotas. Oitava coluna: Interface através da qual os pacotes IP serão enviados.

Observamos que existem três entradas na tabela de roteamento do kernel. Entretanto, as duas primeiras são adicionadas pelo sistema, isto é assim porque por padrão cada interface de rede exige uma rota. Para saber quais rotas foram adicionadas pelo sistema, observe quais entradas têm um "*" na coluna referente ao Roteador.

Veja também que nesta configuração, a máquina possui duas interfaces (Veja a última coluna do exemplo):

lo
é a interface de loopback: Todas máquina corretamente configurada possui esta interface. Esta interface é que permite que da própria máquina acessemos serviços dela mesma, ou seja, ela atuando como servidora para ela mesma. É bastante útil para testes. e
eth0
esta é a primeira interface ethernet. Caso existisse mais outra interface, seria nomeada como eth1.

hand A última entrada cuja primeira coluna está definido como default é uma rota padrão que foi adicionado pelo administrador. No campo Roteador está definido a máquina roteador.sistemasabertos.com.br. É comum, ao executar este comando, demorar para retornar as configurações das rotas. Isto pode acontecer quando não há um mecanismo para conversão de endereços IP para nomes de máquinas, ou seja, nenhum servidor DNS acessível e devidamente configurado. Quando é executado o route sem nenhuma opção o mesmo tentará apresentar o nome da máquina ao invés de seu endereço IP e quando não é possível apresentar o nome, ele tenta até expirar o tempo limite (timeout)Assim, você pode utilizar o route com a opção \n. Com esta opção o route não irá tentar resolver o nome, tornando a saída do comando mais rápida. Vejamos como fica a nova saída do comando:

# route -n
Tabela de Roteamento IP do Kernel
Destino Roteador MáscaraGen. Opções Métrica Ref Uso Iface
10.1.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 10.1.0.5 0.0.0.0 UG 0 0 0 eth0

Adicionando rotas

hand Os próximos exemplos iremos mostrar como adicionar e remover rotas. Vejamos um exemplo de adição de rota:

#route add -net 10.2.0.0/16 gw 10.1.0.101

Este comando adicionará uma rota para a rede 10.2.0.0/16 através do roteador 10.1.0.101. A opção gw é utilizada para atribuir o IP do roteador. O número 16 do endereço 10.2.0.0/16 é utilizado para especificar a máscara de rede. Os números utilizados são: 8 para máscara 255.0.0.0, 16 para 255.255.0.0, 24 para 255.255.255.0 e 32 para 255.255.255.255.

hand O comando para adicionar rota deve ser executado toda vez que for inicializada a máquina, portanto é necessário adicionar este comando nos scripts de inicialização do sistema, na Conectiva® e Red Hat®, existe o arquivo /etc/sysconfig/static-routes que pode ser utilizado para adicionar uma rota estática, deve-se, portanto, inserir a seguinte linha:

net 10.2.0.0 netmask 255.255.0.0 gw 10.1.0.101

TIP Na Slackware® existe o script de inicialização /etc/rc.d/rc.inet1, e deve ser inserido uma linha:

route add -net 10.2.0.0/16 gw 10.1.0.101

Removendo rotas

hand Para excluir uma rota, basta executar:

#route del -net 10.2.0.0/16

Observe que é necessário especificar novamente a máscara, porém não é necessário especificar o número IP do roteador.

Configuração da Resolução de Nomes DNS

Aqui aprenderemos a definir um servidor de DNS para que o mesmo faça a resolução de nomes.

hand O servidor de DNS é definido no arquivo /etc/resolv.conf. Vejamos um exemplo:

nameserver 10.1.0.2
nameserver 200.242.140.5

A entrada nameserver é utilizada para definir o servidor DNS. Observe que pode ser definido mais de um servidor DNS, caso um falhe o outro estará apto a atender.

Com o servidor DNS definido não é necessário decorar números IP. Depois de definido o servidor de DNS, você poderá acessar a Internet e utilizar nomes como www.sistemasabertos.com.br e www.conectiva.com.br para referenciar os hospedeiros [hosts], obviamente considerando que as configurações da placa de rede e rotas estejam corretas.

O serviço Inetd

O serviço inetd é considerado um super serviço, pois este serviço controla vários outros serviços. O inetd lê entradas em um arquivo de configuração chamado /etc/inetd.conf. Através deste arquivo o serviço inetd tem controle sobre demais serviços.

hand Vejamos um exemplo de arquivo inetd.conf:

ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
#telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
#
# Shell, login, exec, comsat and talk are BSD protocols.
#
#shell stream tcp nowait root /usr/sbin/tcpd in.rshd
#login stream tcp nowait root /usr/sbin/tcpd in.rlogind
#exec stream tcp nowait root /usr/sbin/tcpd in.rexecd
#comsat dgram udp wait root /usr/sbin/tcpd in.comsat
#talk dgram udp wait root /usr/sbin/tcpd in.talkd
#ntalk dgram udp wait root /usr/sbin/tcpd in.ntalkd
#dtalk stream tcp waut nobody /usr/sbin/tcpd in.dtalkd
#
# Pop and imap mail services et al
#
#pop-2 stream tcp nowait root /usr/sbin/tcpd ipop2d
#pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d
#imap stream tcp nowait root /usr/sbin/tcpd imapd
#

Neste exemplo, são mostrado apenas algumas linhas; na verdade este arquivo é bem maior. Cada linha define um serviço. A vantagem da utilização do super daemon é a economia de recursos, principalmente espaço de memória. Ou seja, se para cada serviço existisse um script de inicialização do serviço, o mesmo ficaria rodando até alguém pará-lo ou, então, até a máquina ser desligada. Com o inetd, cada serviço é inicializado apenas quando há alguma solicitação pertinente a este serviço. Quando o serviço pára de ser requisitado, o inetd pára imediatamente o serviço. Assim, o serviço não fica gastando memória sem necessidade.

Fig. 12 - Demonstração da funcionalidade inetd.

Habilitando serviços sob o inetd

Para que o inetd inicie qualquer um dos serviços definidos neste arquivo, o mesmo deve estar descomentado. Linhas comentadas são linhas que começam com o caractere "#". Seguindo esta linha de raciocínio, para permitir que máquinas acessem a sua máquina através de FTP - File Transfer Protocol basta descomentar a linha referente ao ftp e em seguida inicializar o serviço inet, ou reinicializá-lo.

hand Na conectiva, para inicializar o inet, você deve executar:

# /etc/rc.d/init.d/inet start

TIP Na slackware, para inicializar o inet, você deve simplesmente executar:

# /usr/sbin/inetd

hand Para que um serviço inet já executando releia o arquivo de configuração, tanto na Slackware quanto na Conectiva, você deve executar:

# kill -HUP

O inet é o script de inicialização do inetd. Depois disto basta requisitar uma conexão ftp na própria máquina.

hand Para isto, execute:

# ftp 127.0.0.1

Neste caso estamos considerando o cliente e o servidor ftp na mesma máquina.

Verificando o funcionamento do inetd

hand Suponha que você tenha acabado de habilitar o serviço ftp, que se encontra sob o controle do inetd. Também suponha que não há nenhuma sessão ftp aberta. Depois de inicializado o serviço inet, verifique se existe o serviço inetd ou ftpd rodando. Para verificar execute:

# ps aux | grep inetd
root 986 0.0 1.8 1164 540 ? S 11:50 0:00 inetd
root 1036 0.0 1.7 1368 512 tty2 S 12:14 0:00 grep inetd

hand Através da saída observamos que o serviço inetd está rodando e, ainda, verificamos que o seu PID - número de identificação do processo - é 983. Agora vamos verificar o processo ftpd - processo que gerencia o serviço ftp.

# ps aux | grep ftpd

Como no momento não há nenhuma solicitação de ftp, o serviço inetd não inicializou o ftpd. Porém, se você solicitar uma nova conexão ftp e verificar novamente, você observará a ocorrência do processo ftpd. Para fazer esta verificação siga estes passos:

hand Primeiramente, execute:

# ftp 127.0.0.1

hand Em outro terminal execute:

#ps aux | grep ftpd
root 1040 4.0 2.8 1712 808 ? S 12:18 0:00 ftpd: localhost:
root 1042 0.0 1.7 1368 512 tty2 S 12:18 0:00 grep ftpd

Para maiores confirmações, você pode terminar o ftp e executar novamente o comando ps aux, você verificará que o processo já estará terminado.

Portanto, para iniciar qualquer serviço que seja controlado pelo inetd, basta descomentá-lo e reiniciar o serviço inet. Exemplos de serviços controlados pelo inetd são: o ftp, o POP, telnet, etc.

Utilitários de redes

Neste tópico será estudado alguns dos principais utilitários de rede. Lembrando que o route e o ifconfig já foi estudado no tópico anterior sobre configuração geral TCP/IP.

host

hand Este utilitário permite obter informações de máquinas pertencentes a um domínio ou sub-domínio. Para isto ele utiliza o serviço de nomes de domínio de hospedeiros e retorna informações sobre eles e como a rede está organizada. Vejamos um exemplo de sua aplicação:

# host www.linux.org
linux.org has address 200.243.256.5

hand Neste caso foi fornecido o número IP do servidor web do domínio linux.org. Para obter informações como nomes e endereços de todas as máquinas de um domínio digite:

# host -l linux.org

hand Para descobrir o endereço IP do servidor de DNS de um domínio específico, execute:

# host -a www.dominio.com.br

A opção -a é equivalente a todas opções juntamente, neste caso a saída deste comando fornecerá também o endereço IP do Servidor DNS deste domínio.

Para maiores informações consulte as páginas do manual através do comando man..

netstat

Esta ferramenta é utilizada também para obter informações de rede, mais precisamente para checar a configuração e atividade de uma rede.

hand Consultando a tabela de roteamento:

# netstat -nr
Tabela de Roteamento IP do Kernel
Destino Roteador MáscaraGen. Opções MSS Janela irtt Iface
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
10.1.0.110 0.0.0.0 255.255.0.0 UH 0 0 0 eth0

Onde:

* r: opção para mostrar a tabela de roteamento
* n: Esta opção faz com que o programa netstat imprima os endereços como números IP ao invés dos nomes da rede e simbólicos da máquina.

Com relação a quarta opção (coluna) do resultado da consulta, poderemos ter:

* G - A rota usa um roteador
* U - A rota está ativa.
* H - O alvo da rota é uma máquina.
* D - A rota foi estabelecida dinamicamente por um serviço (geralmente é o serviço routed, o qual é um serviço de rotas dinâmicas)
* M - A rota foi modificada dinamicamente por um serviço.

As outras colunas significam:

* MSS - Tamanho de segmento TCP padrão para conexões TCP em bytes através desta rota. Isto normalmente é usado para otimização fina de configurações de roteamento.
* Janela - Tamanho da janela TCP padrão para conexões TCP através desta rota.
* Irtt - Tempo de ida e volta (RTT) inicial. Utilizado para o kernel inferir os melhores parâmetros do protocolo TCP.
* Iface - Interface através da qual os pacotes IP serão enviados.

Estas rotas são pré-definidas pelo kernel quando o mesmo está com suporte a roteamento. Caso você não tenha estas característica, é preciso recompilá-lo.

ALERT! Observe que a saída deste comando é similar a do comando route -n

hand Para mostrar estatísticas de fluxo de dados em interface, use a opção -i. Por exemplo:

# netstat -ni

Para maiores informações consulte as páginas do manual sobre o comando netstat através do comando man..

tcpdump

hand Este utilitário monitora a conexão TCP/IP. O monitoramento é feito especificando a interface desejada: eth0, eth1, ppp0 e etc. A saída do comando é o trafego de pacotes enviados e recebido juntamente com endereços de origem e destino. Para monitorar todo tráfego que entra e sai da placa ethernet digite:

#tcpdump -i eth0

hand O tcpdump é também conhecido como um tipo de sniffer - um "farejador" de pacotes de rede- ou seja, captura todos os pacotes solicitados que trafegam em um meio físico. O tcpdump, devido ao sua capacidade de capturar os pacotes de um meio físico compartilhado, pode ser utilizado para fins ilícitos, como capturar senhas não-criptografadas que trafegam na rede. Também pode ser utilizado para fins lícitos, como ferramenta para análise de um protocolo de rede. O tcpdump permite especificar o host que deve ser monitorado.

#tcpdump -i eth0 host lab1.sistemasabertos.com.br

hand Neste exemplo, apenas os pacotes enviados pelo lab1 ou a ele destinado serão monitorados. O nome do hospedeiro pode ser o do hospedeiro local, ou pode ser o de qualquer hospedeiro da rede local. Você pode monitorar apenas os dados que estão sendo enviados por lab1 através do parâmetro src. Exemplo:

#tcpdump -i eth0 src host lab1.sistemasabertos.com.br

hand Veja agora como monitorar apenas os pacotes que estão sendo enviados para lab1.

#tcpdump -i eth0 dst host lab1.sistemasabertos.com.br

hand Você pode monitorar pacotes que tenham passado por um gateway específico, definindo seu nome, como mostrado a seguir:

#tcpdump -i eth0 gateway [roteador]

hand Caso queira monitorar tantos pacotes UDP como os TCP que sejam endereçados a uma porta específica, você pode especificar o número da porta, como exemplo:

#tcpdump -i ppp0 host lab1.sistemasabertos.com.br and port 80

O parâmetro ppp0 se refere a primeira interface da conexão PPP (Protocolo Ponto a Ponto), neste caso o tcpdump estará monitorando apenas a porta 80, porta dos servidores Web, do host lab1.sistemasabertos.com.br. Você ainda pode monitorar apenas os dados de entrada ou saída na porta, para isso basta usar os parâmetros src e dst.

traceroute
Este aplicativo indica por quais roteadores um pacote passou antes de atingir seu destino.

hand Vejamos um exemplo simples de aplicação deste comando:

#traceroute www.linuxdoc.org
traceroute to linuxdoc.org (152.19.254.81), 30 hops max, 40 byte packets
1 roteador (10.2.0.5) 0.872 ms 0.334 ms 0.320 ms
2 10.1.0.7 (10.1.0.7) 1.049 ms 0.815 ms 0.843 ms
3 ppp254-gnace7004.telebrasilia.net.br (200.163.76.254) 16.285 ms 18.032 ms
16.100 ms
4 200.193.193.193 (200.193.193.193) 16.884 ms 18.170 ms 16.307 ms
5 200.199.245.5 (200.199.245.5) 24.378 ms 26.340 ms 24.531 ms
6 200.193.234.1 (200.193.234.1) 26.033 ms 24.762 ms 24.778 ms
7 200.193.234.66 (200.193.234.66) 47.527 ms 49.635 ms 49.128 ms
8 BrT-G3-0.cta-border.telepar.net.br (200.163.207.129) 47.849 ms 50.174 ms
49.365 ms
9 brasiltelecom-A0-0-0-32-dist01.cta.embratel.net.br (200.250.208.57) 53.094

Observe a grande quantidade de roteadores que o pacote passa antes de atingir o destino, neste caso o destino é www.linuxdoc.org. Neste exemplo não está sendo mostrado a saída completa do comando.

nmap
O comando nmap é um scanner de portas de comunicações, ou seja, ele mostra quais portas estão abertas, sua sintaxe é:

#nmap

hand Vejamos um exemplo de sua aplicação:

#nmap 127.0.0.1

#Starting nmap V. 2.54BETA21 ( www.insecure.org/nmap/ )
Interesting ports on localhost.localdomain (127.0.0.1):
(The 1535 ports scanned but not shown below are in state: closed)
Port State Service
80/tcp open http
111/tcp open sunrpc
119/tcp open nntp
443/tcp open https
515/tcp open printer
878/tcp open unknown
6000/tcp open X11

Nmap run completed -- 1 IP address (1 host up) scanned in 1 second

Neste exemplo estamos verificando quais portas estão abertas na própria máquina local.

Sub-rede - exemplo prático

A estrutura lógica de um endereço IP pode ser modificado usando bits de endereço de host para bits de endereço de rede adicional. Essencialmente, a linha de divisão entre o endereço de rede e o endereço de hosts pode ser alterado através da máscara de sub-redes, criando redes adicionais (sub-redes). Conseqüentemente a quantidade de hosts suportado por cada sub-rede será menor do que a rede originária.

Entre as grandes vantagens e utilidades de dividir as redes, temos:

* 1.Tráfego de rede - Esta é uma das necessidades de dividir redes, com a utilização de sub-redes cada rede terá o seu tráfego limitado em seu barramento físico (canal de comunicação), isto atenua as colisões de pacotes em grandes redes, melhorando a performance da rede.
* 2.Distâncias - Limitações de distâncias podem ser solucionadas através das divisões de rede.

Para que as sub-redes comuniquem entre si, devem haver roteadores. Assim todos os pacotes destinados à outra sub-rede será passado por um roteador. Assim todo roteador terá pelo menos 1 conexão física com cada uma das duas sub-redes. Esta conexão pode ser feita diretamente ao barramento da sub-rede através de uma interface de rede.

Toda sub-rede é criada pela alteração da máscara de rede ou de sub-rede, neste caso a função da máscara de sub-rede será alterar a linha de divisão do endereço IP relacionada ao endereço de rede e endereço de host.

Na sua rede local, por exemplo, se o seu computador estiver em uma rede classe B que tenha o endereço 163.9.82.221, a máscara de rede 255.255.0.0 extrairia o endereço da rede: 163.9.0.0. Imagine que você queira dividir esta rede e para isto criar mais duas sub-redes departamentais. Cada sub-rede irá necessitar de um roteador departamental. Estas duas sub-redes podem ser definidas com endereços de sub-rede como por exemplo: 163.9.1.0 e 163.9.2.0. Logo, sua máscara de sub-rede seria 255.255.255.0 e seu endereço de rede continuaria contido nos primeiros 2 octetos, enquanto que o endereço de sub-rede fica contido nos terceiro octeto. Concluindo, a rede 163.9.0.0 pode ser dividida a princípio em 256 sub-redes com cada sub-rede podendo conter 254 endereços de máquinas (256 menos 2), pois o endereço de host neste caso não poderá ser 0 e nem 255 (endereços reservados para endereço de rede e broadcast respectivamente).

Através de exemplos de redes procuraremos estabelecer conectividade entre máquinas através do protocolo TCP/IP, por meio de roteadores, que são hardwares com no mínimo 2 interfaces de rede e responsáveis por repassar pacotes de uma rede para outra. Primeiramente iremos interligar duas redes através de um roteador. O segundo exemplo trata a divisão de uma rede em várias sub-redes.

Interligando duas redes

Fig. 13 - Exemplo de ligação de duas redes através de um roteador.

Neste exemplo queremos interligar as duas sub-redes: 10.1.0.0/16 e 10.2.0.0/16. As máquinas que compõe a sub-rede 10.1.0.0/16 são: LAB1 e LAB2; A sub-rede 10.2.0.0/16 é composta pelas máquinas: LAB2 e LAB3. Observamos no esquema acima que a máquina LAB2 é o roteador destas redes.

Configuração do roteador

A configuração do roteador, neste exemplo, é baseada em apenas ativar a opção ipv4_forward do kernel. Está opção habilita o reencaminhamento [forward] de pacotes - característica de um roteador. Todo roteador Linux deve estar com está opção ativada.

hand O kernel do Linux faz uso do arquivo /proc/sys/net/ipv4/ip_forward para decidir se deve ou não repassar [forward] pacotes. Para o valor 1, o kernel libera a repassagem. Para o valor 0, o kernel não permite a repassagem. Portanto, para este exemplo, devemos sempre executar este comando:

#echo 1 > /proc/sys/net/ipv4/ip_forward

O valor gravado neste arquivo é mantido somente em memória, uma vez que o sistema de arquivo /proc é na verdade um sistema de arquivo baseado em memória, apagável quando se reinicializa o sistema. Portanto, faz-se necessário adicionar a linha de comando no arquivo /etc/rc.d/rc.local, pois assim o comando será executado toda vez que a máquina for iniciada.

Configuração dos clientes da rede 10.1.0.0/16

A configuração das máquinas pertencente a esta sub-rede é baseada em adicionar uma rota cujo destino seja a rede 10.2.0.0/16, neste caso o roteador para esta rede será a máquina LAB2. Vejamos qual comando fará este procedimento:

#route add -net 10.2.0.0/16 gw 10.1.0.102


Observe que o IP do roteador é a interface eth0 da máquina LAB2, pois é esta a interface que pertence a rede 10.1.0.0/16.

Configuração dos clientes da rede 10.2.0.0/16

hand Assim como na configuração dos clientes da rede 10.1.0.0/16, a configuração destas máquinas se resume em um comando. Vejamos:

#route add -net 10.1.0.0/16 gw 10.2.0.102

Para as máquinas da rede 10.2.0.0/16, a rede de destino é a 10.1.0.0/16 que pode ser observado no comando acima. Observe que o endereço IP do roteador definido é o endereço da interface eth1 da máquina LAB2.

TIP Nas duas execuções do comando route acima poderia ser utilizado uma rota padrão, ou seja, no lugar de 10.1.0.0/16 e 10.2.0.0/16 poderia ser usado o endereço especial de rota padrão 0.0.0.0/0, uma vez que só existe um roteador nestas redes.

Segmentando uma rede em sub-redes

Este segundo exemplo trata uma uma sub-rede 10.1.0.0/16 segmentada em 3 sub-redes: 10.1.3.0/24, 10.1.1.0/24 e 10.1.4.0/24. Neste exemplo temos três roteadores: LAB1, LAB2 e LAB8 que dão acesso as respectivas sub-redes 10.1.1.0/24, 10.1.3.0 e 10.1.4.0/24.

Fig. 14 - Divisão da rede 10.1.0.0/16 em três sub-redes: 10.1.1.0/24, 10.1.3.0/24 e 10.1.4.0/24.

Compreendendo a rede e sub-redes

Neste exemplo, podemos visualizar centralmente uma rede principal, também chamada de backbone [espinha dorsal], que possibilita a comunicação entre as suas sub-redes. Podemos chamá-la também de sub-rede 10.1.0.0, enquanto que suas 3 sub-redes, podemos denominar:

* 10.1.1.0:formada pelas máquinas LAB3 e LAB1;
* 10.1.3.0:formada pelas máquinas LAB2 e LAB4; e
* 10.1.4.0:formada pelas máquinas LAB8 e LAB10.

Considerando a primeira interface de rede ethernet-eth0, nesta rede teremos como roteadores as máquinas:

* 10.1.0.101 - roteador padrão da sub-rede 10.1.1.0.
* 10.1.0.102 - roteador padrão da sub-rede 10.1.3.0.
* 10.1.0.108 - roteador padrão da sub-rede 10.1.4.0.

Define-se roteador padrão [default gateway] a máquina que fará a repassagem de pacotes de uma rede para outra, quando o pacote tiver um endereço IP de destino não condizente com a rede de origem. Ou seja, caso uma máquina necessitar de comunicar com outra rede diferente da qual ela se encontra, o gateway padrão será utilizado para passar para outra rede. Por isso, os gateways também são chamados de "pontos de passagem".

Configurando os roteadores

a. Configurando as interfaces de rede:

hand Usando a máquina LAB1 como exemplo teremos,

#ifconfig eth0 10.1.0.101 netmask 255.255.0.0
#ifconfig eth1 10.1.1.201 netmask 255.255.255.0

Para as outras máquinas mudariam apenas os endereços IP. Para as máquinas que não são roteadores seria necessário apenas o primeiro comando com o endereço IP e Máscara de rede correspondente. Lembre-se que o ifconfig muda as configurações somente em memória, sendo apagada quando o sistema for reinicializado.

hand Habilite o reencaminhamento de pacotes, através do comando:

#echo 1 > /proc/sys/net/ipv4/ip_forward

b. Configurando as rotas para os roteadores.

Cada roteador, neste caso, deverá ter duas rotas definida.

hand Máquina LAB1

#route add -net 10.1.3.0/24 gw 10.1.0.102
#route add -net 10.1.4.0/24 gw 10.1.0.108

A verdade é que roteadores precisam de outros roteadores para comunicar-se com outras redes. Você pode generalizar isso para Internet e imaginar o grande emaranhado de roteadores e redes que ela comporta.

O primeiro comando está adicionando uma rota no roteador LAB1 que dá acesso à rede 10.1.3.0 através do roteador 10.1.0.102, que é o roteador da última rede citada. O segundo comando é análogo mas refere-se à rede 10.1.4.0 que tem como roteador a máquina 10.1.0.108. Observe que estamos usando os endereços IP das interfaces eth0, pois os roteadores se comunicam através desta interface.

hand Máquina LAB2

#route add -net 10.1.1.0/24 gw 10.1.0.101
#route add -net 10.1.4.0/24 gw 10.1.0.108

hand Máquina LAB8

#route add -net 10.1.1.0/24 gw 10.1.0.101
#route add -net 10.1.3.0/24 gw 10.1.0.102

c. Configurando os clientes dos roteadores

Para configurar as rotas destas máquinas basta adicionar uma rota para o roteador de sua sub-rede.

hand Máquina LAB3.

#route add -net 0.0.0.0/0 gw 10.1.1.201

Este comando adiciona uma rota padrão através do roteador 10.1.1.201 cuja máquina é a LAB1, este endereço IP refere à segunda interface ethernet -eth1. O parâmetro 0.0.0.0/0 indica que é uma rota padrão e, mais precisamente, que todo e qualquer pacote com destino não pertinente a rede desta máquina será direcionada para o referente roteador.

ALERT! Caso existissem mais máquinas nesta sub-rede o comando a ser digitado seria o mesmo.

hand Máquina LAB4

#route add -net 0.0.0.0/0 gw 10.1.3.202

hand Máquina LAB10

#route add -net 0.0.0.0/0 gw 10.1.4.208

Depois destes comandos todas as máquinas da rede e sub-redes estão prontas para se comunicar.

Verificando o funcionamento da rede

Além do utilitário ping, para verificar a conectividade entre os hospedeiros [hosts], você pode ainda através do utilitário traceroute verificar o caminho dos pacotes, veja a aplicação do utilitário abaixo.

hand Execute o comando abaixo na máquina 10.1.3.204 e terá o seguinte resultado:

#traceroute 10.1.4.210
traceroute to 10.1.4.210 (10.1.4.210), 30 hops max, 40 byte packets
1 lab2.sistemasabertos.com.br (10.1.3.202) 0.610 ms 0.483 ms 0.417 ms
2 lab8.sistemasabertos.com.br (10.1.0.108) 165.049 ms 128.369 ms 129.672 ms
3 * lab10.sistemasabertos.com.br (10.1.4.210) 137.100 ms 128.543 ms

Esta lista refere às máquinas que o pacote passou até atingir seu destino. No momento, as linhas que nos interessam começam com um número. O número 1 refere-se à primeira máquina o qual o pacote chegou depois de sair da sua máquina de origem (máquina 10.1.4.210). Logo a máquina da linha número 1 é o roteador padrão da máquina de origem 10.1.4.210. Caso exista um servidor de DNS ou um outro meio para converter endereço IP para o Nome da Máquina, o segundo campo será o nome da máquina com seu respectivo domínio. Caso não exista, a saída do comando irá apresentar somente o endereço IP da respectiva máquina. Logo em seguida entre parêntese vem o endereço IP correspondente. Observe que as máquinas estão utilizando o domínio sistemasabertos.com.br.

Na segunda linha (Número 2) encontra-se a máquina lab8.sistemasabertos.com.br com endereço IP 10.1.0.108 (eth0), pois ela é o roteador da rede onde se encontra a máquina alvo (lab10).

Na terceira linha (Número 3) encontra-se a máquina lab10.sistemasabertos.com.br com endereço IP 10.1.4.210 que é a máquina alvo.

É importante salientar que no primeiro caso a interface detectada pelo traceroute foi a eth1 da máquina lab2 e no segundo caso foi a eth0 da máquina lab8. Isso acontece pelo fato de ser a primeira interface da máquina que recebeu o pacote.

No primeiro roteador a interface que faz parte da rede de onde originou o pacote é a eth1, já no segundo roteador é a eth0.

Terminologia utilizada no capítulo

ARPANET
Rede de Defesa dos Estados Unidos. A ARPANET é conhecida como uma das primeira redes de computadores que posteriormente se transformou na Internet.
Broadcast
Método utilizado para difundir pacotes a todos as máquinas da rede
Buffer
Forma de armazenamento de dados em trânsito. Quando algum dado é recebido e deve ser transmitido ou transformado, este processo de transmissão ou transformação pode ser mais lento que a velocidade de recebimento e portanto deve ser a princípio armazenado. Para armazenar estes dados utiliza-se o buffer - parte da memória utilizada para armazenar dados com esta característica.
Cliente
Definido como uma máquina que faz requisições e espera respostas de outra máquinas - servidores.
Daemon
Definido como serviço, exemplo: daemon sendmail é equivalente a serviço sendmail.
Datagrama
Conjunto de dados dividido entre em cabeçalho e corpo utilizado para transmitir informações em redes TCP/IP. Também é conhecido como pacote de dados.
DNS
Domain Name Service - Serviço de Nomes e Domínio, sua finalidade é converter nomes de máquinas para endereços IP e vice-versa. Endereço IP: número de 32 bits utilizado para identificar uma máquina na rede TCP/IP.
Firewall
Computador utilizado para prevenir ataques externos, tem a finalidade de garantir a segurança de uma rede.
Hacker
Indivíduo hábil em enganar os mecanismos de segurança de sistemas de computação e conseguir acesso não autorizado aos recursos destes, geralmente a partir de uma conexão remota em uma rede de computadores.
Host
Mesmo que hospedeiro - máquina em uma rede TCP/IP.
IP
Protocolo Internet - Protocolo responsável pela interligação de diferentes redes. Máscara de sub-rede: número de 32 bits utilizado para definir a porção do endereço IP que corresponde ao endereço de rede e ao endereço de máquina na rede. Modelo OSI: Open System Interconnection - é conhecido como o modelo de padronização de tecnologias de redes de computadores. Porta de comunicação: É definido através de um número que tem a função de identificar um serviço específico em uma máquina. É considerado o endereço de um serviço
Protocolo
Regras e código envolvido na comunicação de redes de computadores. Redes de Difusão: Redes onde todas as máquinas compartilham de um mesmo canal de comunicação(barramento) Redes ponto a ponto: Redes em que apenas duas máquinas compartilham do mesmo canal de comunicação.
RFC
Request for Comment -documentos que define os padrões do protocolo TCP/IP Roteador ou gateway: Definido como uma máquina capaz de repassar pacotes de uma rede para outra, é a máquina capaz de interligar redes.
Serviço
É definido como um programa que tem uma função específica, este serviço geralmente espera por solicitações podendo ou não responder com algum dado. Serviço é característico de servidor.
Servidor
Definido como a máquina que recebe solicitações e podendo ou não responder com algum tipo de dado
TCP
Protocolo de Controle de Transporte - Protocolo cuja finalidade é construir um serviço confiável sobre o protocolo IP
UDP
Protocolo de Datagrama do Usuário - Este é o outro protocolo de transporte utilizado pelo TCP.
URL
Uniform Resource Locator - Define as informações necessárias para estabelecer uma conexão, uma URL padrão informa: protocolo envolvido na comunicação, IP ou nome da máquina que se deseja comunicar e porta onde se deseja conectar. Exemplo: http://www.sistemasabertos.com.br.

Links indicados

* http://www.tldp.org/HOWTO/Networking-Overview-HOWTO.html
o Este endereço possui informações gerais de redes TCP/IP, assim como configurar vários tipos de servidores que serão visto nos próximos capítulos. Site em inglês
* http://www.tldp.org/HOWTO/mini/IP-Subnetworking.html
o Este endereço contém informações sobre endereços IP, Classes de endereços IP, mascaras de sub-rede, sub-rede, roteamento e etc. Site em inglês.
* http://www.ietf.org/rfc.html
o Neste endereço você tem acesso às RFC, sendo que as mais relacionadas ao conjunto de protocolo TCP/IP são: 768, 791, 792 e 793, estas RFCs apresentam respectivamente informações sobre os protocolos UDP, IP, ICMP e TCP.
* http://ldp-br.conectiva.com.br
o Projeto de documentação do Linux em português. Neste endereço é possíveis encontrar informações gerais sobre o Linux, inclusive sobre redes TCP/IP.
* http://www.ictp.trieste.it/~radionet/1998_school/networking_presentation/index.html
o COMPUTER NETWORKING BASICS - por Fonda e Postogna, é um resumo em páginas html de um mini-curso básico de redes de computadores, bem ilustrado. Contém uma descrição bem simples e prática das camadas do modelo OSI. Em inglês.
* http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
o Lista de número de portas TCP e UPD, com classificação de portas oficiais e conflitos.

Exercícios de revisão

1. Conceitue hospedeiro, roteador, firewall, cliente e servidor.

2. Qual a diferença entre os protocolos TCP e IP? Como eles trabalham em conjunto?

3. o que são protocolos? O que é uma pilha de protocolos? O que é o modelo OSI e para que serve?

4. O que é uma RFC e para que serve?

5. converta os números IP:

* a) 10.20.30.40 em hexadecimal e binário
* b) 11100111.11100111.10000001.00001010 em decimal e hexadecimal
* c) 0x11C4C040 em binário e decimal

6. Por que os endereços IP foram divididos em classes? Quais são as classes e como identificamos um número IP como pertencente a uma classe?

7. Qual é a quantidade de endereços de classe A matematicamente possíveis? E de classe B e C?

8. Determine qual é a classe dos seguintes endereços IP:

* a) 12.1.2.3
* b) 200.137.204.1
* c) 10.1.0.1/255.255.255.0
* d) 192.168.1.3/8
* e) 150.150.150.150

9. Conceitue e dê exemplos sobre os endereços especiais:

* a) de broadcast
* b) de rede
* c) privado
* d) localhost
* e) rede padrão (todas redes)

10. Subtraindo-se os endereços especiais de broadcast, de rede, privado, localhost e rede padrão (todas redes), qual é a quantidade de endereços que podem ser atribuídos para hosts na Internet para as classes A, B e C?

11. Suponha que sua rede tenha endereço de broadcast 10.1.255.255. Se na sua rede, contendo vários hosts com este mesmo endereço de broadcast, o que acontece se você executar o comando:

$ ping 10.1.255.255

12. O que é sub-rede? Qual a sua utilidade? Como criar uma sub-rede?

13. Suponha que recebemos um endereço classe A 11.0.0.0 e precisamos dividir esta rede em sub-redes de forma que atenda as necessidades da empresa. Suponha que seja necessário no mínimo 200 sub-redes, com no mínimo 300 hosts em cada sub-rede, com previsão de possível crescimento de 100% tanto em sub-redes quanto em hosts em cada sub-rede. Qual máscara de sub-rede você adotaria? Qual seriam as possíveis sub-redes? Cite um possível número IP desta sua sub-rede e identifique o número de rede, de sub-rede e host.

14. O que são portas TCP? Para que servem? Cite pelo menos 5 número de portas com seus respectivos serviços padrões.

15. O que é uma rota? Qual é o comando para se definir uma rota?

16. O que é um DNS? Para que serve um DNS? Qual é o endereço IP dos hosts: www.sistemasabertos.com.br, www.globo.com, www.uol.com.br?

17. Para que servem os arquivos: /etc/protocols, /etc/services, /etc/hosts?

18. O que é FQDN? Qual a utilidade do comando hostname?

19. Para que serve um módulo de placa de rede? Como você carrega um módulo de placa de rede?

20. Quais são os passos para se configurar manualmente uma interface de rede, com os comandos modprobe e ifconfig?

21. Qual é a utilidade do comando ifconfig?

22. Para que serve o comando route? Cite um exemplo, configurando uma estação, com roteador padrão 10.1.2.3

23. Para que serve o arquivo /etc/resolv.conf?

24. Qual é a utilidade do serviço inetd? Quando devemos utilizá-lo? Qual é o seu arquivo de configuração?Como eu poderia habilitar a execução de um serviço pelo inetd?

25. Qual é a utilidade do tcpd?

26. Qual é a utilidade dos comandos: host, netstat, tcpdump, traceroute e nmap? Cite um exemplo de utilização de cada um destes comandos.

Servidor de nomes - DNS

Este capítulo trata de um dos serviços mais fundamen1ais para o funcionamento da Internet, o serviço de nomes de domínio- DNS, que traduz nomes de hosts em números IP e vice-versa.

Serviços de Nomes - DNS

O DNS - Domain Name Server - se enquadra nos principais serviços de redes TCP/IP. Como já mencionado antes, a finalidade do DNS é converter nomes como www.conectiva.com.br em endereços IP como 200.242.140.10. É importante salientar que o DNS faz também a resolução reversa, ou seja, converte endereços IP para nomes. Neste capítulo veremos como configurar um cliente DNS, e como transformar o Linux em um Servidor de Nomes.

Nos sistemas Linux existem duas técnicas para fazer resoluções, a primeira forma é através de uma tabela de hosts, a outra é feita através da consulta a um servidor de nomes (DNS). A tabela de hosts se refere ao arquivo de mapeamento /etc/hosts (para maiores informações, veja o primeiro capítulo). Por outro lado, o DNS é um banco de dados com servidores distribuídos e organizados de forma hierárquica, espalhados por toda Internet; de forma que todo servidor de nomes é também cliente de outro, pois caso um não consiga resolver um nome (traduzir para um número IP), este consultará outro e assim por diante.

O servidor de nomes padrão na maioria das distribuições de Linux é o software named que está incluso no pacote BIND - Berkeley Internet Name Domain. O pacote BIND, além do servidor DNS, oferece também: biblioteca em linguagem C para ser utilizada em clientes DNS chamada de biblioteca resolver; o utilitário para administração rndc - remote name daemon control program; e os utilitário host para consulta em servidores DNS.

Instalação do BIND

Há basicamente duas formas que podem ser utilizadas para instalar um sistema no Linux.

* 1.Instalação por pacotes. Um pacote de instalação é um conjunto de arquivos binários provenientes do código-fonte compilado para uma plataforma específica. Portanto, você deve utilizar o pacote específico para cada determinado sistema operacional, ou seja, para Linux existem os seus arquivos binários específicos e para outro sistema operacional existirão os seus pertinentes. A principal vantagem de se utilizar instalação por pacotes é a facilidade de instalação, pois não é necessário compilar e algumas vezes os arquivos já vem mais pré-configurados.

* 2.Compilar e instalar. Neste caso você deverá baixar o código fonte do programa, compilar e instalar. Geralmente estes programas vêm compactados e serão compilados através do comando make. Para cada programa você deve seguir as instruções dos arquivos README e INSTALL, estes arquivos geralmente vem junto ao código fonte. A principal vantagem da utilização de compilação de código-fonte para instalação são: maior flexibilidade de configuração e geralmente a versão do programa é superior à última versão existente disponível em por pacotes.

Instalação por pacotes

hand Em nossa instalação vamos utilizar a ferramenta APT (Advanced Packaging Tool). Através da ferramenta APT, podemos verificar que na distribuição Debian 4.0 (etch) existem os pacotes de interesse: bind, bind-dev, bind-doc, bind9, bind9-doc, bind9-host, libbind-dev, libbind9-0. Vejamos:

# aptitude search bind
...
p bind - Internet Domain Name Server
p bind-dev - libraries used by BIND
p bind-doc - documentation for BIND
p bind9 - Internet Domain Name Server
p bind9-doc - Documentation for BIND
p bind9-host - Version of 'host' bundled with BIND 9.X
...

Segue uma descrição de cada pacote:

* bind: servidor de nomes BIND, versão 8
* bind-dev: bibliotecas utilizadas pelo servidor de nomes BIND versão 8
* bind-doc: documentação para o servidor BIND versão 8
* bind9: servidor de nomes BIND, versão 9
* bind9-doc: documentação para o servidor BIND versão 9
* bind9-host: versão do utilitário 'host' para BIND versão 9

Note que você pode instalar a versão 8 ou versão 9 do BIND, adotaremos esta última.

hand Vejamos a seguir a instalação do pacote bind9:

# aptitude install bind9

O pacote bind9 traz os arquivos de configuração prontos para que o named possa ser rodado como um servidor de cache. Isto facilita a configuração do BIND, pois já é um bom começo para os outros tipos de configuração (servidor primário ou servidor secundário). Veremos mais adiante sobre os conceitos de servidor cache, primário e secundário mais adiante.

Uma vez feito isto, seu sistema está pronto para ser configurado.

Compilando e Instalando o BIND

hand Neste caso você deve ter o código fonte do software para compilar e instalar. A última versão do código fonte pode ser encontrada no site http://www.isc.org. Para instalar o BIND:

#cp bind-9.2.0.tar.gz /usr/local/src
#cd /usr/local/src
#tar xvfz bind-9.2.0.tar.gz
#cd bind-9.2.0
#./configure --prefix=/usr/local/bind-9.2.0
#make
#make install
#ln -s /usr/local/bind-9.2.0 /usr/local/bind

Observe que neste exemplo foi utilizado o BIND 9.2. Estes conjuntos de comandos considera que o BIND será todo instalado no diretório /usr/local/bind-9.2.0; isto é realizado através da opção --prefix=/usr/local/bind-9.2.0 do comando ./configure. Esta pode ser uma boa estratégia, uma vez que isto ajuda na administração de seu servidor, pois facilita a identificação dos arquivos do BIND; se esta opção não fosse utilizada, seria executado o padrão, de instalar os arquivos espalhados e misturados com outros em /usr/local/bin, /usr/local/sbin, /usr/local/var, etc. Desta forma, os diretórios bin (executáveis), sbin (executáveis para uso do super-usuário), var (arquivos de banco de dados) e etc (arquivos de configuração) ficam todos abaixo de /usr/local/bind-9.2.0.

O comando make compila o código-fonte e o comando make install instala os binários compilados no diretório indicados.

O comando ln -s /usr/local/bind-9.2.0 /usr/local/bind cria um link simbólico chamado /usr/local/bind; este procedimento pode tornar a sua instalação mais versátil, pois caso seja necessário atualizar o BIND, você pode simplesmente atualizar o link para a versão mais nova. Assim os seus scripts de inicialização de serviços, por exemplo, podem fazer referência ao link (/usr/local/bind) em vez de um caminho da versão específica (/usr/local/bind-9.2.0), causando menos impacto ao atualizar uma versão.

TIP Sempre que encontrar algum problema com a compilação e instalação, veja o arquivos README e INSTALL que acompanham o pacote.

Hierarquia

O DNS se baseia em um banco de dados distribuído, onde as informações são distribuídas em uma topologia em árvore, tudo começando de um ponto de partida. O processo da distribuição de informação é descrita assim, de forma simplificada: para que o DNS possa resolver nomes há um ponto de partida de pesquisa, a partir deste ponto, caso este não resolva o nome solicitado, a consulta é repassada para um dos servidores delegados por este servidor; caso o servidor delegado não resolva, ele irá repassar a consulta novamente para um outro servidor delegado por ele e assim por diante, até que seja encontrado definitivamente o servidor autorizado [authoritative server].

O ponto de partida para toda consulta de nomes é denominado domínio raiz, suportado por vários servidores raízes. Na verdade nenhum servidor raiz não responde diretamente à solicitação de resolução de um endereço. Em vez disso, ele delega a responsabilidade de resolver nomes para um outro servidor, delegando parte do domínio (um sub-domínio).

Os servidores raízes são denominados com um ponto ".", e estão no topo de todas as consultas, ou seja, são os primeiros servidores de DNS a serem consultados. Abaixo do "." há diversos Domínios de Alto Nível (TLDs - Top Level Domains). Sendo os mais conhecidos: o org, net, com e edu, de origem americana; alguns dos domínios fora dos Estados Unidos são também TLDs, e que denominam países e possuem somente duas letras, como br (Brasil), ar (Argentina), de (Alemanha); entre outros. Segue abaixo um diagrama desta hierarquia


Fig. 1 - Hierarquia DNS representando o domínio raiz (•).

TIP Os sub-domínios do domínio raiz, referentes à países são padronizados por órgão internacionais e podem ser consultados em: http://www.userpage.chemie.fu-berlin.de/diverse/doc/ISO_3166.html.

Este diagrama nos mostra os servidores raízes no topo e os "sub-domínios" logo abaixo. Esta configuração nos lembra a árvore de diretório Linux, pois a partir do diretório / (raiz), podemos ir identificando os sub-diretórios até chegarmos no alvo desejado. O princípio da hierarquia DNS segue a mesma analogia.

Exemplo prático - Hierarquia DNS

Inúmeros aplicativos são clientes DNS (navegadores, clientes FTP, ping, etc). Por exemplo, Ao executar o comando:

ftp www.sistemasabertos.com.br

O DNS, que pode ser ou não a máquina local, consulta os servidores raízes sobre o sub-domínio br., que seria, comparado com a hierarquia de diretórios Linux, o sub-diretório do diretório raiz Linux; e caso este servidor conheça, o próximo passo é encontrar o com.br., assim acontece até atingir o servidor que realmente tem a autoridade do sub-domínio para resolver seus endereços IP.

Vamos exemplificar o conceito anteriormente explicado, simulando todos os passos que um DNS local faria para resolver um nome. Vejamos como isto ocorre, usando como exemplo o nome do host : www.sistemasabertos.com.br