Endereçamento e Encaminhamento (Camada de Rede)
Por Arthur Zopellaro e Tatiane Sousa.
Conteúdo
- Objetivo Geral
- Objetivo Específico
- Metodologia
- Ambiente
- Roteiro
- Considerações Finais
Objetivo Geral
Este laboratório tem por objetivo aplicar os conceitos de Endereçamento e Encaminhamento da camada de Rede do modelo TCP/IP vistos em aula.
Objetivo Específico
O laboratório irá demonstrar a criação de redes de computadores e a comunicação entre os nós de redes, exemplificando a utilização de: Endereço IP, Máscara sub-rede, Gateway e Rota Default, CIDR, NAT e ICMP. O tráfego gerado na simulação das redes será analisado.
Metodologia
O laboratório será dividido em 3 partes.
Instalação
Primeiramente haverá um tutorial para a instalação da ferramenta Netkit, programa utilizado para simulação de redes, e o Wireshark, programa utilizado para analisar o tráfego na rede.
Experimento 1
Em seguida, será utilizado um cenário simples com 4 máquinas interligadas por um hub, havendo comunicação apenas entre 2 dessas máquinas.

Os alunos irão discutir o motivo das duas outras máquinas não estarem se comunicando com as demais. A turma irá acompanhar um passo a passo utilizando comandos reais de Linux para a configuração do Endereço IP e Máscara de sub-rede com o objetivo de conectar as outras duas máquinas na rede. O programa Wireshark será utilizado para analisar datagramas IP que serão enviados entre as máquinas utilizando o protocolo ICMP (ping).
Experimento 2
Para finalizar, utilizaremos um exemplo mais complexo que irá introduzir o conceito de NAT.

Os alunos irão configurar a conexão entre uma rede local e a internet. O programa Wireshark será utilizado em diversas etapas deste experimento para auxiliar na detecção dos problemas envolvidos na comunicação entre uma máquina com IP privado (rede local) e uma máquina com IP público (internet). Serão analisadas as mensagens enviadas entre as máquinas utilizando os protocolos ICMP de ping e traceroute.
Ambiente
O laboratório será executado em um Sistema Operacional Linux, utilizando o programa Netkit para emular a criação de redes de computadores e o programa Wireshark para análise do tráfego na rede.
Roteiro
Antes de iniciar as simulações, devemos instalar e configurar as ferramentas necessárias.
Instalação e Configuração
Nosso ambiente de simulação Linux irá utilizar as ferramentas Wireshark e Netkit.
Instalação do Wireshark
Abra o terminal e execute o seguinte comando para instalar o Wireshark:
$ sudo apt-get install wireshark
Pré-requisitos do Netkit
Primeiramente, acesse a página de downloads do Netkit e baixe os três arquivos em Latest Stable Release:
O netkit foi desenvolvido baseado na arquitetura 32-bit, portanto se seu ambiente Linux for baseado em 64-bit, você deverá instalar algumas bibliotecas de conversão. Para verificar seu ambiente Linux, execute o comando a seguir em seu terminal:
$ uname -i
x86_64
Se o resultado for i386, você pode pular para a Instalação do Netkit. Caso o resultado seja x86_64, você deverá executar os seguintes comandos em seu terminal:
$ sudo apt-get update
$ sudo apt install lib32readline6
$ sudo apt-get install libc6-i386
Instalação do Netkit
Após obter os arquivos necessários do Netkit, mova os arquivos *.tar.bz2 para a pasta /home/usuario/, lembrando de substituir usuario pelo seu nome de usuário.
Feito isso, abra o terminal e vá para sua home com o comando cd e siga os demais comandos conforme mostrado abaixo:
$ cd
$ tar -xjSf netkit-2.8.tar.bz2
$ tar -xjSf netkit-filesystem-i386-F5.2.tar.bz2
$ tar -xjSf netkit-kernel-i386-K2.8.tar.bz2
Após a descompactação dos arquivos, uma pasta netkit será criada em sua home. Agora você precisa indicar o local da instalação do netkit para o Linux:
$ export NETKIT_HOME=~/netkit
$ export MANPATH=:$NETKIT_HOME/man
$ export PATH=$NETKIT_HOME/bin:$PATH
$ . $NETKIT_HOME/bin/netkit_bash_completion
Você deverá repetir os comandos acima toda vez que abrir um novo terminal. Para evitar esse problema, adicione as quatro linhas mostradas anteriormente (sem o $) no final do arquivo /home/usuario/.bashrc.
Para verificar se sua instalação foi bem sucedida, execute:
$ cd $NETKIT_HOME
$ sh check_configuration.sh
Experimento 1 (HUB)
Este é um cenário simples com 4 máquinas interligadas por um hub, havendo comunicação apenas entre 2 dessas máquinas. O objetivo deste experimento é ambientá-lo com as ferramentas de simulação e de análise do tráfego da rede.

