Publié le 12 mai 2018 - par

Attribuer une adresse APIPA fixe à un Raspberry Pi headless

Lors des ateliers Raspberry Pi, il arrive souvent d’avoir des Raspberry Pi sans écran. Ils sont connectés à un PC ou MAC via un câble réseau. Au démarrage du Raspberry Pi il n’est pas simple d’obtenir son adresse. Voici une méthode pour vous en sortir simplement en lui donnant une adresse IP fixe.

Attribuer une adresse APIPA fixe à un Raspberry Pi headless

Headless : Sans clavier, souris, ni écran

APIPA : processus qui permet à un système d’exploitation de s’attribuer automatiquement une adresse IP. Vu mon âge, je m’autorise à appeler cela une adresse APAPI 😉

Prérequis :

  • Réalisé sur la version Raspbian Stretch 2018-04-18-raspbian-stretch
  • Une machine Windows 10 avec les logiciels Notepad++  et  putty installés (ou équivalents)
  • Savoir utiliser Notepad++ et putty
  • Afficher les extensions de fichiers dans les fenêtres de dossiers

Les solutions

Ah bin ça ! il y en a plein les forums !
je vous en cite quelques unes ? Allez…

  • Tritouiller les fichiers de config de Raspbian avant de démarrer  (le système doit être démarré ou il faut accéder à la carte via un Linux ou un utilitaire sous Windows)
  • Tritouiller les fichiers de config de Raspbian après avoir démarré. Bin oui, mais là c’est plus du headless, il faut au moins un écran et un clavier pour faire ça.
  • Modifier le serveur DHCP (en général dans la box Internet) pour que le DHCP affecte une adresse IP donnée à une adresse MAC. L’adresse MAC est l’adresse physique de votre carte réseau. Ça veut dire qu’il faut d’abord la relever, puis faire ce qu’on appelle une « réservation » d’adresse…
  • Utiliser une appli sur son smartphone pour identifier les Raspberry Pi du réseau, puis utiliser ces adresses pour VNC (dans ce cas l’adresse n’est même pas fixe)

Il n’y en a surement encore d’autres… mais celles là me suffisent. On voit vite qu’un informaticien n’aura pas trop de difficultés avec ces méthodes (et encore 😉 ). Par contre le gars qui va former un groupe de scolaires à Scratch lors d’un atelier pour lequel il dispose de quelques ordinateur portables (un peu anciens) n’a pas forcément les compétences pour réaliser ces opérations. Et pas forcément le temps non plus, et même pas les codes d’accès pour tritouiller le DHCP ou la box.

Du coup je vous propose la mienne. En bon informaticien j’essaye d’être un bon fainéant : il faut que ça soit simple, facile, pas ch… à mettre en œuvre, même par quelqu’un qui n’y connait pas grand chose.

A ce propos si vous avez besoin de bases de réseau, je vous signale (pub) qu’il y a un chapitre complet sur le réseau, spécialement écrit pour les débutants dans mon livre « Raspberry Pi 3 ou Pi Zero ». Si vous l’avez lu et/ou utilisé, n’hésitez pas à dire ce que vous en pensez dans les commentaires de cette page !

Le problème à résoudre

Il s’agit, sans rien avoir à configurer de relier un Raspberry Pi à un PC portable. Au démarrage, et sans rien avoir à faire, on connait l’adresse du Raspberry Pi, parce qu’on l’a configurée avant (sous Windows) et qu’en quelques secondes VNC est connecté et affiche l’écran du Raspberry Pi.

Ça vous tente ?

L’adressage APIPA

APIPA (Automatic Private Internet Protocol Addressing) ou IPv4LL est un processus qui permet à un système d’exploitation de s’attribuer automatiquement une adresse IP, lorsque le serveur DHCP est hors service ou injoignable.
APIPA utilise la plage d’adresses IP 169.254.0.0/16 (que l’on peut également noter 169.254.0.0/255.255.0.0), c’est-à-dire la plage dont les adresses vont de 169.254.0.0 à 169.254.255.255. Cette plage est réservée à cet usage auprès de l’IANA. (Wikipedia)

Pour résumer, lorsque vous connectez un ordinateur au réseau, celui-ci essaye de récupérer automatiquement une adresse via un serveur d’adresse, nommé DHCP (Dynamic Host Configuration Protocol ou protocole de configuration dynamique des hôtes). Ce DHCP est selon les cas un serveur (en entreprise), un routeur, ou votre box, tout simplement.

