Configuration du réseau

Objectifs de certification

Linux Essentials

RHCSA EX200

  • 5.Déployer, configurer et gérer des systèmes
    • 5.1. Configurer une résolution de nom d'hôte et de mise en réseau de manière statique ou dynamique
    • 5.9. Configurer des services réseau afin qu'ils se lancent automatiquement au démarrage

LPIC 1

LPIC 2

1. Introduction à TCP/IP

1.1. Protocoles Internet

Un protocole de communication est un ensemble de règles qui rendent les communications possibles car les intervenants sont censés les respecter.

Les protocoles définissent un sorte de langage commun que les intervenants utilisent pour se trouver, se connecter l'un à l'autre et y transporter des informations.

Les protocoles peuvent définir :

  • des paramètres physiques comme des modulations, de type de supports physiques, des connecteurs, ...
  • le comportement d'un certain type de matériel
  • des commandes
  • des machines à état
  • des types de messages
  • des en-têtes qui comportent des informations utiles au transport

Ceux-ci sont discutés et élaborés par des organismes de standardisation.

Les protocoles TCP/IP sont formalisé par l'IETF dans des documents publics qui prennent le nom de RFC ("requests for comments"). On désigne ces documents par de numéro de référence. Tous les RFCs ne sont pas nécessairement des standards ... pour un peu plus de détails sur les RFCs : https://fr.wikipedia.org/wiki/Request_for_comments.

Les protocoles LAN / WAN / PAN sont formalisés par l'IEEE (IEEE 802), par l'ITU, l'ANSI, ...

On distinguera ces organismes de standardisation de consortium commerciaux comme la WiFi Alliance ou des organismes étatiques nationaux et internationaux de régulation comme le FCC, l'ETSI, l'IBPT, etc.

Objectif de TCP/IP

  • Communiquer
    • à l’échelle du globe
    • de manière libérale (ouverte)
  • quel que soit
    • le contenu
    • le support
    • les hôtes

image

L’Internet

L'Internet est l’interconnexion de réseaux à l’échelle du globe. En IPv4, l’Internet a atteint sa taille limite.

Quatre couches

Le modèle de communication TCP/IP compte quatre couches.

  • Couche Application
    • Elle est la couche de communication qui s’interface avec les utilisateurs.
    • Exemples de protocoles applicatifs : HTTP, DNS, DHCP, FTP, ...
    • S’exécute sur les machines hôtes.
  • Couche Transport : TCP
    • Elle est responsable du dialogue entre les hôtes terminaux d’une communication.
    • Les applications utiliseront TCP pour un transport fiable et UDP sans ce service.
    • Les routeurs NAT et les pare-feu opèrent un filtrage au niveau de la couche transport.
  • Couche Internet : IP
    • Elle permet de déterminer les meilleurs chemins à travers les réseau en fonction des adresses IPv4 ou IPv6 à portée globale.
    • Les routeurs transfèrent le trafic IP qui ne leur est pas destiné.
  • Couche Accès au réseau
    • TCP/IP ne s’occupe pas de la couche Accès Réseau
    • Elle organise le flux binaire et identifie physiquement les hôtes
    • Elle place le flux binaire sur les support physique
    • Les commutateurs, cartes réseau, connecteurs, câbles, etc. font partie de cette couche

Plus on monte dans les couches, plus on quitte les aspects matériels, plus on se rapproche de problématiques logicielles.

Encapsulation

  • Pour transmettre du contenu d’un ordinateur à un autre, l’utilisateur va utiliser un programme qui construit un message enveloppé par un en-tête applicatif, SMTP par exemple. Le message subit une première encapsulation.
  • Le logiciel va utiliser un protocole de couche transport correspondant pour établir la communication avec l’hôte distant en ajoutant un en-tête TCP ou UDP.
  • Ensuite, l’ordinateur va ajouter un en-tête de couche Internet, IPv4 ou IPv6 qui servira à la livraison des informations auprès de l’hôte destinataire. L’en-tête contient les adresses d’origine et de destination des hôtes.
  • Enfin, ces informations seront encapsulées au niveau de la couche Accès qui s’occupera de livrer physiquement le message.

A la réception, l'hôte récepteur réalise l'opération inverse en vérifiant les en-têtes de chaque protocole correspondant à une des couches décrites. Ce processus s'appelle la désencapsulation.

Processus de communication

  • Chaque couche ajoute une information fonctionnelle au message original. A la réception, l’hôte examine chaque couche et prend une décision quant à ce trafic.

Modèle TCP/IP détaillé

1.2. Adressage et matériel

Adressage et identifiants

Les machines et leurs interfaces disposent d’identifiants au niveau de chaque couche :

  • Couche Application : Nom de domaine, par exemple : linux.goffinet.org
  • Couche Transport : Port TCP ou UDP, par exemple : TCP80
  • Couche Internet : Adresse IPv4 et/ou IPv6, par exemple : 192.168.150.252/24 ou 2001:db8::1/64
  • Couche Accès : adresse physique (MAC), par exemple une adresse MAC 802 : 70:56:81:bf:7c:37

Rôles des périphériques

IP voit deux rôles :

  1. Les hôtes terminaux : nos ordinateurs au bout du réseau
  2. Les routeurs chargés de transférer les paquets en fonction de l'adresse L3 IP (logique, hiérarchique) de destination. Il permettent d'interconnecter les hôtes d'extrémité.

Aussi au sein du réseau local (LAN), le commutateur (switch) est chargé de transférer rapidement les trames Ethernet selon leur adresse L2 MAC (physique) de destination.

1.3. Routage IP

Domaines IP

  • Deux noeuds (hôtes, interfaces, cartes réseau, PC, smartphone, etc.) doivent appartenir au même réseau, au même domaine IP pour communiquer directement entre eux.
  • Quand les noeuds sont distants, ils ont besoin de livrer leur trafic à une passerelle, soit un routeur.
  • D’une extrémité à l’autre, les adresses IP ne sont pas censées être modifiées (sauf NAT) par les routeurs. Par contre, le paquet est dés-encapsulé /ré-encapsulé différemment au niveau de la couche Accès au passage de chaque routeur.

Type d'adresses IP

Les adresses IP permettent d'identifier de manière unique les hôtes d'origine et de destination. Les routeurs se chargent d'acheminer les paquets à travers les liaisons intermédiaires.

Il existe plusieurs types d'adresses qui correspondent à plusieurs usages.

On trouve au moins trois grandes catégories :

  • les adresses unicast : à destination d'un seul hôte
  • les adresses broadcast (IPv4) : à destination de tous les hôtes du réseau
  • les adresses multicast (IPv4 et IPv6) : à destination de certains hôtes du réseau.

Parmi les adresses unicast on distinguera :

  • les adresses non-routées : locales ou de loopback jamais transférées par les routeurs.
  • les adresses publiques ou globales : pour lesquelles les routeurs publics acheminent les paquets
  • les adresses privées ou unique locale : pour lesquelles seuls les routeurs privés transfèrent le trafic (les routeurs publics ne connaissent pas de chemin pour des destinations privées).

Nécessité du NAT en IPv4

A cause de la consommation galopante d'adresses IPv4 publiques, les autorités de l'Internet on décidé de proposer des solutions :

  • L'adoption d'un protocole nouveau IPv6 corrigeant les problèmes d'IPv4 avec un conseil de transition en double pile IPv4/IPV6.
  • Entre autres solution d'offrir une connectivité IPv4 avec une seule adresse publique qui cache un réseau adressé avec des blocs privés. En vue d'offrir une connectivité globale (publique) à des hôtes privés, une des solutions est la traduction du trafic (NAT). Une autre est la mise en place d'un proxy applicatif. Ces opérations tronquent le trafic IP d'origine, génère de la charge sur les ressources nécessaires à la traduction à la réécriture du trafic dans un sens et dans un autre, ce qui n'est pas sans poser problème et génère un certain coût.

Transition IPv6

Il n'est plus envisagé de manière crédible traduire le nouveau protocole dans l'ancien, IPv6 dans IPv4.

Par contre, l'inverse, soit l'ancien dans le nouveau, IPv4 dans IPv6 annonce la prochaine étape de transition. Les solutions NAT64/DNS64 offrent la possibilité de déploiement "IPv6 Only".

NAT et pare-feu

On a tendance à confondre les fonctionnalités NAT avec celles du pare-feu.

Même si il est probable que le même logiciel prenne en charge les deux fonctions, ces procédures sont distinctes. Alors que le NAT permet de traduire le trafic, il ne protège en rien.

Cette fonction est prise en charge par le pare-feu à état qui arrête les connexions non sollicitées sur le réseau à protéger. Le proxy (mandataire) quant à lui aura d'autres fonction que la traduction telle que le contrôle du trafic qui lui est livré, avec des mécanismes de cache, d'authentification et de transformation du trafic dont aussi la traduction.

