# TP3 : On va router des trucs
Au menu de ce TP, on va revoir un peu ARP et IP histoire de **se mettre en jambes dans un environnement avec des VMs**.
Puis on mettra en place **un routage simple, pour permettre à deux LANs de communiquer**.

## Sommaire
- [TP3 : On va router des trucs](#tp3--on-va-router-des-trucs)
- [Sommaire](#sommaire)
- [0. Prérequis](#0-prérequis)
- [I. ARP](#i-arp)
- [1. Echange ARP](#1-echange-arp)
- [2. Analyse de trames](#2-analyse-de-trames)
- [II. Routage](#ii-routage)
- [1. Mise en place du routage](#1-mise-en-place-du-routage)
- [2. Analyse de trames](#2-analyse-de-trames-1)
- [3. Accès internet](#3-accès-internet)
- [III. DHCP](#iii-dhcp)
- [1. Mise en place du serveur DHCP](#1-mise-en-place-du-serveur-dhcp)
- [2. Analyse de trames](#2-analyse-de-trames-2)
## 0. Prérequis
➜ Pour ce TP, on va se servir de VMs Rocky Linux. 1Go RAM c'est large large. Vous pouvez redescendre la mémoire vidéo aussi.
➜ Vous aurez besoin de deux réseaux host-only dans VirtualBox :
- un premier réseau `10.3.1.0/24`
- le second `10.3.2.0/24`
- **vous devrez désactiver le DHCP de votre hyperviseur (VirtualBox) et définir les IPs de vos VMs de façon statique**
➜ Quelques paquets seront souvent nécessaires dans les TPs, il peut être bon de les installer dans la VM que vous clonez :
- de quoi avoir les commandes :
- `dig`
- `tcpdump`
- `nmap`
- `nc`
- `python3`
- `vim` peut être une bonne idée
➜ Les firewalls de vos VMs doivent **toujours** être actifs (et donc correctement configurés).
➜ **Si vous voyez le p'tit pote 🦈 c'est qu'il y a un PCAP à produire et à mettre dans votre dépôt git de rendu.**
## I. ARP
Première partie simple, on va avoir besoin de 2 VMs.
| Machine | `10.3.1.0/24` |
|----------|---------------|
| `john` | `10.3.1.11` |
| `marcel` | `10.3.1.12` |
```schema
john marcel
┌─────┐ ┌─────┐
│ │ ┌───┐ │ │
│ ├────┤ho1├────┤ │
└─────┘ └───┘ └─────┘
```
> Référez-vous au [mémo Réseau Rocky](../../cours/memo/rocky_network.md) pour connaître les commandes nécessaire à la réalisation de cette partie.
### 1. Echange ARP
🌞**Générer des requêtes ARP**
- effectuer un `ping` d'une machine à l'autre
````
[justin@john ~]$ ping -c 1 10.3.1.12
PING 10.3.1.12 (10.3.1.12) 56(84) bytes of data.
64 bytes from 10.3.1.12: icmp_seq=1 ttl=64 time=0.623 ms
````
- observer les tables ARP des deux machines
````
[justin@john ~]$ ip neigh
10.0.2.2 dev enp0s3 lladdr 52:54:00:12:35:02 STALE
10.3.1.1 dev enp0s8 lladdr 0a:00:27:00:00:0b REACHABLE
10.3.1.12 dev enp0s8 lladdr 08:00:27:24:c8:63 DELAY
````
````
[justin@marcel ~]$ ip neigh
10.3.1.11 dev enp0s8 lladdr 08:00:27:43:e4:69 STALE
10.3.1.1 dev enp0s8 lladdr 0a:00:27:00:00:0b REACHABLE
10.0.2.2 dev enp0s3 lladdr 52:54:00:12:35:02 STALE
````
- repérer l'adresse MAC de `john` dans la table ARP de `marcel` et vice-versa
- prouvez que l'info est correcte (que l'adresse MAC que vous voyez dans la table est bien celle de la machine correspondante)
Mac de John : 08:00:27:43:e4:69
Mac de Marcel : 08:00:27:24:c8:63
````
[justin@john ~]$ ip neigh | grep 10.3.1.12
10.3.1.12 dev enp0s8 lladdr 08:00:27:24:c8:63 STALE
````
````
[justin@marcel ~]$ ip add show enp0s8
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:24:c8:63 brd ff:ff:ff:ff:ff:ff
inet 10.3.1.12/24 brd 10.3.1.255 scope global noprefixroute enp0s8
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe24:c863/64 scope link
valid_lft forever preferred_lft forever
````
- une commande pour voir la MAC de `marcel` dans la table ARP de `john`
- et une commande pour afficher la MAC de `marcel`, depuis `marcel`
### 2. Analyse de trames
🌞**Analyse de trames**
- utilisez la commande `tcpdump` pour réaliser une capture de trame
- videz vos tables ARP, sur les deux machines, puis effectuez un `ping`
````
[justin@john ~]$ sudo ip neigh flush all
[justin@john ~]$ sudo tcpdump -c 4 -i enp0s8 -w tp2_arp.pcapng arp
dropped privs to tcpdump
tcpdump: listening on enp0s8, link-type EN10MB (Ethernet), snapshot length 262144 bytes
4 packets captured
5 packets received by filter
0 packets dropped by kernel
````
🦈 **Capture réseau `tp2_arp.pcapng`** qui contient un ARP request et un ARP reply
> **Si vous ne savez pas comment récupérer votre fichier `.pcapng`** sur votre hôte afin de l'ouvrir dans Wireshark, et me le livrer en rendu, demandez-moi.
## II. Routage
Vous aurez besoin de 3 VMs pour cette partie. **Réutilisez les deux VMs précédentes.**
| Machine | `10.3.1.0/24` | `10.3.2.0/24` |
|----------|---------------|---------------|
| `router` | `10.3.1.254` | `10.3.2.254` |
| `john` | `10.3.1.11` | no |
| `marcel` | no | `10.3.2.12` |
> Je les appelés `marcel` et `john` PASKON EN A MAR des noms nuls en réseau 🌻
```schema
john router marcel
┌─────┐ ┌─────┐ ┌─────┐
│ │ ┌───┐ │ │ ┌───┐ │ │
│ ├────┤ho1├────┤ ├────┤ho2├────┤ │
└─────┘ └───┘ └─────┘ └───┘ └─────┘
```
### 1. Mise en place du routage
🌞**Activer le routage sur le noeud `router`**
````
[justin@router ~]$ sudo firewall-cmd --get-active-zone
public
interfaces: enp0s3 enp0s8
[justin@router ~]$ sudo firewall-cmd --add-masquerade --zone=public
success
[justin@router ~]$ sudo firewall-cmd --add-masquerade --zone=public --permanent
success
````
🌞**Ajouter les routes statiques nécessaires pour que `john` et `marcel` puissent se `ping`**
````
[justin@john ~]$ sudo ip route add 10.3.2.0/24 via 10.3.1.254 dev enp0s8
[justin@marcel ~]$ sudo ip route add 10.3.1.0/24 via 10.3.2.254 dev enp0s8
````
````
[justin@marcel ~]$ ip add show enp0s8
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:28:e9:56 brd ff:ff:ff:ff:ff:ff
inet 10.3.1.12/24 brd 10.3.1.255 scope global noprefixroute enp0s8
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe28:e956/64 scope link
valid_lft forever preferred_lft forever
````
### 2. Analyse de trames
🌞**Analyse des échanges ARP**
````
[justin@john ~]$ sudo ip neigh flush all
[justin@marcel ~]$ sudo ip neigh flush all
[justin@router ~]$ sudo ip neigh flush all
````
````
[justin@john ~]$ ping 10.3.2.12
PING 10.3.2.12 (10.3.2.12) 56(84) bytes of data.
64 bytes from 10.3.2.12: icmp_seq=1 ttl=63 time=1.89 ms
````
Par exemple (copiez-collez ce tableau ce sera le plus simple) :
| ordre | type trame | IP source | MAC source | IP destination | MAC destination |
|-------|-------------|-----------|-------------------------|----------------|----------------------------|
| 1 | Requête ARP | x | `john` `08:00:27:38:c3:24` | x | Broadcast `FF:FF:FF:FF:FF` |
| 2 | Réponse ARP | x | `routeur 08:00:27:d4:05:3e` | x | `john` `08:00:27:38:c3:24` |
| 3 | Requête ARP | x | `routeur 08:00:27:7a:0e:51` | x | Broadcast `FF:FF:FF:FF:FF` |
| 4 | Réponse ARP | x | `marcel` `08:00:27:28:e9:56` | x | `routeur 08:00:27:7a:0e:51`
| 5 | Ping | `10.3.1.11` | `john` `08:00:27:38:c3:24` | 10.3.2.12 | `marcel` `08:00:27:28:e9:56` |
| 6 | Pong | `10.3.2.12` | `marcel` `08:00:27:28:e9:56` | 10.3.1.11 | `john` `08:00:27:38:c3:24` |
> Vous pourriez, par curiosité, lancer la capture sur `john` aussi, pour voir l'échange qu'il a effectué de son côté.
🦈 **Capture réseau `tp2_routage_marcel.pcapng`**
### 3. Accès internet
🌞**Donnez un accès internet à vos machines**
````
`[justin@router ~]$ ip a | grep enp0s9
inet 10.0.4.15/24 brd 10.0.4.255 scope global dynamic noprefixroute enp0s9`
````
````
[justin@john ~]$ sudo ip route add default via 10.3.1.254 dev enp0s8
[justin@john ~]$ ping 8.8.8.8
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=54 time=15.4 ms
````
Meme commande pour Marcel
----
````
[justin@john ~]$ sudo echo "DNS=1.1.1.1" >> /etc/sysconfig/network-scripts/ifcfg-enp0s3
[justin@john ~]$ cat /etc/sysconfig/network-scripts/ifcfg-enp0s3 | grep DNS
DNS=1.1.1.1
[justin@john ~]$ sudo systemctl restart NetworkManager
[justin@john ~]$ dig gitlab.com | head -n 14 | tail -n 1
gitlab.com. 236 IN A 172.65.251.78
[justin@john ~]$ ping gitlab.com
PING gitlab.com (172.65.251.78) 56(84) bytes of data.
64 bytes from 172.65.251.78 (172.65.251.78): icmp_seq=1 ttl=61 time=25.7 ms
````
Meme commande pour Marcel
----
🌞**Analyse de trames**
````
[justin@john ~]$ dropped privs to tcpdump
tcpdump: listening on enp0s8, link-type EN10MB (Ethernet), snapshot length 262144 bytes
ping -c 1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=113 time=41.4 ms
````
| ordre | type trame | IP source | MAC source | IP destination | MAC destination |
|-------|------------|--------------------|-------------------------|----------------|-----------------|
| 1 | ping | `john` `10.3.1.12` | `john` `AA:BB:CC:DD:EE` | `8.8.8.8` | `08:00:27:d4:05:3e` |
| 2 | pong | `8.8.8.8` | `08:00:27:d4:05:3e` | `john` `10.3.1.12` | `john` `08:00:27:38:c3:24` |
🦈 **Capture réseau `tp2_routage_internet.pcapng`**
## III. DHCP
On reprend la config précédente, et on ajoutera à la fin de cette partie une 4ème machine pour effectuer des tests.
| Machine | `10.3.1.0/24` | `10.3.2.0/24` |
|----------|----------------------------|---------------|
| `router` | `10.3.1.254` | `10.3.2.254` |
| `john` | `10.3.1.11` | no |
| `bob` | oui mais pas d'IP statique | no |
| `marcel` | no | `10.3.2.12` |
```schema
john router marcel
┌─────┐ ┌─────┐ ┌─────┐
│ │ ┌───┐ │ │ ┌───┐ │ │
│ ├────┤ho1├────┤ ├────┤ho2├────┤ │
└─────┘ └─┬─┘ └─────┘ └───┘ └─────┘
john │
┌─────┐ │
│ │ │
│ ├──────┘
└─────┘
```
### 1. Mise en place du serveur DHCP
🌞**Sur la machine `john`, vous installerez et configurerez un serveur DHCP** (go Google "rocky linux dhcp server").
````
[justin@john ~]$ sudo dnf install dhcp-server -y
Complete!
````
````
[justin@bob ~]$ cat /etc/sysconfig/network-scripts/ifcfg-enp0s3
NAME=enp0s3
DEVICE=enp0s3
BOOTPROTO=dhcp
ONBOOT=yes
[justin@bob ~]$ sudo systemctl restart NetworkManager
[justin@bob ~]$ ip a | grep dynamic
inet 10.3.1.2/24 brd 10.3.1.255 scope global dynamic noprefixroute enp0s3
````
🌞**Améliorer la configuration du DHCP**
````
[justin@john ~]$ sudo cat /etc/dhcp/dhcpd.conf | grep routers
option routers 10.3.1.254;
````
````
[justin@john ~]$ sudo cat /etc/dhcp/dhcpd.conf | grep domain
option domain-name-servers 1.1.1.1;
````
````
[justin@bob ~]$ ip a | grep dynamic
inet 10.3.1.4/24 brd 10.3.1.255 scope global dynamic noprefixroute enp0s8
*
[justin@bob ~]$ ping 10.3.1.254
PING 10.3.1.254 (10.3.1.254) 56(84) bytes of data.
64 bytes from 10.3.1.254: icmp_seq=1 ttl=64 time=0.703 ms
````
````
[justin@bob ~]$ ip route
default via 10.3.1.254 dev enp0s8 proto dhcp src 10.3.1.4 metric 101
[justin@bob ~]$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=61 time=63.8 ms
````
````
[justin@bob ~]$ dig gitlab.com | head -n 14 | tail -n 1
gitlab.com. 290 IN A 172.65.251.78
[justin@bob ~]$ ping gitlab.com
PING gitlab.com (172.65.251.78) 56(84) bytes of data.
64 bytes from 172.65.251.78 (172.65.251.78): icmp_seq=1 ttl=61 time=35.1 ms
````
### 2. Analyse de trames
🌞**Analyse de trames**
````
[justin@john ~]$ sudo tcpdump -i enp0s3 -c 10 -w test.pcap not port 22
````
````
[justin@bob ~]$ sudo dhclient -r enp0s3
[justin@bob ~]$ sudo dhclient enp0s3
````
🦈 **Capture réseau `tp2_dhcp.pcapng`**