Executando a simulação
- Crie uma pasta em sua
/home/usuario/com o nome laboratorio. - Baixe o experimento1.zip e descompacte o arquivo dentro da pasta
/home/usuario/laboratorio/. -
No terminal, entre na pasta experimento1:
$ cd $ cd laboratorio/experimento1/ $ ls lab.conf MAQUINA1.startup MAQUINA3 MAQUINA4.startup lab.dep MAQUINA2 MAQUINA3.startup MAQUINA1 MAQUINA2.startup MAQUINA4O arquivo lab.conf contém informações gerais sobre a simulação, enquanto cada pasta MAQUINAX contém informações sobre a interface de rede. Os arquivos MAQUINAX.startup reconfiguram a interface de rede da máquina para receber as configurações atualizadas. O arquivo lab.dep permite a inicialização paralela das máquinas para agilizar o processo.
-
Inicie o experimento com o comando
lstart:$ lstart ======================== Starting lab =========================== Lab directory: /home/arthurazs/laboratorio/experimento1 Version: 1.0 Author: Arthur Zopellaro, Tatiane Sousa Email: arthurazs@id.uff.br, tatiane.gsousa@gmail.com Web: https://arthurazs.github.io/uff-redes Description: Experimento 1 - HUB ================================================================= You chose to use parallel startup. Starting "MAQUINA1"... Starting "MAQUINA2"... Starting "MAQUINA4"... Starting "MAQUINA3"... The lab has been started. ================================================================= -
Quatro janelas serão abertas conforme a imagem abaixo:

Testando a rede
-
Execute o comando
ifconfignas quatro máquinas virtuais.
-
Execute um
pingda MAQUINA1 para todas as outras máquinas (incluindo a própria MAQUINA1). O comando éping -c 3 192.168.0.XXX, não se esqueça de trocar XXX pelo Endereço IP de cada máquina.
-
A MAQUINA1 consegue enviar para 2 e 3 mas não recebe resposta da 3. A MAQUINA1 não consegue enviar para a 4.

Capturando o tráfego
-
Nós iremos coletar informações da interface das Máquinas 2 e 3. Para salvar os arquivos em sua máquina física, execute o comando a seguir nas máquinas 2 e 3:
# cd /hosthome/laboratorio/
-
Para ajudar na detecção do problema, coloque a MAQUINA2 e 3 para coletar informações sobre o tráfego de mensagens que estejam passando por suas interfaces de rede. Execute o comando abaixo, substituindo o X pelo número da máquina:
# tcpdump -i eth0 -w capturaAX.pcap
-
Faça o passo 2 (Testando a rede) novamente (execute um
ping -c 3da MAQUINA1 para todas as máquinas, incluindo para a MAQUINA1). -
Após finalizar o passo anterior, vá nas máquinas 2 e 3 e aperte
Ctrl + Cpara finalizar a captura de tráfego.
Detectando o erro
-
Em sua máquina local, clique duas vezes nos arquivos gerados com extensão
*.pcap. Analise o tráfego de informação pelo Wireshark, reveja o Endereço IP e a Máscara sub-rede das quatro máquinas e tente descobrir o motivo da falha na comunicação das máquinas 3 e 4.
DICA Qual a diferença no erro de comunicação da máquina 3 e da máquina 4?
-
Após descobrir o problema, atualize o Endereço IP e a Máscara sub-rede de forma adequada nas máquinas sem conexão. Siga o comando abaixo, lembrando de modificar XXX para o Endereço IP correto e YYY para a Máscara sub-rede correta:
# ifconfig eth0 192.168.0.XXX netmask 255.255.255.YYY up -
Repita o passo 2 (Testando a rede) novamente. Se as mudanças corretas forem feitas, a MAQUINA1 receberá resposta de ping de todas as máquinas. Sinta-se a vontade para testar o ping partindo das outras máquinas também.
Finalizando a simulação
-
Para encerrar a simulação, digite
lhaltem seu terminal local:
-
OPCIONAL Caso o comando
lhaltnão funcione, utilize o comandolcrash -F:
-
NOTA O netkit mantém o estado das máquinas virtuais nos arquivos MAQUINAX.disk, possibilitando a continuação da simulação em outro momento. Estes arquivos podem ser extremamente grandes devido ao conflito entre as arquiteturas 32-bit e 64-bit.