Dans tous les cas, c'est la fonction pare-feu qui protège des tentatives de connexions externes.

Adressage IPv4

Une adresse IPv4 est un identifiant de 32 bits représentés par 4 octets (8 bits) codés en décimales séparées par des points.

tableau adresses IPv4

Types d'adresses IPv4 Plages Remarques
Adresses Unicast 0.0.0.0 à 223.255.255.255 Pour adresser les routeurs des réseaux d'extrémité et les ordinateurs accessible à travers l'Internet public
Adresses Unicast privées 10.0.0.0/8 (Classe A), 172.16.0.0/12 (Classe B), 192.168.0.0/16 (Classe C) L'objectif de départ des adresses IPv4 privées est d'identifier des connexions privées (sur des réseaux privés). Mais en situation de carence d'adresses IPv4 publiques, les adresses privées permettent aussi d'adresser des réseaux "clients" d'extrémité. Ceux-ci arrivent à placer du trafic sur l'Internet public grâce à des mécanismes de traduction d'adresses (NAT/PAT). Par défintion, les adresses privées ne trouvent pas de destination sur l'Internet public.
Adresses Multicast 224.0.0.0 à 239.255.255.255 Ces adresses identifient plusieurs interfaces en général sur un réseau contrôlé.

Le masque de réseau lui aussi noté en décimal pointé indique avec les bits à 1 la partie réseau partagée par toutes les adresses d'un bloc. Les bits à 0 dans le masque indiquent la partie unique qui identifie les interfaces sur la liaison. Un masque de réseau est un suite homogène de bits 1 et puis de bits seulement à zéro. Il s'agit donc d'un masque de découpage de blocs homogènes d'adresses IP contigües. Ces blocs communiquent entre eux grâce à des "routeurs", sortent d'intermédiaire d'interconnexion, dont le rôle est justement de transférer du trafic qui ne leur est pas destiné. Les routeurs identifient un point géographique, lieux d'interconnexion des liaisons. Les routeurs IPv4 remplissent souvent des fonctions de traduction.

Par exemple, 192.168.1.25 255.255.255.0 indique un numéro de réseau (première adresse) 192.168.1.0 et un numéro de Broadcast 192.168.1.255. Toutes les adresses comprises entre ces valeurs peuvent être utilisée par les interfaces attachées à une même liaison (un même switch).

Le masque peut aussi respecter la notation CIDR qui consiste à écrire le nombre de bits à 1 dans le masque. Soit dans l'exemple précédent une écriture de type /24 pour les 24 bits à 1 (255.255.255.0). Le masque CIDR s'impose en IPv6 (imaginez des masques de 128 bits en hexadécimal). Cette notation est certainement plus intuitive et plus simple à encoder ou à lire.

A cause du manque d'espace IPv4 disponible, on trouve souvent des masques qui chevauchent les octets, comme par exemple /27 (255.255.255.224) qui offre 32 adresses (5 bits à zéro dans le masque) ou /30 (255.255.255.252) qui offre 4 adresses (2 bits à zéro dans le masque), sans oublier la première (numéro du réseau) et la dernière (l'adresse de diffusion, broadcast) que l'on ne peut attribuer aux interfaces. On constate que si le bits à 1 dans le masque indiquent le découpage de cet espace codé sur 32 bits, les bits à zéro restants donnent l'étendue du bloc.

L'utilitaire ipcalc calcule pour nous les adresses IP :

# ipcalc --help
Usage: ipcalc [OPTION...]
  -c, --check         Validate IP address for specified address family
  -4, --ipv4          IPv4 address family (default)
  -6, --ipv6          IPv6 address family
  -b, --Broadcast     Display calculated Broadcast address
  -h, --hostname      Show hostname determined via DNS
  -m, --netmask       Display default netmask for IP (class A, B, or C)
  -n, --network       Display network address
  -p, --prefix        Display network prefix
  -s, --silent        Don't ever display error messages

Help options:
  -?, --help          Show this help message
  --usage             Display brief usage message

Par exemple :

# ipcalc -n -b -m 192.167.87.65/26
NETMASK=255.255.255.192
BROADCAST=192.167.87.127
NETWORK=192.167.87.64