Comment faire ?

Bin… il n’y a rien à faire. Les ordinateurs actuels sont prévus pour ça ! Bien entendu si vous ne reliez la prise réseau de votre Raspberry Pi à rien… elle n’aura pas d’adresse IP.
Mais si vous reliez directement (comme sur l’image ci-dessus) votre Raspberry Pi au port réseau d’un PC (oui, d’accord, d’un MAC si vous voulez) les deux machines vont d’abord partir à la recherche d’un serveur DHCP : Elles envoient des messages : « Y’a quelqu’un ? »
Comme personne ne répond, chaque machine va prendre une adresse au hasard entre 169.254.0.0 et 169.254.255.255. Comme il y a 65536 possibilités (je ne chipote pas à une ou deux près) il y a peu de chances que plusieurs machines connectées ainsi prennent la même adresse.
La particularité de cette adresse c’est qu’elle est privée. Elle ne permet de communiquer qu’avec des équipements utilisant la même plage d’adresse. Il sera impossible d’aller sur Internet (pas de routage possible). Il est également impossible de configurer l’ordinateur avec un serveur DNS ou une adresse de passerelle.

A qui ça sert ?

Ça permet à deux ordinateurs de communiquer sans que le client « lambda » n’ait quoi que ce soit à configurer. Le réseau pour les nuls, quoi !

C’est trop beau pour être vrai !

Si, si c’est vrai. Ah oui j’oubliais de vous dire, il y a juste un truc qu’on ne sait pas, c’est quelle adresse APIPA chaque machine va prendre. Il n’y a pas de règle. C’est vraiment au hasard 😉

Je fais quoi pour trouver l’adresse de mon Raspberry Pi, alors ?

On en revient aux solutions du début. Du coup, ce « réseau pour les nuls » devient plus difficile à utiliser par un néophyte en réseau. Pas cool 🙁

Donner une adresse APIPA fixe à un Raspberry Pi

Préparer la carte du Raspberry Pi

Créez votre carte SD comme d’habitude. Utilisez Win32DiskImager ou Etcher à votre convenance. Une fois la carte « cuite », ouvrez le dossier auquel vous accédez depuis votre machine Windows :

Chez moi il s’appelle J: mais vous devez voir comme nom du dossier : boot. c’est la partition sur laquelle le Raspberry Pi démarre quand vous le mettez sous tension.

Modifier le fichier cmdline.txt

Ouvrez ce dossier vous devriez y trouver ce qui suit :

Le fichier qui nous intéresse c’est cmdline.txt.

Ce fichier configure un certain nombre d’options du noyau Linux. Sa particularité c’est qu’il ne doit posséder QU’UNE LIGNE ! D’où l’importance d’utiliser NotePad++ qui n’introduit pas de caractères supplémentaires indésirés.

Ouvrez cmdline.txt avec NotePad++ (ou votre éditeur de texte « propre » – évitez l’éditeur de texte de Windows NotePad)

Cliquez sur l’image pour l’agrandir… Vous verrez les options par défaut de cette version de Raspbian. On va se placer à la fin de la ligne et ajouter l’adresse IP que nous voulons attribuer à notre Raspberry Pi :

Elle est dans la plage APIPA 169.254.XX. j’ai choisi 169.254.0.53. Je mets 53 comme ça je le retiens. C’est mon année de naissance. Ça vous explique aussi le APAPI du début 😛

Et puis c’est tout ! N’allez surtout pas à la ligne, ne tapez pas sur la touche Entrée ! Enregistrez le fichier et votre Raspberry Pi prendra cette adresse la prochaine fois qu’il démarrera et ne trouvera pas de serveur DHCP.

Bien entendu cette adresse en 0.53 est MON adresse, rien ne vous empêche de choisir plus simple, par exemple 0.1. Si vous avez plusieurs Raspberry Pi reliés chacun à un PC, vous pouvez sans remord leur mettre la même adresse IP à tous, car chacun fonctionnera sur son propre réseau.

Activer la prise de main à distance en SSH

Par défaut votre Raspberry Pi n’a aucune interface validée. Vous ne pouvez donc pas vous connecter en SSH depuis un PC. Il faudrait démarrer le Raspberry Pi en le connectant à un écran pour modifier ces paramètres. Heureusement les créateurs de Raspbian ont prévu le coup et  vous pouvez activer le SSH simplement en mettant un fichier (vide) nommé ssh dans le dossier boot dont nous venons de parler.