Caso tenha concluído a simulação e não deseje manter o estado das máquinas, execute o comando
lclean:
Experimento 2 (NAT)
Este é um cenário mais complexo que irá introduzir o conceito de NAT. O objetivo deste cenário é exemplificar os problemas enfrentados para conectar uma máquina local com a internet e vice-versa.

Todas as máquinas são inicializadas com dois usuários:
- Usuário: aluno / Senha: alu01
- Usuário: professor / Senha: pro01
Executando a simulação
- Baixe o experimento2.zip e descompacte o arquivo dentro da pasta
/home/usuario/laboratorio/criada anteriormente no [Experimento 1]. -
No terminal, entre na pasta experimento2:
$ cd $ cd laboratorio/experimento2/ $ ls EMPRESA1 EMPRESA3 lab.conf SERVIDOR EMPRESA1.startup EMPRESA3.startup lab.dep SERVIDOR.startup EMPRESA2 INTERNET ROTEADOR shared EMPRESA2.startup INTERNET.startup ROTEADOR.startup shared.startupAs pastas EMPRESA3 e SERVIDOR contêm um arquivo de configuração para um servidor FTP. Os arquivos *.startup apresentam outra maneira de inicializar a interface de rede de cada máquina. O arquivo shared.startup cria os usuários aluno e professor em todas as máquinas.
-
Inicie o experimento com o comando
lstart:$ lstart ======================== Starting lab =========================== Lab directory: /home/arthurazs/laboratorio/experimento2 Version: 1.0 Author: Arthur Zopellaro, Tatiane Sousa Email: arthurazs@id.uff.br, tatiane.gsousa@gmail.com Web: https://arthurazs.github.io/uff-redes Description: Experimento 2 - NAT ================================================================= You chose to use parallel startup. Starting "ROTEADOR"... Starting "SERVIDOR"... Starting "INTERNET"... Starting "EMPRESA3"... Starting "EMPRESA2"... Starting "EMPRESA1"... The lab has been started. ================================================================= -
Seis janelas serão abertas conforme a imagem abaixo:

Testando a rede
-
A conexão já está configurada entre o SERVIDOR e a INTERNET. Execute um
pingentre essas máquinas.
-
A conexão já está configurada na rede local: Máquinas da Empresa e o SERVIDOR. Execute um
pingentre essas máquinas.
-
Entretanto, a rede local não consegue se comunicar com a internet e vice-versa. Execute um
pingentre essas duas máquinas.
-
Para uma melhor análise, vamos capturar o tráfego. Primeiro, mude para sua pasta local na máquina INTERNET com o comando
cd /hosthome/laboratorio/:
-
Para testar melhor, iremos executar o
pingda INTERNET para a EMPRESA1 e vice-versa enquanto capturamos o tráfego na interface da INTERNET. Para isso, execute o comando a seguir na máquina INTERNET:# tcpdump -i eth0 -w captura2AI.pcap &ATENÇÃO Não se esqueça do & no final para garantir que o tcpdump irá rodar em paralelo, permitindo a execução de outros comandos.
-
Execute novamente um
pingda INTERNET para a EMPRESA1 e vice-versa. -
Antes de analisarmos o tráfego, precisamos finalizar a execução paralela do tcpdump na INTERNET. Execute o comando a seguir:
# kill $(pidof tcpdump) -
Analise o tráfego de informação pelo Wireshark e reveja os erros apresentados no terminal da INTERNET e EMPRESA1.
Por que o
pingda EMPRESA1 chega na INTERNET mas não consegue retornar?Por que a INTERNET está enviando o
pingpara o ROTEADOR? Por que o ROTEADOR responde com “Destino Inacessível”?DICA Execute o comando
netstat -nrna INTERNET e no ROTEADOR.
Solucionando o problema
-
Para a INTERNET conseguir responder o
pingda rede local, nós iremos utilizar o NAT.O SERVIDOR é a ponte entre a rede local e a internet, portanto ele será o responsável em modificar os pacotes IPs das máquinas locais.
-
Primeiro precisamos habilitar o encaminhamento de pacotes no SERVIDOR. Execute o comando a seguir no terminal do SERVIDOR:
# echo 1 > /proc/sys/net/ipv4/ip_forward -
Agora precisamos habilitar o NAT. Nós iremos utilizar o firewall iptables para controlar o Endereçamento e Encaminhamento dos pacotes. Execute os comandos a seguir no terminal do SERVIDOR:
# iptables -F # iptables -F -t nat # iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE-Fdeleta todas as regras do iptables.-t natse refere a tabela de regras NAT.-A POSTROUTINGadiciona uma nova regra de pós-roteamento.-o eth1especifíca para qual interface essa regra deve ser seguida.-j MASQUERADEespecifíca qual técnica será utilizada. -
Agora será possível completar o
pingda EMPRESA1 para a INTERNET:
-
Capture o tráfego na INTERNET.
# tcpdump -i eth0 -w captura2BI.pcapRepita o passo 4 e analise o tráfego gerado.
-
Entretanto, a INTERNET ainda não tem acesso direto à rede local.
Permitindo o acesso à rede local
-
Primeiro vamos iniciar alguns serviços para que a INTERNET possa estabelecer conexões com a rede local.
-
No SERVIDOR, execute
/etc/init.d/proftpd start.Isso irá iniciar um servidor FTP na porta 20 do SERVIDOR.
-
Na EMPRESA3, execute
/etc/init.d/proftpd start.Isso irá iniciar um servidor FTP na porta 21 da EMPRESA3.
-
Na EMPRESA1, execute
/etc/init.d/ssh start.Isso irá iniciar um servidor SSH na porta 22 da EMPRESA1.
-
-
Teste a conexão entre a INTERNET e o SERVIDOR:
# ftp 202.135.187.131 20Em usuário, digite
aluno. Ao ser requisitado uma senha, digitealu01.
-
Digite
lsna INTERNET para verificar se está conectado no SERVIDOR com o usuário aluno:
-
Digite
exitna INTERNET para encerrar a conexão. -
Teste a conexão entre a INTERNET e a EMPRESA3:
# ftp 202.135.187.131 21 ftp: connect: Connection refusedA conexão não é estabelecida pois o SERVIDOR não tem nenhuma regra para encaminhar conexões.
DÚVIDA Então por que a conexão foi estabelecida com a porta 20?
-
Devemos criar regras no iptables para encaminhar conexões:
- A porta 21 deve ser encaminhada para o IP 192.168.0.3 (FTP)
- A porta 22 deve ser encaminhada para o IP 192.168.0.1 (SSH)
-
No SERVIDOR, execute os comandos a seguir:
# iptables -t nat -A PREROUTING -p tcp --dport 21 -j DNAT --to 192.168.0.3 # iptables -t nat -A PREROUTING -p tcp --dport 22 -j DNAT --to 192.168.0.1-A PREROUTINGadiciona uma nova regra de pré-roteamento.-p tcpespecifíca a regra para um único protocolo de transporte.--dport 21especifíca a regra para uma única porta de destino.-j DNATespecifíca NAT de destino.--to 192.168.0.3especifíca para qual endereço aquela conexão será encaminhada. -
Antes de testarmos as conexões, vamos colocar a EMPRESA2 para capturar o tráfego na rede local:
# cd /hosthome/laboratorio/ # tcpdump -i eth0 -s 1600 -w captura2C2.pcap-s 1600fixa o tamanho da captura dos dados para 1600. -
Partindo da INTERNET, estabeleça uma conexão com o FTP da EMPRESA3 e outra conexão com o SSH da EMPRESA1:
# ftp 202.135.187.131 21 Name (202.135.187.131:root): aluno Password: alu01 ftp> ls ftp> exitO SSH irá pedir para confirmar a chave. Digite
yese aperte enter.# ssh professor@202.135.187.131 -p 22 Are you sure you want to continue connecting (yes/no)? yes professor@202.135.187.131's password: pro01 $ ls $ exit -
Volte na INTERNET, finalize o tcpdump com
CTRL + Ce analise o tráfego capturado no arquivocaptura2C2.pcap.
Analisando a rota
Com tudo configurado, podemos analisar a rota que a EMPRESA1 utiliza para chegar na INTERNET.
-
Configure o SERVIDOR para capturar o tráfego na interface eth0:
# cd /hosthome/laboratorio/ # tcpdump -i eth0 -w captura2DS.pcap -
Na EMPRESA1, execute os dois comandos a seguir para traçar a rota até a INTERNET:
# traceroute 143.102.212.100 # tracert 143.102.212.100Qual a diferença na resposta dos dois comandos?
-
Volte na INTERNET, finalize o tcpdump com
CTRL + Ce analise o tráfego capturado no arquivocaptura2DS.pcap.Qual a diferença entre o
traceroutee otracert?
Finalizando a simulação
-
Para encerrar a simulação, digite
lhaltem seu terminal local: -
OPCIONAL Caso o comando
lhaltnão funcione, utilize o comandolcrash:
Considerações Finais
Dúvidas?
Arquivos de configuração em github.com/arthurazs/uff-redes.