On trouvera un utilitaire plus explicite avec sipcalc, il est en dépôt chez Debian/Ubuntu. Sous Centos/RHEL, il sera nécessaire de le compiler sois-même (http://www.routemeister.net/projects/sipcalc/files/sipcalc-1.1.6.tar.gz).

# sipcalc -I ens33
-[int-ipv4 : ens33] - 0

[CIDR]
Host address        - 172.16.98.241
Host address (decimal)    - 2886755057
Host address (hex)    - AC1062F1
Network address        - 172.16.98.0
Network mask        - 255.255.255.0
Network mask (bits)    - 24
Network mask (hex)    - FFFFFF00
Broadcast address    - 172.16.98.255
Cisco wildcard        - 0.0.0.255
Addresses in network    - 256
Network range        - 172.16.98.0 - 172.16.98.255
Usable range        - 172.16.98.1 - 172.16.98.254

Adressage IPv6

Les adresses IPv6 sont des identifiants uniques d'interfaces codés sur 128 bits et notés en hexadécimal en 8 mots de 16 bits (4 hexas) séparés par des ":".

Par exemple, pour l'adresse 2001:0db8:00f4:0845:ea82:0627:e202:24fe/64 dans son écriture extensive :

2001:0db8:00f4:0845:ea82:0627:e202:24fe
---- ---- ---- ---- ---- ---- ---- ----
16b  16b  16b  16b  16b  16b  16b  16b
------------------- -------------------
    Préfixe          Interface ID

Ecriture

Voici l'écriture résumée :

2001:0db8:00f4:0845:ea82:0627:e202:24fe
2001:-db8:--f4:-845:ea82:-627:e202:24fe
2001:db8:f4:845:ea82:627:e202:24fe

Ou encore l'adresse fe80:0000:0000:0000:bb38:9f98:0241:8a95 peut être résumée en fe80::bb38:9f98:241:8a95.

Configuration

Ces adresses peuvent être configurées :

  • De manière automatique (autoconfiguration), sans état
  • De manière dynamique avec serveur DHCPv6, avec état
  • De manière automatique et de manière dynamique
  • De manière statique

Une interface IPv6 peut accepter plusieurs adresses et dans des préfixes distincts. L'idée est d'améliorer les politiques de routage et de filtrage en fonction de ces adresses.

Adresses Unicas Globale et Link-Localt

Un premier exemple avec qui illustre des adresses Unicast :

# ip -6 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
    inet6 2001:dc8:f4:845:ea82:627:e202:24fe/64 scope global noprefixroute dynamic
       valid_lft 1209585sec preferred_lft 604785sec
    inet6 fe80::bb38:9f98:241:8a95/64 scope link
       valid_lft forever preferred_lft forever

On y trouve deux interfaces :

  • lo qui prend la seconde adresse de l'espace IPv6. ::1/128 ne joint qu'elle-même directement comme adresse de "Loopback".
  • eth0 : qui prend deux adresses IPv6 :
    • L'une toujours présente se reconnait par son préfixe fe80::/10. Ces adresses sont uniques sur chaque interface et communiquent uniquement avec d'autres interfaces sur le lien local (des voisins) d'où leur "Link-Local Address".
    • L'autre adresse avec le préfixe 2001:dc8:f4:845::/64 indique une adresse publique, soit routable, joignable par Internet et permettant de placer du trafic sur Internet. On l'appelle une adresse GUA "Gobal Unicast Address". Elles s'identifient dans le bloc 2000::/3.

On notera que :

  • Les adresses GUA et link-local disposent d'un masque /64. C'est le masque par défaut de toute interface IPv6 d'un point terminal (endpoint). On propose aux connexions d'entreprise le routage d'un bloc /48 qu'elle pourrait découper sur les 16 bits suivant pour obtenir 65536 blocs /64 à adresser sur ses réseaux.
  • Les adresses GUA et link-local disposent de deux valeurs de durée de vie : valid_lft et preferred qui déterminent la durée de leur validité.

Adresses Mulitcast

Les groupes Multicast dans lesquels les interfaces sont inscrites.

# ip -6 maddress
1:    lo
    inet6 ff02::1
    inet6 ff01::1
2:    eth0
    inet6 ff02::1:ff02:24fe
    inet6 ff02::1:ff41:8a95
    inet6 ff02::1
    inet6 ff01::1

Cela signifie que les interfaces acceptent le trafic dont l'adresse de destination est une de ces adresses qui sont partagées par plusieurs interfaces sur plusieurs hôtes IPv6. A priori, le Multicast n'est pas transféré par les routeurs ; les commutateurs le traitent comme du Broadcast (Diffusion).

Ceci précisé, le Multicast IPv6 désigne finement le trafic sur base de la portée et d'une destination. ff02::1 signifie "tous les hôtes sur le réseau local"; ff01::1 signifie "tous les hôtes sur le noeud local". Les adresses ff02::1:ff02:24fe ff02::1:ff41:8a95 servent de destination au trafic Neighbor Discovery (voir plus bas) qui demande l'adresse physique de livraison inconnue d'une adresse IPv6 à joindre, donc connue d'avance. On reconnait après le préfixe ff02::1:ff/104 les 24 derniers bits 02:24fe et ff41:8a95 de chacune des deux adresses 2001:db8:f4:845:ea82:627:e202:24fe et fe80::bb38:9f98:241:8a95. Il y aura une adresse Multicast différente pour chaque adresse GUA, ULA (Unique Local) ou link-local aux 24 derniers bits différents.

La table de routage indique que le trafic pour l'Internet (default) est livré à adresse link-local du routeur fe80::22e5:2aff:fe1b:656a.

# ip -6 route
2001:db8:f4:845::/64 via fe80::22e5:2aff:fe1b:656a dev ens33  proto ra  metric 100
fe80::22e5:2aff:fe1b:656a dev ens33  proto static  metric 100
fe80::/64 dev ens33  proto kernel  metric 256
default via fe80::22e5:2aff:fe1b:656a dev ens33  proto static  metric 100

Adresses Unique Local (Unicast)

Un second exemple révèle l'existence d'adresses privées IPv6 dans le préfixe fd00::/8, ici sur l'interface eth0 :

# ip -6 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
    inet6 fd00:101::1a8/128 scope global dynamic
       valid_lft 3021sec preferred_lft 3021sec
    inet6 fe80::5054:ff:fe53:c52c/64 scope link
       valid_lft forever preferred_lft forever

Le préfixe fd00::/8 nous renseigne un bloc d'adresses privées dont les 40 bits suivants sont censés être générés de manière aléatoire, ce qui est une obligation mais qui selon moi reste impossible à vérifier. Le préfixe suggéré offre alors un bloc /48 dont on peut compenser 16 bits pour offrir 65536 blocs /64.

Ce type d'adresse privée à préfixe unique répond au problème des blocs IPv4 privés qui sont partagés par l'ensemble des postes de travail ou des périphériques mobiles dans le monde. Cet état de fait en IPv4 rend les connexions de bout en bout complexes à établir à travers un Internet public (notamment à travers des réseaux VPN, pour du partage peer-to-peer pour de la téléphonie Internet, etc.). Ce ne sont pourtant pas les solutions qui manquent mais celle-ci ne font que renforcer la mise en place de bricolages qui dégradent la connectivité.

Transition IPv6

L'Internet des Objets et les services en nuage annoncent une croissance exponentielle des besoins en connectivité auxquels seul IPv6 pourra répondre. L'Internet est entré en juin 2012 dans une très longue phase de transition duale d'IPv4 à IPv6. On pourrait encore parler d'IPv4 d'ici 2025 alors qu'IPv6 dominera les communications TCP/IP. Plusieurs explications apportent de l'eau au moulin de cette longue phase : une répartition des coûts sur tous les acteurs; malgré son aspect logique une migration d'infrastructure est nécessaire à l'échelle globale, sans compter les serveurs publics qui ne seront jamais migrés en IPv6 et qu'il faudra maintenir en IPv4 ...

Synthèse sur les adresses IPv6

En résumé pour IPv6, on peut retenir ce schéma :

Etant donné la multiplication des sources et des destinations potentielles qu'offrent le protocole IPv6, on sera attentif aux configurations des pare-feux.

1.4. Protocoles de résolution d’adresses et de découverte des hôtes

  • Afin d’encapsuler un paquet IP dans une trame, l’hôte d’origine a besoin de connaître l’adresse physique (MAC) de la destination.
  • En IPv4, c’est le protocole ARP (Address Resolution Protocol) qui remplit cette fonction. Les hôtes IPv4 maintiennent une table appelée cache ARP.
  • En IPv6, c’est le protocole ND (Neighbor Discovery), sous-protocole IPv6, qui reprend cette fonction. Les hôtes IPv6 maintiennent une table appelée table de voisinage.

Commandes utiles

  • Table ARP sous Windows et Linux
    • arp -a
  • Table de voisinage sous Linux
    • ip -6 neigh
  • Table de voisinage sous Windows
    • netsh interface ipv6 show neighbors

ARP (Address Resolution Protocol)

Au moment de l'encapsulation d'un paquet IPv4 dans une trame Ethernet ou Wi-fi, l'hôte émetteur connaît d'avance l'adresse IP de destination. Mais comment peut-il connaître son adresse physique correspondante (l'adresse MAC de destination par exemple) afin de placer le trafic sur le support ?

Un hôte TCP/IP ne peut connaître l'adresse de destination sans qu'elle ne s'annonce elle-même de manière gratuite ou de manière sollicitée.

Dans le but de maintenir une correspondance entre des adresses IP à joindre et leur adresses physiques de destination, les hôtes TCP/IP entretiennent une "table ARP" pour les adresses IPv4 et une "table de voisinage" pour les adresses IPv6.

ARP est un protocole indépendant d'IPv4 qui offre ce service de résolution d'adresses.

En IPv6, ce sont des paquets ICMPv6 appelés Neighbor Discovery (ND) qui sont utilisés selon un mode sensiblement différent. En IPv6, les fonctions d'informations et de contrôle (ICMPv6) ont été améliorées et renforcées.

  • La requête ARP émane en Broadcast et la réponse est envoyée en unicast. ND (IPv6) aura un fonctionnement similaire en utilisant une adresse Multicast spéciale en lieu et place du Broadcast.

ND (Neighbor Discovery)

  • Découverte de voisin sollicitée

1.5. Protocole de résolution de noms

  • Au niveau protocolaire, seuls les adresses IP sont utilisées pour déterminer les partenaires d’une communication.
  • Mais dans l’usage courant d’Internet, on utilise des noms pour joindre des machines sur le réseau : c’est plus facile à manipuler que des adresses IP.
  • Le protocole et le système DNS permet de résoudre des noms en adresses IP.
  • DNS est une sorte de service mondial de correspondance entre des noms et des adresses IP. DNS utilise le port UDP 53.

Source : http://visual.ly/help-understanding-dns-lookups

1.6. Protocoles d’attribution d’adresses

  • Avant de pouvoir émettre du trafic TCP/IP, une interface doit disposer au minimum d’une adresse IP et de son masque et, éventuellement d’autres paramètres (passerelle par défaut, résolveur DNS, etc.).
  • En IPv4, c’est DHCP qui permet d’attribuer ces paramètres à une interface qui le demande. DHCP maintient un état des adresses attribuées par un mécanisme de bail (à durée déterminée).
  • En IPv6, le comportement par défaut est l’autoconfiguration des interfaces mais la version actualisée de DHCPv6 fournit un service géré des adresses.

DHCP (IPv4)

  • La procédure d’attribution d’adresses en DHCP (IPv4) consiste en l’échange de 4 messages sur les ports UDP 67 et 68.
  • Le premier message DHCP émane du client en Broadcast.

Capture de trafic DHCP : https://www.cloudshark.org/captures/c109b95db0af