Faites u clic droit dans le dossier boot. Choisissez Nouveau > Document texte. renommez le fichier ssh, tout simplement, sans l’extension finale .txt.

[stextbox id=’alert’ caption=’Attention’]Si vous ne voyez pas le .txt quand vous créez le fichier, il faut activer l’affichage des extensions.[/stextbox]

Vous devriez obtenir ceci :

Test de l’attribution d’adresse APIPA fixe

Reliez une extrémité du câble réseau à votre Raspberry Pi. Aucun autre câble n’est nécessaire. Ne branchez ni clavier, ni souris, ni câble HDMI pour l’écran.

Démarrez votre Raspberry Pi. Le temps qu’il démarre faites un tour sur le PC

Côté du PC on va voir s’il a pris une adresse APIPA : un ipconfig nous indique qu’il est en 169.254.220.73
Impeccable c’est bien une adresse de type 169.254.XX

Sur le PC démarrez putty et saisissez l’adresse que vous attribuée à votre Raspberry Pi (pour moi 169.254.0.53)

Ah, c’est de bon augure. Ça veut dire que le serveru SSH a bien démarré sur le Raspberry Pi et que putty vous indique que c’est la première fois que vous vous y connectez ! Répondez OUI.

 

Loguez vous au Raspberry Pi (le login par défaut est pi et le mot de passe raspberry). Vous devez avoir l’écran ci-dessus.

Démarrage du serveur VNC

Pour configurer le serveur VNC, on va utiliser raspi-config, puisqu’on est en mode texte. tapez

sudo raspi-config

Dans l’écran d’accueil, descendez sur Interfacing Options et validez

Descendez sur VNC et validez

Mettez en route en allant sur OUI (avec la touche TAB) puis validez

Votre serveur VNC est démarré sur le Raspberry Pi, vous allez pouvoir vous connecter depuis le PC en mode graphique. Faites « Entrée« 

Quand vous revenez à la ligne de commande vous devez afficher ces lignes qui indiquent le démarrage du serveur VNC.

Connexion au Raspberry Pi avec VNC

Sur le PC démarrez VNC Viewer (ou autre) et saisissez l’adresse IP du Raspberry Pi. La fenêtre s’ouvre et affiche l’écran graphique du Raspberry Pi et là… vous pleurez !
Mais que s’est-il donc passé, tout allait si bien…

Je vous rappelle que notre Raspberry Pi est « headless ». Il n’a donc pas de câble HDMI. Par défaut, la vidéo est donc passée en mode analogique, au format TV… Ce qui explique ce format riquiqui. Allez ! On y retourne !

Réglage de la vidéo

Relancez raspi-config (débrouillez vous, je vous ai expliqué comment faire, juste au dessus 🙂 )
Allez dans Advanced Options puis Resolution et choisissez la résolution qui vous convient (là je ne peux pas vous aider, ça dépend du PC que vous utilisez. Si vous ne savez pas… faites quelques essais 😉 )
Terminez la modification et acceptez le redémarrage du Raspberry Pi.
Reconnectez vous avec VNC…

cliquez pour agrandir

ouf ! cette fois l’affichage est bon ! (j’avais choisi 1920×1080)

Conclusion

Après cette configuration d’un Raspberry Pi en headless vous allez pouvoir utiliser les Raspberry Pi sans avoir à leur connecter clavier, souris ou écran et sans avoir à jouer à chat (normal avec Scratch) pour découvrir leur adresse IP

J’espère que cette astuce servira à tous ceux qui animent des ateliers ou des classes dans lesquel(le)s les RasPi sont connectés via un câble réseau à des PC, portables ou non.

Si vous testez cette méthode, n’hésitez pas à faire part de vos remarques dans les commentaires ci-dessous

Sources

 

Share Button

À propos François MOCQ

Électronicien d'origine, devenu informaticien, et passionné de nouvelles technologies, formateur en maintenance informatique puis en Réseau et Télécommunications. Dès son arrivée sur le marché, le potentiel offert par Raspberry Pi m’a enthousiasmé j'ai rapidement créé un blog dédié à ce nano-ordinateur (www.framboise314.fr) pour partager cette passion. Auteur de plusieurs livres sur le Raspberry Pi publiés aux Editions ENI.

