Trabalho 3 - DHCP e NAT
Referências
- DHCP - Dynamic Host Configuration Protocol
- Cisco
NAT - Network Address Translation
Objectivo
No emulador de rede GNS3 dentro da
VM
a correr no
sistema de virtualização
deve configurar a rede da seguinte figura segundo as indicações dadas
abaixo:

- Faça download do
ficheiro com o
projecto
, guarde-o no directório
~ar/GNS3/projects/trab3
, e depois abra-o no GNS3.
- Antes de começar, verifique
em cada um dos terminais que o ficheiro
/etc/dhcp/dhclient.conf
existe e contém a linha
send dhcp-client-identifier = hardware;
Caso contrário, crie-o (numa shell de root) e acrescente essa linha.
- Terminais
- Devem ser configurados por DHCP
- Devem ter a correr os servidores de SSH (sshd) e de FTP (proftpd)
- Router Cisco (RCis)
- A interface externa (f1/0) é configurada por DHCP. Pode ver que
endereço lhe foi atribuído usando o comando
sh ip interface
brief
.
- A interface interna (f1/1) é configurada estaticamente.
- DHCP
- Pool de endereços a atribuir dinamicamente: 172.16.0.50 a
172.16.0.150
- Endereço 172.16.0.11 reservado para o terminal 1
- Além do endereço IP, deverão ser configurados por DHCP
- Default gateway
- Servidor de DNS (usar o 192.168.123.1)
- Máscara de rede
- Nome do domínio (usar o alunos.dcc.fc.up.pt)
- Configure a duração das leases, que deverá ser sempre de
1 hora.
- NAT
- Fazer NAT usando o endereço da interface externa (f1/0) do router e activar overloading (PAT)
- Redireccionar (port forwarding) a porta 8022 da interface
externa (f1/0) para a porta 22 (ssh) do terminal 1
- Router Linux (a configurar posteriormente)
- DHCP
- Configuração idêntica à que tinha RCis
- Duração máxima das leases de 2 horas.
- NAT
- Configure as
iptables
para masquerading, isto é,
source NAT usando o endereço (dinâmico) da interface externa.
As regras criadas com o comando
iptables
são temporárias (regras permanentes são geridas
no serviço firewalld, fora do âmbito deste trabalho). Se quiser
pode guardá-las num ficheiro usando
iptables-save file
e depois recuperá-las usando
iptables-restore file
- Deve ter a correr o servidor de SSH.
Questões/Traces/Análise
- Nos terminais 1 e 2 desactive a interface de rede
(
ifdown ens3
)
e limpe a cache do dhclient
com
rm -f
/var/lib/{dhclient,NetworkManager}/dhclient-*.lease
.
Limpe também em RCis eventuais leases anteriores com
clear ip dhcp binding
*
.
- Inicie uma captura wireshark na interface f1/1 de RCis e
volte a activar a interface
ens3
do
terminal 1. Repita o procedimento para o terminal 2.
As capturas devem mostrar o conteúdo das mensagens.
(2 × capRes)
- Apenas a partir das mensagens capturadas e respectivo conteúdo é
possível saber qual dos dois tem um endereço fixo (atribuição manual)?
Justifique. (texRes)
- No router RCis active o debugging do NAT com o comando
debug ip nat
detailed
. No terminal 1, faça download do ficheiro
https://www.dcc.fc.up.pt/~rprior/dcc.png
(use o wget
ou o curl
).
Referindo-se explicitamente às linhas de output de RCis, explique o
trabalho do NAT (outRes + texRes).
NOTA: Vai haver NAT para dois fluxos
de comunicação diferentes, um para o DNS (UDP, porta 53) e outro para o
HTTPS (TCP, porta 443). Considere apenas o segundo (HTTPS).
- Desactive a interface de rede do terminal 2, desligue-o do SW2 e ligue-o
no SW1, e volte a activá-la.
Veja que endereço lhe foi atribuído (deve ser da rede 192.168.123.0/24).
Do terminal 1, faça um ssh
para o terminal 2
( ssh ar@<ip_term2>
).
Nessa shell, corra o comando while true; do echo hello; sleep 1; done
para
que o servidor ssh vá gerando pacotes.
Explique o que acontece quando usa o comando clear
ip nat translation *
e comente a afirmação Quando
usamos NAT com tradução de portas, os fluxos de pacotes passam de
connectionless para connection-oriented
. (texRes)
NOTAS:
(1) A conexão deve cair. Eventualmente, pode ter
que correr mais que uma vez o comando para limpar os mapeamentos NAT, pois
o que acontece depende da ordem dos pacotes de entrada e saída.
(2) Para perceber melhor o que se passa, pode fazer capturas nas duas
interfaces de RCis.
- Ainda com o terminal 2 ligado no SW1, faça um
ssh
do
desse terminal para o terminal 1.
- Indique o comando utilizado. (texRes)
- Identifique uma situação em que é necessário fazer port
forwarding usando uma porta não-standard. (texRes)
- Desligue RCis dos comutadores SW1 e SW2 e ligue RLin a ambos para
substituir RCis (tem que configurar o servidor de DHCP e o NAT).
A interface externa deve ser a
ens3
(Ethernet0
).
O terminal 2 deve continuar ligado no SW1.
Certifique-se de que o servidor de ftp está a correr nos terminais 1
e 2 e que não está a correr no Router Linux (use os
comandos netstat -ant
para ver se tem algum processo na
porta 21 e systemctl start|stop|status proftpd
para
activar, desactivar ou verificar o estado do servidor FTP).
Ponha o wireshark a capturar em todas as interfaces do Router Linux.
Em todas as alíneas desta pergunta deve correr
o ftp em modo
activo (use ftp -A
).
Para melhor compreender o que se passa, atente aos endereços IP dos pacotes
capturados e procure nesses pacotes os comandos PORT
(ou
EPRT
) do FTP.
- Do terminal 2, tente fazer um ftp para o terminal 1 e fazer
download (
get
) de um ficheiro. Justifique o
insucesso deste procedimento. (capRes + texRes)
- No router Linux, redireccione (port forwarding) a porta
21 da interface exterior (ens3) para a porta 21 (ftp) do terminal 1.
(confRes)
- Tente novamente fazer o ftp e transferir um ficheiro. Comente os
resultados, referindo o que acontece nas conexões de controlo e de dados.
(capRes + texRes)
- Tente agora fazer um ftp do terminal 1 para o terminal 2 e fazer
download de um ficheiro. Comente os resultados.
(capRes + texRes)
- No router Linux, instale o módulo de suporte NAT para ftp
e active-o usando os comandos
Tente novamente o
ftp da alínea anterior e comente os resultados tendo em conta o que
acontece na conexão de controlo e na de dados. (capRes + texRes)