Dans un session typique, le client diffuse (Broadcast) un message DHCPDISCOVER sur son segment local. Le client peut suggérer son adresse IP et la durée du bail (lease). Si le serveur est sur le même segment, il peut répondre avec un message DHCPOFFER qui inclut une adresse IP valide et d'autres paramètres comme le masque de sous-réseau. Une fois que le client reçoit ce message, il répond avec un DHCPREQUEST qui inclut une valeur identifiant le serveur (pour le cas o๠il y en aurait plusieurs). Cette valeur l'identifie de manière certaine et décline implicitement les offres des autres serveurs. Une fois le DHCPREQUEST reçu, le serveur répond avec les paramètres définitifs de configuration par un message DHCPACK (si le serveur a déjà assigné l'adresse IP, il envoie un DHCPNACK).

Si le client détecte que l'adresse IP est déjà utilisée sur le segment, il envoie un DHCPDECLINE au serveur et le processus recommence.

Si le client reçoit un message DHCPNACK du serveur après un DHCPREQUEST, le processus recommence également.

Si le client plus besoin d'une adresse IP, il envoie un DHCPRELEASE au serveur.

Si le client veut étendre la durée du bail qui lui est allouée, il envoie un DHCPREQUEST au serveur dans lequel le champ 'ciaddr' correspondra à son adresse IP actuelle. Le serveur répondra avec un DHCPACK comprenant la nouvelle durée du bail.

DHCPv6

Cette matière est abordée dans le chapitre Services d'infrastructure.

1.7. Interaction des protocoles

  • Avant qu’une interface puisse envoyer du trafic faut-il :
  • qu’elle ait obtenu une adresse IP statique ou dynamique (DHCP en IPv4 ou autoconfiguration/DHCPv6 en IPv6);
  • qu’elle ait résolu le nom de l’hôte destinataire en adresse IP (DNS sur IPv4 ou sur IPv6) ;
  • qu’elle ait obtenu l’adresse du livraison physique de la destination locale ou de la passerelle par défaut si la destination n’est pas locale (ARP en IPv4 ou ND en IPv6).

1.8. Autres protocoles de gestion

  • D’autres protocoles de gestion importants se rencontreront dans les réseaux TCP/IP, à titre d’exemples :
    • ICMP qui permet en IPv4 et en IPv6 d’obtenir du diagnostic IP (ping et traceroute).
    • NTP qui permet de synchroniser les horloges des hôtes sur le réseau.
    • SNMP qui permet de collecter des informations sur le matériel à travers le réseau.
    • SSH qui permet de monter une console distante à travers TCP/IP.
    • Le routage IP met en oeuvre du NAT sur les passerelles des réseaux privés pour offrir une connectivité à l'Internet.
    • ...

2. Synthèse rapide

Il y a trois paramètres nécessaires pour établir une connexion TCP/IP globale à partir d'un ordinateur :

  • Une adresse IP et son masque
  • Une passerelle par défaut
  • Un serveur de résolution de noms

2.1. Une adresse IP et son masque

Commande utiles

Vérification des interfaces

  • Sous Linux :
    • ip addr show
    • ifconfig
  • Sous Windows :
    • ipconfig
    • netsh interface ipv4 show add
    • netsh interface ipv4 show add

Test de connectivité IP

  • Sous Windows en IPv4 sans connectivité IPv6
    • ping www.test.tf
  • Sous Linux en IPv4 (ping) et en IPv6 ping6
    • ping www.test.tf
    • ping6 www.test.tf

2.2. Passerelle par défaut

Commandes utiles

Vérification de la table de routage (IPv4/IPv6)

  • Sous Linux :
    • ip route
  • Sous Windows :
    • ipconfig
    • route
    • netsh interface ipv4 show route
    • netsh interface ipv6 show route

Vérification des sauts

  • Sous Windows :
    • tracert 176.31.61.170
  • Sous Linux :
    • traceroute 176.31.61.170

2.3. Serveur de nom

Commandes utiles

  • Sous Linux :
    • cat /etc/resolv.conf
  • Sous Windows :
    • ifconfig /all
    • netsh interface ipv4 show ?
    • netsh interface ipv6 show ?

Requêtes DNS

  • Sous Linux
    • nslookup
    • dig
  • Sous Windows
    • nslookup

2.4. Fichiers de configuration des interfaces

  • Debian : /etc/network/interfaces/
  • Centos : /etc/sysconfig/network-scripts/ifcfg-$NETDEV

3. NetworkManager

NetworkManager est le démon (par défaut sous Centos/RHEL 7) qui gère les connexions réseau. Il n'empêche pas l'usage des fichiers ifcfg-*.

En Debian/Ubuntu, il sera peut-être nécessaire de l'installer. Aussi, il sera nécessaire de supprimer les entrées des interfaces à gérer par NetworkManager dans le fichier /etc/network/interfaces (man 5 interfaces).

apt-get install network-manager
systemctl stop networking
systemctl disable networking
systemctl enable NetworkManager
systemctl start NetworkManager
systemctl status NetworkManager
● NetworkManager.service - Network Manager
   Loaded: loaded (/lib/systemd/system/NetworkManager.service; enabled)
   Active: active (running) since Wed 2017-02-01 18:09:16 CET; 32s ago
 Main PID: 13994 (NetworkManager)
   CGroup: /system.slice/NetworkManager.service
           └─13994 /usr/sbin/NetworkManager --no-daemon

Feb 01 18:09:16 debian8 NetworkManager[13994]: <info> (lo): carrier is ON
Feb 01 18:09:16 debian8 NetworkManager[13994]: <info> (lo): new Generic devi...)
Feb 01 18:09:16 debian8 NetworkManager[13994]: <info> (lo): exported as /org...0
Feb 01 18:09:16 debian8 NetworkManager[13994]: <info> (eth0): link connected
Feb 01 18:09:16 debian8 NetworkManager[13994]: <info> (eth0): carrier is ON
Feb 01 18:09:16 debian8 NetworkManager[13994]: <info> (eth0): new Ethernet d...)
Feb 01 18:09:16 debian8 NetworkManager[13994]: <info> (eth0): exported as /o...1
Feb 01 18:09:16 debian8 NetworkManager[13994]: <info> startup complete
Feb 01 18:09:16 debian8 NetworkManager[13994]: <info> NetworkManager state i...L
Feb 01 18:09:16 debian8 NetworkManager[13994]: <info> ModemManager available...s
Hint: Some lines were ellipsized, use -l to show in full.

Outre le démon NetworkManager qui se gère directement avec systemctl, il est accompagné de plusieurs outils de diagnostic et de configuration :

  • nm-connection-editor et gnome-control-center network sont les outils graphiques de configuration du réseau.
  • nmtui est l'outil graphique dans un terminal texte
  • nmcli est l'outil en ligne de commande.

Par exemple :

nm-connection-editor

gnome-control-center network

nmtui

nmcli connection show -a

nmcli device status

3.1. Définition du hostname

  • Le nom d'hôte est défini dans le fichier /etc/hostname :
[root@c7li ~]# cat /etc/hostname
c7li
  • On parle alors de "static hostname" mais le noyau maintient un "transient hostname" qui est un nom dynamique (copie du "static"). L'utilitaire hostnamectlvise à maintenir ces deux "hostnames".

Changement du nom d'hôte

  • On peut changer le hostname avec les utilitaires nmtui ou nmcli. Il sera alors nécessaire de redémarrer le service qui gère le hostname :

    # systemctl restart systemd-hostnamed
    
  • On peut aussi utiliser l'utilitaire hostnamectl

Utilitaire hostnamectl

  • Vérification :
# hostnamectl status
   Static hostname: c7li
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 39b49416825c4df8a8b08b98b088a173
           Boot ID: 7137a2fc7d084efcab3d82f37a6f5156
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-327.4.5.el7.x86_64
      Architecture: x86-64
  • Changement des deux hostnames identiques :
# hostnamectl set-hostname c7cli-1
# hostnamectl status
   Static hostname: c7cli-1
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 39b49416825c4df8a8b08b98b088a173
           Boot ID: 7137a2fc7d084efcab3d82f37a6f5156
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-327.4.5.el7.x86_64
      Architecture: x86-64
  • Changement des deux hostnames différents :
# hostnamectl set-hostname c7cli --static
# hostnamectl status
   Static hostname: c7cli
Transient hostname: c7cli-1
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 39b49416825c4df8a8b08b98b088a173
           Boot ID: 7137a2fc7d084efcab3d82f37a6f5156
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-327.4.5.el7.x86_64
      Architecture: x86-64
# hostnamectl set-hostname c7cli --transient
# hostnamectl status
   Static hostname: c7cli
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 39b49416825c4df8a8b08b98b088a173
           Boot ID: 7137a2fc7d084efcab3d82f37a6f5156
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-327.4.5.el7.x86_64
      Architecture: x86-64
  • Effacer un hostname :
hostnamectl set-hostname ""
hostnamectl status
   Static hostname: n/a
Transient hostname: localhost
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 39b49416825c4df8a8b08b98b088a173
           Boot ID: 7137a2fc7d084efcab3d82f37a6f5156
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-327.4.5.el7.x86_64
      Architecture: x86-64
  • Changer un hostname à distance via ssh. Par exemple :
hostnamectl set-hostname -H francois@192.168.23.1

Hostname avec l'utilitaire nmcli

Pour définir le hostname avec nmcli :

nmcli general hostname server01

Vérification :

nmcli general hostname

3.2. Ligne de commande nmcli

nmcli est l'outil en ligne de commande de NetworkManager (https://developer.gnome.org/NetworkManager/unstable/nmcli.html).

nmcli peut interroger 8 objets avec options, commandes et arguments :

nmcli [OPTIONS...] { help | general | networking | radio | connection | device | agent | monitor } [COMMAND] [ARGUMENTS...]
  1. nmcli help : Affiche l'aide
  2. nmcli general : Affiche le statut de NetworkManager, permet de vérifier et configurer le nom d'hôte (hostname), définir des niveaux de journaux (logs).
  3. nmcli networking : permet d'activer, désactiver, vérifier le statut du réseau.
  4. nmcli radio : permet d'activer, désactiver, vérifier le statut des interfaces radio.
  5. nmcli connection : ...
  6. nmcli device : permet de vérifier et gérer les interfaces elle-mêmes.
  7. nmcli agent : permet faire fonctionner un agent de mots de passe ou polkit (EAP).
  8. nmcli monitor : permet d'observer l'activité de NetworkManager notamment pour les changement de connectivité des interfaces réseau.

