# 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**. ![Reboot the router](./pics/reboot.jpeg) ## 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`**