22 réflexions au sujet de « Attribuer une adresse APIPA fixe à un Raspberry Pi headless »

    1. François MOCQ Auteur de l’article

      merci
      le seul petit hic c’est que parfois l’adresse APIPA que prends le RasPi n’est pas la bonne… en général il suffit de rebooter pour que ça reprenne la bonne adresse… je n’ai pas trouvé encore le pourquoi du comment
      peut être en mettant un délai sur le réseau?
      à tester
      bonne journée
      cordialement
      François

      Répondre
  1. Skweek-jaune

    Bonjour.

    Article pratique mais ne faudrait il pas précisez que le câble ethernet entre le Pi et le mac/pc doit être un câble Croisée.

    Cordialement.

    Répondre
    1. François MOCQ Auteur de l’article

      bonjour
      pas du tout
      c’est vrai sur des systèmes professionnels (cisco sur lequel j’ai bossé – je suis certifié 🙂 – par exemple)
      mais sur les PC et le Raspberry Pi on est en Auto-MDIX (des deux côtés !)
      c’est pour cela que je n’en ai pas parlé. c’est volontaire
      cet article est destiné à des non informaticiens et/ou non spécialiste des réseaux, restons simples 😉
      cordialement
      François

      Répondre
  2. Robert Mennard

    « il y a peu de chances que plusieurs machines connectées ainsi prennent la même adresse » ???
    En principe il n’y a aucune chance que cela arrive. Ce mécanisme d’autoconfiguration s’assure que l’adresse est disponible en utilisant ARP (cf RFC 3927).
    De plus, en configurant ainsi une adresse dans « cmdline.txt », il n’y a pas d’autoconfiguraion mais tout simplement une IP statique attribuée à l’interface.
    Mieux vaut laisser le système faire son travail et en particulier le démon Avahi fournissant cette fonctionnalité ainsi que le Multicast DNS. Là, il suffit de changer le nom d’hôte et le tour est joué. Il y avait un article détaillé sur le sujet dans un magazine mais je ne me rappel pas lequel.

    Note : APIPA est juste la désignation utilisée par Microsoft. Normalement on parle plutôt d’auto-IP.

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour
      comme indiqué au début  » le gars qui va former un groupe de scolaires à Scratch lors d’un atelier pour lequel il dispose de quelques ordinateur portables (un peu anciens) n’a pas forcément les compétences pour réaliser ces opérations. » cet article s’adresse vraiment à des personnes sans compétences en réseau.
      S’il connait tout ça cet article ne sert à rien 🙂
      J’ai gardé APIPA car il y a une machine Windows (oui je sais, mais souvent les ateliers sont faits avec des vieux PC sous windows – et pas toujours du W10 😛 )

      Répondre
  3. Yann

    Egalement, pour rester dans l’esprit « .. .sans compétences réseau » et pour les newbies qui pédaleraient sous mac Os (dont ma pomme… 😉 ) il reste possible d’utiliser Putty pour dérouler ce chouette tutoriel grâce à l’installation de MacPorts sur le Mac….
    Merci François !

    Répondre
  4. Artemus24

    Salut François.

    J’ai relié mon ordinateur « windows 10 pro » par un câble éthernet directement à ma raspberry pi 2.
    J’utilise la dernière version Raspbian Stretch d’Avril 2018 (version 4.14).

    Coté Raspberry, en faisant « ifconfig », je vois l’adresse « 192.168.1.80 » que j’ai spécifié dans le fichier « cmdline.txt ».
    Si je fais un ping de l’adresse IP APIPA « 169.254.220.168 » de windows, je vois bien mon ordinateur.
    Comment je connais cette adresse ? Tout simplement en faisant un « ipconfig /all » dans l’invite de commande.

    Coté windows, je fais un « ping 192.168.1.80 » et je ne vois pas ma raspberry.
    J’ai pensé que le problème venait de mon pare-feu, alors je l’ai désactivé et cela n’a change rien du tout au problème.

    Inversement, quand je fais « ping raspberrypi » depuis windows, c’est-à-dire en utilisant le hostname de la raspberry, j’obtiens une autre adresse qui est « 169.254.117.54 ».
    De même, je peux voir cette adresse en faisant un « arp -a » depuis windows.
    maintenant, je teste l’accès à ma raspberry en utilisant putty et cela fonctionne correctement.

    Si je supprime « ip=192.168.1.80 » dans le fichier « cmdline.txt » de la raspberry, alors en faisant « ifconfig » je vois l’attribution de l’adresse APIPA « 169.254.117.54 ».
    Ce qui ne fonctionne pas chez moi, et je ne sais pas pourquoi, je ne peux pas attribuer une adresse IP autre que celle donné par APIPA et qui soit visible depuis windows.

    Une astuce pour se connecter à la raspberry en utilisant Putty (donc depuis windows) est d’utiliser, non pas l’adresse IP, surtout si vous ne la connaissez pas, mais le hostname en mettant « raspberrypi.local » dans la zone « host name (or ip adress) » de la catégorie « session » de putty.

    Si François à la solution pour attribuer une adresse IP fixe quand l’adressage APIPA est fonctionnelle et qu’elle soit visible coté windows, je suis preneur.
    Merci pour ce sujet fort intéressant.

    @+

    Répondre
  5. FELIX Rémy

    Bonjour,
    cette article m’interesse car j’ai un probleme.
    J’ai Domoticz d’installer sur un PI3 dans un véhicule avec écran et clavier. Tant que le PI est connectée a la BOX de la maison pas de soucis j’accede a la page web de Domoticz avec l’adresse IP qui lui est affecté par la Box. Par contre quand je perd la connection plus d’adresse IP donc plus d’acces.
    Est-ce que votre solution pourrait resoudre mon probleme ?
    Sachant qu’il serrai sans aucune connection vers un routeur.
    Merci

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour Rémy
      quand vous dites « Par contre quand je perd la connexion plus d’adresse IP donc plus d’acces » si vous êtes en voiture et que vous vous éloignez de la box, vous perdez la connexion et donner une adresse fixe à votre Raspi ne servira à rien si vous êtes hors de portée de la box… vous ne recevez plus le wifi de la box et votre wifi ne l’atteint plus… a quoi servirait une adresse dans ce cas ?
      à moins que je n’aie pas bien compris comment ça fonctionne ?

      Répondre
      1. FELIX Rémy

        Je pourrai continuer a voir mon interface web de Domoticz
        De plus j’ai des scripts python qui me recupére des valeurs de capteurs que j’injecte dans Domoticz avec une interface JSON. Je sais pas si je suis tres clair.

        Répondre
        1. François MOCQ Auteur de l’article

          bonjour
          non je ne sais pas sur quoi vous voulez voir l’interface web ? sur le Raspberry Pi ? où sont les scripts python ? sur le raspberry pi ?
          si le pi s’éloigne de la box vous perdez le contact wifi alors adresse IP ou pas vous ne pouvez plus rien recevoir ni émettre. Mais je ne sais pas quelle est la configuration exacte et qui fait quoi, comment les infos sont échangées… etc.
          difficile de vous répondre

          Répondre
  6. Mario Dureso

    Bonsoir,

    Juste pour préciser que la syntaxe du fichier ‘cmdline.txt’ est différente entre une install ‘classique’ de raspbian telle qu’indiquée ici et une install via ‘Berryboot’ (celui-ci propose également plus d’option, notamment de pouvoir saisir le masque et la passerelle dés le boot).

    Ici, seule l’IP peut être renseignée, avec la syntaxe : ip=xxx.yyy.zzz.ttt

    De meme, si l’install standard de la raspbian accepte la configuration du wifi des le 1er boot via le fichier ‘wpa_supplicant.conf’ (il faut un peu de patiente..), elle ne permet pas d’y affecter une IP statique…

    Dommage, car avec Berryboot, l’install ‘headless’ est vraiment efficace ! (Mais il a
    d’autres inconvénients, notamment au niveau de la gestion des modules du
    noyau..)

    A bientot,

    Répondre
  7. Ankh

    Bonjour,
    Merci pour votre article.
    Cela fonctionne bien, cependant si on débranche le câble réseau entre le Raspberry Pi et le PC et qu’on le rebranche ensuite, impossible de se reconnecter sans redémarrer le Raspberry Pi. Auriez-vous une idée ?

    Répondre
  8. Gordon

    Salut à tous.

    Vous demandez l’équivalent d’un « ipconfig /release » puis d’un « ipconfig /renew » de windows sous linux.

    –> ifconfig eth0 down;
    –> ifconfig eth0 hw ether adresse_mac
    –> ifconfig eth0 up;

    A la condition que l’accès ne se fasse pas par putty.

    @+

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Complétez ce captcha SVP *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.