Par exemple, l'objet general sans option et abrégé :

nmcli general
ÉTAT      CONNECTIVITÉ  WIFI-HW  WIFI    WWAN-HW  WWAN
connecté  plein         activé   activé  activé   activé
nmcli -p general
============================================================
                   État de NetworkManager
============================================================
ÉTAT      CONNECTIVITÉ  WIFI-HW  WIFI    WWAN-HW  WWAN
------------------------------------------------------------
connecté  plein         activé   activé  activé   activé
nmcli -p g
============================================================
                   État de NetworkManager
============================================================
ÉTAT      CONNECTIVITÉ  WIFI-HW  WIFI    WWAN-HW  WWAN
------------------------------------------------------------
connecté  plein         activé   activé  activé   activé

3.3. Configurer une connexion existante

Vérification d'une interface existante :

nmcli d
DEVICE       TYPE      STATE      CONNECTION  
virbr0       bridge    connected  virbr0      
eno16777736  ethernet  connected  eno16777736
virbr0-nic   tap       connected  virbr0-nic  
lo           loopback  unmanaged  --
nmcli c
NAME         UUID                                  TYPE            DEVICE      
virbr0-nic   e9c5d546-e63f-4b79-968f-ccf6b61bce87  generic         virbr0-nic  
virbr0       d7369201-526e-4f29-b0c5-624e11a6d7d9  bridge          virbr0      
eno16777736  d289b1e3-cbdb-4be3-9feb-a8bc82ee9db3  802-3-ethernet  eno16777736
nmcli d show eno16777736
GENERAL.DEVICE:                         eno16777736
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         00:0C:29:D6:02:86
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     eno16777736
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/0
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         172.16.98.164/24
IP4.GATEWAY:                            172.16.98.2
IP4.DNS[1]:                             172.16.98.2
IP4.DOMAIN[1]:                          localdomain
IP6.ADDRESS[1]:                         fe80::20c:29ff:fed6:286/64
IP6.GATEWAY:
nmcli d show eno16777736
connection.id:                          eno16777736
connection.uuid:                        d289b1e3-cbdb-4be3-9feb-a8bc82ee9db3
connection.interface-name:              eno16777736
connection.type:                        802-3-ethernet
connection.autoconnect:                 yes
connection.autoconnect-priority:        0
connection.timestamp:                   1460231515
connection.read-only:                   no
connection.permissions:                 
connection.zone:                        --
connection.master:                      --
connection.slave-type:                  --
connection.autoconnect-slaves:          -1 (default)
connection.secondaries:                 
connection.gateway-ping-timeout:        0
connection.metered:                     unknown
802-3-ethernet.port:                    --
802-3-ethernet.speed:                   0
802-3-ethernet.duplex:                  --
802-3-ethernet.auto-negotiate:          yes
802-3-ethernet.mac-address:             --
802-3-ethernet.cloned-mac-address:      --
802-3-ethernet.mac-address-blacklist:   
802-3-ethernet.mtu:                     auto
802-3-ethernet.s390-subchannels:        
802-3-ethernet.s390-nettype:            --
802-3-ethernet.s390-options:            
802-3-ethernet.wake-on-lan:             1 (default)
802-3-ethernet.wake-on-lan-password:    --
ipv4.method:                            auto
ipv4.dns:                               
ipv4.dns-search:                        
ipv4.addresses:                         
ipv4.gateway:                           --
ipv4.routes:                            
ipv4.route-metric:                      -1
ipv4.ignore-auto-routes:                no
ipv4.ignore-auto-dns:                   no
ipv4.dhcp-client-id:                    --
ipv4.dhcp-send-hostname:                yes
ipv4.dhcp-hostname:                     --
ipv4.never-default:                     no
ipv4.may-fail:                          yes
ipv6.method:                            auto
ipv6.dns:                               
ipv6.dns-search:                        
ipv6.addresses:                         
ipv6.gateway:                           --
ipv6.routes:                            
ipv6.route-metric:                      -1
ipv6.ignore-auto-routes:                no
ipv6.ignore-auto-dns:                   no
ipv6.never-default:                     no
ipv6.may-fail:                          yes
ipv6.ip6-privacy:                       -1 (unknown)
ipv6.dhcp-send-hostname:                yes
ipv6.dhcp-hostname:                     --
GENERAL.NAME:                           eno16777736
GENERAL.UUID:                           d289b1e3-cbdb-4be3-9feb-a8bc82ee9db3
GENERAL.DEVICES:                        eno16777736
GENERAL.STATE:                          activated
GENERAL.DEFAULT:                        yes
GENERAL.DEFAULT6:                       no
GENERAL.VPN:                            no
GENERAL.ZONE:                           --
GENERAL.DBUS-PATH:                      /org/freedesktop/NetworkManager/ActiveConnection/0
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/Settings/0
GENERAL.SPEC-OBJECT:                    /
GENERAL.MASTER-PATH:                    --
IP4.ADDRESS[1]:                         172.16.98.164/24
IP4.GATEWAY:                            172.16.98.2
IP4.DNS[1]:                             172.16.98.2
IP4.DOMAIN[1]:                          localdomain
DHCP4.OPTION[1]:                        requested_domain_search = 1
DHCP4.OPTION[2]:                        requested_nis_domain = 1
DHCP4.OPTION[3]:                        requested_time_offset = 1
DHCP4.OPTION[4]:                        requested_Broadcast_address = 1
DHCP4.OPTION[5]:                        requested_rfc3442_classless_static_routes = 1
DHCP4.OPTION[6]:                        requested_classless_static_routes = 1
DHCP4.OPTION[7]:                        requested_domain_name = 1
DHCP4.OPTION[8]:                        expiry = 1460233018
DHCP4.OPTION[9]:                        domain_name = localdomain
DHCP4.OPTION[10]:                       next_server = 172.16.98.254
DHCP4.OPTION[11]:                       Broadcast_address = 172.16.98.255
DHCP4.OPTION[12]:                       dhcp_message_type = 5
DHCP4.OPTION[13]:                       requested_subnet_mask = 1
DHCP4.OPTION[14]:                       dhcp_lease_time = 1800
DHCP4.OPTION[15]:                       routers = 172.16.98.2
DHCP4.OPTION[16]:                       ip_address = 172.16.98.164
DHCP4.OPTION[17]:                       requested_static_routes = 1
DHCP4.OPTION[18]:                       requested_interface_mtu = 1
DHCP4.OPTION[19]:                       requested_nis_servers = 1
DHCP4.OPTION[20]:                       requested_wpad = 1
DHCP4.OPTION[21]:                       requested_ntp_servers = 1
DHCP4.OPTION[22]:                       requested_domain_name_servers = 1
DHCP4.OPTION[23]:                       domain_name_servers = 172.16.98.2
DHCP4.OPTION[24]:                       requested_ms_classless_static_routes = 1
DHCP4.OPTION[25]:                       requested_routers = 1
DHCP4.OPTION[26]:                       subnet_mask = 255.255.255.0
DHCP4.OPTION[27]:                       network_number = 172.16.98.0
DHCP4.OPTION[28]:                       requested_host_name = 1
DHCP4.OPTION[29]:                       dhcp_server_identifier = 172.16.98.254
IP6.ADDRESS[1]:                         fe80::20c:29ff:fed6:286/64
IP6.GATEWAY:

Pour passer d'une configuration dhcp vers une configuration statique :

  • Nom : ipa.example.com
  • Adresse IPv4 : 172.16.98.200/24
  • Passerelle IPv4 : 172.16.98.2
  • DNS IPv4 : 8.8.8.8
hostnamectl set-hostname ipa.example.com
echo "172.16.98.200 ipa.example.com" >> /etc/hosts
nmcli c mod eno16777736 ipv4.addresses 172.16.98.200/24
nmcli c mod eno16777736 ipv4.gateway 172.16.98.2
nmcli c mod eno16777736 ipv4.dns 8.8.8.8
nmcli c mod eno16777736 ipv4.method manual
nmcli c up  eno16777736
ip a show eno16777736

Dans cet exemple, eno16777736 est le nom du profil de connexion qui correspond à cette interface. Si on veut modifier le nom de profil de connexion, on utilisera la commande nmcli c mod <nom du profil> connection.id <nouveau nom du profil>

3.4. Désactiver NetworkManager

  • Se passer de NetworkManager ?! Oui, pour revenir aux configuration par fichier ...
systemctl status NetworkManager
● NetworkManager.service - Network Manager
   Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
   Active: active (running) since mer. 2016-02-17 22:14:57 CET; 1 weeks 0 days ago
 Main PID: 801 (NetworkManager)
   CGroup: /system.slice/NetworkManager.service
           ├─ 801 /usr/sbin/NetworkManager --no-daemon
           └─2227 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /v...

févr. 24 22:29:51 c7cli dhclient[2227]: DHCPACK from 192.168.122.1 (xid=0x5...)
févr. 24 22:29:51 c7cli NetworkManager[801]: <info>    address 192.168.122.226
févr. 24 22:29:51 c7cli NetworkManager[801]: <info>    plen 24 (255.255.255.0)
févr. 24 22:29:51 c7cli NetworkManager[801]: <info>    gateway 192.168.122.1
févr. 24 22:29:51 c7cli NetworkManager[801]: <info>    server identifier 19...1
févr. 24 22:29:51 c7cli NetworkManager[801]: <info>    lease time 3600
févr. 24 22:29:51 c7cli NetworkManager[801]: <info>    hostname 'c7li'
févr. 24 22:29:51 c7cli NetworkManager[801]: <info>    nameserver '192.168....'
févr. 24 22:29:51 c7cli NetworkManager[801]: <info>  (eth0): DHCPv4 state c...d
févr. 24 22:29:51 c7cli dhclient[2227]: bound to 192.168.122.226 -- renewal....
Hint: Some lines were ellipsized, use -l to show in full.
systemctl stop NetworkManager
systemctl disable NetworkManager
Removed symlink /etc/systemd/system/dbus-org.freedesktop.NetworkManager.service.
Removed symlink /etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service.
Removed symlink /etc/systemd/system/multi-user.target.wants/NetworkManager.service.
  • Redémarrer le service réseau et vérifier :

En Centos/RHEL7 :

systemctl restart network
systemctl status network
● network.service - LSB: Bring up/down networking
   Loaded: loaded (/etc/rc.d/init.d/network)
   Active: active (exited) since mer. 2016-02-24 22:51:59 CET; 6s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 2249 ExecStart=/etc/rc.d/init.d/network start (code=exited, status=0/SUCCESS)

févr. 24 22:51:59 c7cli systemd[1]: Starting LSB: Bring up/down networking...
Hint: Some lines were ellipsized, use -l to show in full.

En Debian/Ubuntu :

systemctl start networking
systemctl status networking
● networking.service - LSB: Raise network interfaces.
   Loaded: loaded (/etc/init.d/networking)
  Drop-In: /run/systemd/generator/networking.service.d
           └─50-insserv.conf-$network.conf
        /lib/systemd/system/networking.service.d
           └─network-pre.conf
   Active: active (running) since Tue 2017-01-31 22:45:08 CET; 19h ago
   CGroup: /system.slice/networking.service
           └─390 dhclient -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhc...

Feb 01 17:23:32 debian8 dhclient[390]: DHCPREQUEST on eth0 to 192.168.122.1...67
Feb 01 17:23:32 debian8 dhclient[390]: DHCPACK from 192.168.122.1
Feb 01 17:23:32 debian8 dhclient[390]: bound to 192.168.122.54 -- renewal i...s.
Feb 01 17:46:46 debian8 dhclient[390]: DHCPREQUEST on eth0 to 192.168.122.1...67
Feb 01 17:46:46 debian8 dhclient[390]: DHCPACK from 192.168.122.1
Feb 01 17:46:46 debian8 dhclient[390]: bound to 192.168.122.54 -- renewal i...s.
Feb 01 18:11:24 debian8 dhclient[390]: DHCPREQUEST on eth0 to 192.168.122.1...67
Feb 01 18:11:24 debian8 dhclient[390]: DHCPACK from 192.168.122.1
Feb 01 18:11:24 debian8 dhclient[390]: bound to 192.168.122.54 -- renewal i...s.
Feb 01 18:20:00 zozo systemd[1]: Started LSB: Raise network interfaces..
Hint: Some lines were ellipsized, use -l to show in full.

4. Librairie iproute2

  • iproute2 est un ensemble d’utilitaires de l’espace utilisateur pour communiquer avec divers noyaux Linux avec le protocole netlink. Plus spécifiquement les utilitaires iproute2 sont utilisés pour contrôler le trafic réseau (TCP, UDP, IPv4, IPv6). Il est aussi utilisé pour configurer les cartes réseau (NIC) filaires et sans fil.

  • Il remplace les net-tools suivants :

Fonction Net-tools iproute2
Configuration des adresses IP et du lien (L2) ifconfig ip addr, ip link
Tables de routage route ip route
Tables de voisinage arp ip neigh
VLAN vconfig ip link
Tunnels iptunnel ip tunnel
Commutation (Bridges) brctl ip link, bridge
Multicast ipmaddr ip maddr
Statistiques netstat ip -s, ss

4.1. Conventions de dénomination des interfaces

Sous Centos 7, RHEL 7, Fedora 21 :

  1. noms prenant les numéros fournis par le Bios/firmware pour les périphériques «on-board» : eno1, em1 (embedded)
  2. noms incorporant l’index pour les cartes PCI-E : ens1
  3. noms incorporant l’emplacement physique du connecteur selon p<port>s<slot> : enp2s0
  4. noms prenant l’adresse MAC de l’interface : enx78e7d1ea46da
  5. dénomination traditionnelle du noyau : eth0, wlan0

4.2. Visualiser les adresses

ifconfig
ip addr show
ip link show

Exercice : Filtre grep/awk sur les sorties, examen attentif des sorties :

ifconfig | grep -w inet | awk '{ print $2}'
ip a s | grep -w inet | awk '{ print $2}'

4.3. Libérer un bail DHCP

  • Pour libérer un bail et arrêter le client DHCP :
dhclient -r
ip addr show
  • Relancer le client et obtenir de nouveaux paramètres DHCP :
dhclient -d
Internet Systems Consortium DHCP Client 4.2.5
Copyright 2004-2013 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/eno16777736/00:0c:29:7b:c0:98
Sending on   LPF/eno16777736/00:0c:29:7b:c0:98
Sending on   Socket/fallback
DHCPDISCOVER on eno16777736 to 255.255.255.255 port 67 interval 4 (xid=0x5511e5b4)
DHCPREQUEST on eno16777736 to 255.255.255.255 port 67 (xid=0x5511e5b4)
DHCPOFFER from 192.168.95.254
DHCPACK from 192.168.95.254 (xid=0x5511e5b4)
bound to 192.168.95.128 -- renewal in 766 seconds.
^C

4.4. Activer/désactiver une interface

  • Activation d'une interface :
ifconfig eth0 up
ip link set eth0 up
  • On peut la désactiver de manière similaire :
ifconfig eth0 down
ip link set eth0 down
  • Sous Debian/Ubuntu, on peut utiliser les scripts suivants :
ifdown eth0
ifup eth0

4.5. Fixer/supprimer une adresse IPv4

Pour fixer une adresse IPv4 :

ifconfig eth0 192.168.0.77/24

ou :

ip address add 192.168.0.77/24 dev eth0

Pour l’effacer :

ip addr del 192.168.0.77/24 dev eth0

4.6. Ajouter une interface alias

ifconfig eth0:1 10.0.0.1/8
ip addr add 10.0.0.1/8 dev eth0 label eth0:1

4.7. IPv6 ip -6 addr

ip -6 addr help
Usage: ip addr {add|change|replace} IFADDR dev STRING [ LIFETIME ]
                                                      [ CONFFLAG-LIST ]
       ip addr del IFADDR dev STRING
       ip addr {show|save|flush} [ dev STRING ] [ scope SCOPE-ID ]
                            [ to PREFIX ] [ FLAG-LIST ] [ label PATTERN ] [up]
       ip addr {showdump|restore}
IFADDR := PREFIX | ADDR peer PREFIX
          [ Broadcast ADDR ] [ anycast ADDR ]
          [ label STRING ] [ scope SCOPE-ID ]
SCOPE-ID := [ host | link | global | NUMBER ]
FLAG-LIST := [ FLAG-LIST ] FLAG
FLAG  := [ permanent | dynamic | secondary | primary |
           tentative | deprecated | dadfailed | temporary |
           CONFFLAG-LIST ]
CONFFLAG-LIST := [ CONFFLAG-LIST ] CONFFLAG
CONFFLAG  := [ home | nodad ]
LIFETIME := [ valid_lft LFT ] [ preferred_lft LFT ]
LFT := forever | SECONDS

4.8. Tables de voisinage

  • Table ARP (IPv4) :
ip neigh show
  • Table ND (IPv6) :
ip -6 neigh show

4.9. Table de routage

route
route -6
ip route
ip -6 route
ip route help
Usage: ip route { list | flush } SELECTOR
       ip route save SELECTOR
       ip route restore
       ip route showdump
       ip route get ADDRESS [ from ADDRESS iif STRING ]
                            [ oif STRING ]  [ tos TOS ]
                            [ mark NUMBER ]
       ip route { add | del | change | append | replace } ROUTE
...
man ip-route

4.10. Route par défaut et routes statiques

Route par défaut

ip route add default via 192.168.1.1

De manière optionnelle on peut indiquer l'interface de sortie :

ip route add default via 192.168.1.1 dev eth0

Route statique

ip route add 192.168.100.0/24 via 192.168.1.1 dev eth0

4.11. Serveurs de noms

On peut le définir via nmcli ou nmtui. Il serait peut-être plus aisé de modifier le fichier /etc/resolv.conf:

cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.21.1
nameserver 8.8.8.8

4.12. Exercice de configuration manuelle des interfaces

  1. Vérifier et noter les paramètre des interfaces réseau :
    • Nom
    • Statut
    • Adresse IP et masque
    • Passerelle
    • Serveur(s) DNS
  2. Arrêter le service réseau
  3. Arrêter le client DHCP et vérifier l'interface
  4. Faire tomber la première interface de l'ordinateur et vérifier
  5. Fixer manuellement une adresse IPv4 et vérifier
  6. Joindre la passerelle, la table ARP et vérifier la table de routage
  7. Ajouter une passerelle par défaut et vérifier
  8. Vérifier la résolution de noms

4.13.Configurations permanentes

Configuration permanente sous debian : éditer le fichier /etc/network/interfaces :

auto lo eth1
allow-hotplug eth0

iface lo inet loopback

iface eth0 inet dhcp

iface eth1 inet static
    address 192.168.0.42
    netmask 255.255.255.0
    gateway 192.195.0.1
    dns-nameservers 192.0.2.71

iface eth1 inet6 static
    address 2001:db8::6726
    netmask 32
    gateway 2001:db8::1
    dns-nameservers 2001:db8::12

Et puis :

/etc/init.d/networking restart

Configuration permanente sous RHEL7 :

Editer le fichier /etc/sysconfig/network-scripts/ifcfg* qui correspond à l’interface à configurer

DEVICE="eth0"
HWADDR="00:21:70:10:7E:CD"
NM_CONTROLLED="no"
ONBOOT="yes"
BOOTPROTO=static
# BOOTPROTO=dhcp
IPADDR=10.16.1.106
NETMASK=255.255.255.0
#
#   the GATEWAY is sometimes in: /etc/sysconfig/network
GATEWAY=10.16.1.1

Fichier /etc/sysconfig/network :

HOSTNAME=acme.example.com
DNS1=10.16.1.112
DNS2=8.8.8.8
## DNS2=76.242.0.28
SEARCH=example.com

Et puis :

systemctl restart network

Il pourrait être utile de lire le document https://wiki.centos.org/FAQ/CentOS7 qui répond à bon nombre de questions sur la configuration du réseau sous Centos.

5. Outils réseau

Diagnostic du réseau et outils d’audit : tcpdump, ping, traceroute, netstat, nslookup, dig

5.1. Tcpdump

Tcpdump permet de capturer des paquets en console.

  • man tcpdump

Par exemple :

tcpdump -ennqti eth0 \( arp or icmp \)

Pour écrire dans un fichier pcap :

tcpdump -ennqti eth0 \( arp or icmp \) -w arp-icmp.pcap

5.2. Commande ping

  • Commande système qui vérifie la connectivité d’une destination avec ICMP.
  • Commande active.
  • Génère des paquets ICMP Echo Request (type 8, code 0) en vue de vérifier la connectivité.
  • Attend des paquets ICMP de retour :
    • Au mieux des ICMP Echo Reply (type 0, code 0).
    • D’autres messages pourraient être reçus (Destination Unreachable, TTL exceeded, ...). Des réponses d'erreurs pourraient revenir et indiquer la nature de l'erreur.
  • Par défaut, l’adresse IP source utilisée est celle de l’interface la plus proche de la destination.
  • Si son usage est abordé ici de manière succincte, la commande entre dans une démarche de diagnostic visant à notamment interpréter les informations qui reviennent (ou ne reviennent pas).

ping : vérification

  • Détermine trois éléments :
    • Si une interface IP est active ou pas par ICMP, pour dire simplement.
    • Le délais des paquets
    • Le taux de perte des paquets
  • Ici la réception de quatre echo reply :
$ ping -c 4 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=51 time=9.31 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=51 time=9.41 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=51 time=9.34 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=51 time=9.41 ms

--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 9.317/9.371/9.417/0.080 ms

ping : interprétation

  • Le diagnostic s’arrête à ICMP et monte à la couche L7 en tentant de joindre des noms.
  • L’hôte de destination peut être configuré pour ne pas répondre à ces requêtes (pare-feu configuré traditionnellement)
  • Peut signifier un problème de routage dans le chemin (un routeur n’arrive pas à placer le paquet).
  • Un élément (pare-feu, proxy) peut filtrer ce trafic dans le chemin.
  • Les résultats de délais et de perte permettent de qualifier la qualité de la transmission. C’est utile pour diagnostiquer du trafic d’applications en temps réel (VoIP, streaming, jeux en ligne, ...).

Connectivité IP globale

  • Vérification de la connectivité locale : vers la passerelle
  • Vérification de la connectivité globale vers une adresse IP globale bien connue :
    • En Belgique, les serveurs DNS de Belgacom : 195.238.2.21, 195.238.2.22
    • Les serveurs DNS IPv4 de Google : 8.8.8.8, 8.8.4.4

ping 8.8.8.8

  • Quel est le trafic généré par un ping 8.8.8.8 ?
aa:bb:cc:dd:ee:ff > ff:ff:ff:ff:ff:ff, ARP, length 42: Request who-has 10.185.220.95 tell 10.185.220.133, length 28
c8:d7:19:23:b6:bf > aa:bb:cc:dd:ee:ff, ARP, length 60: Reply 10.185.220.95 is-at c8:d7:19:23:b6:bf, length 46
aa:bb:cc:dd:ee:ff > c8:d7:19:23:b6:bf, IPv4, length 98: 10.185.220.133 > 8.8.8.8: ICMP echo request, id 14174, seq 1, length 64
c8:d7:19:23:b6:bf > aa:bb:cc:dd:ee:ff, IPv4, length 98: 8.8.8.8 > 10.185.220.133: ICMP echo reply, id 14174, seq 1, length 64

5.3. traceroute/tracert

Les commandes traceroute et tracert (Windows) permettent de détecter les routeurs entre la station d’origine et une destination.

tracert (Windows)

  • Le logiciel envoie trois messages ICMP echo request (type 8, code 0) avec un TTL de 1, puis de 2, et ainsi de suite.
  • Trois réponses sont attendues de la passerelle qui filtre le TTL à 1 : des messages ICMP “TTL Exceeded in Transit” avec des identifiers et Sequence Numbers correspondants.

traceroute (Linux)

  • Le logiciel envoie trois messages UDP avec un TTL de 1, puis de 2, et ainsi de suite. Chaque message est à destination d’un port UDP différent.
  • Trois réponses sont attendues de la passerelle intermédiaire qui filtre le TTL à 1 : des messages ICMP “TTL Exceeded in Transit” embarquant le message UDP original avec son port de destination. Les trois réponses sont représentées dans les trois délais de la sortie.

traceroute interprétation

traceroute : exemple

traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  WDR3600-D3.lan (192.168.100.1)  3.299 ms  3.518 ms  3.434 ms
 2  88.147.32.1 (88.147.32.1)  27.768 ms  27.690 ms  36.957 ms
 3  88.147.95.13 (88.147.95.13)  36.936 ms  37.300 ms  37.230 ms
 4  ge-2-2-2-193.bru20.ip4.tinet.net (77.67.76.121)  37.154 ms  37.076 ms  37.059 ms
 5  xe-0-0-2.ams60.ip4.tinet.net (89.149.180.121)  42.757 ms  42.678 ms  43.997 ms
 6  as15169.ams60.ip4.tinet.net (141.136.102.246)  64.105 ms  60.201 ms  78.499 ms
 7  209.85.248.92 (209.85.248.92)  59.925 ms 209.85.248.112 (209.85.248.112)  34.158 ms  33.950 ms
 8  72.14.238.69 (72.14.238.69)  40.288 ms 209.85.253.249 (209.85.253.249)  64.905 ms  52.239 ms
 9  209.85.254.231 (209.85.254.231)  58.553 ms  59.042 ms  58.659 ms
10  209.85.255.51 (209.85.255.51)  64.564 ms 209.85.254.189 (209.85.254.189)  58.307 ms 216.239.49.30 (216.239.49.30)  58.246 ms
11  * * *
12  google-public-dns-a.google.com (8.8.8.8)  58.556 ms  58.716 ms  43.237 ms

5.4. Vérification des ports TCP/UDP

Commande netstat

  • netstat, pour « network statistics », est une ligne de commande affichant des informations sur les connexions réseau, les tables de routage et un certain nombre de statistiques dont ceux des interfaces, sans oublier les connexions masquées, les membres Multicast, et enfin, les messages netlink.
  • La commande est disponible sous Unix (et ses dérivés dont Linux) et sous Windows NT compatibles.

Commande ss

  • Les ports TCP/UDP IPv4/IPv6 à l'écoute :
ss -antp
State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN     0      128          *:22                       *:*                   users:(("sshd",pid=17454,fd=3))
LISTEN     0      128    127.0.0.1:631                      *:*                   users:(("cupsd",pid=834,fd=13))
LISTEN     0      100    127.0.0.1:25                       *:*                   users:(("master",pid=1359,fd=13))
LISTEN     0      128         :::80                      :::*                   users:(("httpd",pid=9932,fd=4),("httpd",pid=9931,fd=4),("httpd",pid=9930,fd=4),("httpd",pid=9929,fd=4),("httpd",pid=9928,fd=4),("httpd",pid=9925,fd=4))
LISTEN     0      128         :::22                      :::*                   users:(("sshd",pid=17454,fd=4))
LISTEN     0      128        ::1:631                     :::*                   users:(("cupsd",pid=834,fd=12))
  • Toutes les sessions :
ss -a

5.5. La résolution de noms

  • Dans le domaine des réseaux, la résolution de nom fait généralement référence au Domain Name System (DNS), service Internet qui associe des noms d'hôtes à leurs adresses IP;
  • la résolution de noms sur les réseaux peut aussi se faire grâce aux technologies suivantes :
  • WINS (Windows Internet Naming Service) pour les clients utilisant les noms NetBIOS. Samba peut aussi agir comme serveur WINS,
  • NIS Protocole permettant la centralisation d'information sur un réseau Unix. Notamment les noms d'hôtes (/etc/hosts) et les comptes utilisateurs (/etc/passwd).

Résolution locale

  • Le fichier hosts est un fichier utilisé par le système d'exploitation d'un ordinateur lors de l'accès à Internet. Son rôle est d'associer des noms d'hôtes à des adresses IP.
  • Lors de l'accès à une ressource réseau par nom de domaine, ce fichier est consulté avant l'accès au serveur DNS et permet au système de connaître l'adresse IP associée au nom de domaine sans avoir recours à une requête DNS.
  • Le fichier host est en texte brut et est usuellement nommé hosts. Les modifications sont prises en compte directement. Il est présent dans la plupart des systèmes d'exploitation.
  • Unix, Unix-like,POSIX dans /etc/hosts
  • Microsoft Windows %SystemRoot%\system32\drivers\etc\hosts

Domain Name System (DNS)

  • Le Domain Name System (ou DNS, système de noms de domaine) est un service permettant de traduire un nom de domaine en informations de plusieurs types qui y sont associées, notamment en adresses IP de la machine portant ce nom. À la demande de la DARPA, Jon Postel et Paul Mockapetris ont conçu le « Domain Name System » en 1983 et en écrivirent la première réalisation.
  • Ce fichier enregistre l’adresse des serveurs de résolution de nom :
cat /etc/resolv.conf

Domain Name System (DNS)

Source https://fr.wikipedia.org/wiki/Domain_Name_System

  • 1 Rôle du DNS
  • 2 Histoire
  • 3 Un système hiérarchique et distribué
  • 4 Serveurs DNS racine
  • 5 Fully Qualified Domain Name
  • 6 Nom de domaine internationalisé
  • 7 Les techniques du DNS Round-Robin pour la distribution de la charge
  • 8 Principaux enregistrements DNS
  • 9 Time to live
  • 10 Glue records
  • 11 Mise à jour dynamique
  • 12 Considérations opérationnelles

nslookup

  • Commande Linux/Windows permettant de vérifier la résolution de noms.

5.6. dig

apt-get install dnsutils || yum install bind-utils
dig www.google.com aaaa
; <<>> DiG 9.8.3-P1 <<>> www.google.com aaaa
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54128
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.google.com.            IN    AAAA
;; ANSWER SECTION:
www.google.com.        63    IN    AAAA    2a00:1450:4001:801::1014
;; Query time: 123 msec
;; SERVER: 10.185.220.95#53(10.185.220.95)
;; WHEN: Wed May 21 15:04:24 2014
;; MSG SIZE  rcvd: 60

La valeur de la ligne Query time: des sorties de dig permet de se faire une idée des délais de résolution de nom. Ce délai est un indicateur de la qualité de la connexion Internet.

dig auprès d’un serveur spécifique

dig @8.8.8.8 www.google.com aaaa
; <<>> DiG 9.8.3-P1 <<>> @8.8.8.8 www.google.com aaaa
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62597
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.google.com.            IN    AAAA
;; ANSWER SECTION:
www.google.com.        296    IN    AAAA    2a00:1450:400c:c06::93
;; Query time: 45 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Wed May 21 15:05:33 2014
;; MSG SIZE  rcvd: 60

dig succint

dig google.com +nocomments +noquestion +noauthority +noadditional +nostats
dig +short

dig sur les champs MX

dig gmail.com  MX +noall +answer
; <<>> DiG 9.8.3-P1 <<>> gmail.com MX +noall +answer
;; global options: +cmd
gmail.com.        2909    IN    MX    5 gmail-smtp-in.l.google.com.
gmail.com.        2909    IN    MX    10 alt1.gmail-smtp-in.l.google.com.
gmail.com.        2909    IN    MX    20 alt2.gmail-smtp-in.l.google.com.
gmail.com.        2909    IN    MX    30 alt3.gmail-smtp-in.l.google.com.
gmail.com.        2909    IN    MX    40 alt4.gmail-smtp-in.l.google.com.

dig NS record

dig goffinet.org NS +noall +answer
; <<>> DiG 9.8.3-P1 <<>> goffinet.org NS +noall +answer
;; global options: +cmd
goffinet.org.        7200    IN    NS    ns4.zoneedit.com.
goffinet.org.        7200    IN    NS    ns19.zoneedit.com.

dig reverse lookup

dig -x 72.163.4.161
; <<>> DiG 9.8.3-P1 <<>> -x 72.163.4.161
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63459
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;161.4.163.72.in-addr.arpa.    IN    PTR
;; ANSWER SECTION:
161.4.163.72.in-addr.arpa. 300    IN    PTR    www1.cisco.com.
;; Query time: 192 msec
;; SERVER: 10.185.220.95#53(10.185.220.95)
;; WHEN: Wed May 21 15:15:20 2014
;; MSG SIZE  rcvd: 71

dig trace

dig +trace www.test.tf

Transfert de zone AXFR

Ne réaliser l'opération que sur des ressources autorisées !

# dig zonetransfer.me

; <<>> DiG 9.9.5-9+deb8u4-Debian <<>> zonetransfer.me
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39317
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;zonetransfer.me.        IN    A

;; ANSWER SECTION:
zonetransfer.me.    7200    IN    A    217.147.180.162

;; AUTHORITY SECTION:
zonetransfer.me.    86398    IN    NS    nsztm1.digi.ninja.
zonetransfer.me.    86398    IN    NS    nsztm2.digi.ninja.

;; Query time: 2923 msec
;; SERVER: 192.168.122.1#53(192.168.122.1)
;; WHEN: Sun Jan 17 17:44:30 CET 2016
;; MSG SIZE  rcvd: 112
# dig axfr zonetransfer.me

; <<>> DiG 9.9.5-9+deb8u4-Debian <<>> axfr zonetransfer.me
;; global options: +cmd
; Transfer failed.
dig axfr zonetransfer.me @nsztm1.digi.ninja

Ou encore via l'API de hackertarget.com : curl http://api.hackertarget.com/zonetransfer/?q=zonetransfer.me

5.7. Diagnostic fondamental

    1. Collecte d’information :
    2. Connexion de l’interface (oui/non)
    3. Adresse IP, masque, passerelle, serveur DNS, serveur DHCP (paramètres)
    1. Vérification :
    2. Résolution de noms
    3. Connectivité globale
    4. Connectivité locale
    5. Routage

1. collecte d’information

(Sorties type Windows)

  • Commandes :
ip link show
ip addr show
  • Le câble est-il branché ? problème physique/infrastructure
  • Y voit-on des paramètres TCP/IP ?
  • Comment sont-ils attribués ? Problème de configuration d’interface.

2. Vérifications

(Sorties type Windows)

  • Résolution de nom : ping www.google.com
  • nslookup / dig
  • Connectivité globale : ping 8.8.8.8
  • réponse négative distante
  • réponse négative locale
  • pas de réponse
  • Connectivité locale : ping [passerelle]
  • Vérification du routage : ip route show / traceroute

5.8. Protocoles DHCP

Client DHCP

dhclient -4 -x
dhclient -6 -x
dhclient -4 -v
dhclient -6 -v

Documentation

results matching ""

    No results matching ""