Imprimante 3D

Octoprint accessible de partout.

Nous avons mis en place un Octoprint chez vous, au travers de nombreux tutoriels vous avez maintenant une installation pleinement fonctionnelle.
Revenons sur le principe même d’Octoprint, contrôler à distance une imprimante 3D. Il est quand même dommage de se dire que le « à distance » se résume pour le moment à votre maison.

Comment rendre le contrôle de votre imprimante disponible depuis votre lieu de travail, votre téléphone alors que vous faites vos courses?
Surveiller une impression importante mais relativement longue tout en étant à l’exterieur. Pouvoir la stopper ou la mettre en pause en cas de problème en plein apéro?

Et de préférence tout cela de manière sécurisée !!!

Octoprint sur internet et crypté en https

Un peu de théorie

Avant de rentrer dans le vif du sujet, je vais vous faire un petit rappel théorique afin que vous compreniez bien les problèmes que nous devrons résoudre.

Nous allons donc voir ces différentes notions :

  • Nom de domaine et adresse Ip
  • Redirection de port
  • Certificat HTTPS pour crypter et sécuriser les échanges entre vous et votre Octoprint.

Nom de domaine et adresse IP

Lorsque vous voulez vous rentre sur un site, vous tapez dans la barre d’adresse de votre navigateur un nom de domaine, par exemple www.google.com, ce nom de domaine est en fait informatiquement transformer en une adresse IP.
Le premier problème que nous allons donc devoir résoudre est double.  Vous trouvez un nom de domaine et faire en sorte qu’il pointe sur votre adresse Ip de votre abonnement Internet.

En effet la plupart des abonnements Internet ont une adresse IP fluctuante. Dès que vous redémarrez votre box internet, votre adresse Ip change !!!

Redirection de port.

Vous avez une adresse Ip dite publique qui pointe vers chez vous. Mais chez vous, vous avez plusieurs appareils connectés à votre box internet, votre ordinateur, vos téléphones, votre Raspberry.

Comment allons nous faire en sorte que votre Octoprint répondre à votre nom de domaine?

Certificat HTTPS.

A partir du moment ou nous ouvrons notre Octoprint à internet, il est fortement conseillé de crypter nos échanges comme pour un site E-commerce ou bancaire. Avec un certificat HTTPS reconnu par un organisme.

Nous allons mettre tout cela en place en privilégiant des solutions opensources et gratuites.

Avoir un nom de domaine pour votre Octoprint.

Nous allons utiliser le service freedns.
Ce service dispose de nombreux avantages :

  • Il est gratuit
  • Vous pouvez choisir votre nom sous nom de domaine.
  • ils mettent à disposition un procédé simple à mettre en place qui permet à votre nom de domaine de toujours pointer vers votre domicile.

Rendez vous à l’url : https://freedns.afraid.org

Si vous avez pas de compte, nous allons commencer par en créer un à cette adresse :  https://freedns.afraid.org/signup/?plan=starter

Vous rentrez simplement les informations, telles que votre nom et prénom (1)(2), un login (3) et un mot de passe (4)(5), ainsi que votre email (6). Attention, un email de confirmation vous sera envoyé. Vérifiez bien vos courriers indésirables pour cliquer sur le lien d’activation.

Quand cela est fait, vous pourrez alors créer un sous domaine.
Après vous être identifié, cliquez sur Subdomains (1), choisissez un nom de sous domaine (2) et un domaine comme vous le voulez dans le champs select (3) , rentrez le capcha et sauvegarder (4).

Voila vous avez maintenant un sous domaine de disponible.
Mettons maintenant en place le ciblage IP.

Cliquez sur Dynamic DNS (1), puis en bas de la page vous trouverez le sous nom de domaine précédemment créé et cliquez sur quick cron example (2)

Le site va générer un fichier paramétré entièrement pour vous.

Nous allons récupérer la dernière ligne de ce fichier pour l’intégrer à votre Raspberry.

Connectez vous via le logiciel Putty à votre Raspberry.

Vous allez devoir modifier cette ligne de commande avant de la coller dans le terminal.

Pour cela, ouvrez notepad ++ et copiez la ligne ci-dessous et effectuer la modification comme indiqué. Conservez bien les  » .

echo « COPIEZ ICI LA DERNIERE LIGNE DU FICHIER PRECEDENT EN ENTIER » >> /root/crontab && crontab /root/crontab

Allez dans le terminal et passez en super utilisateur en tapant : sudo su –
Puis coller la commande que vous venez de modifier.

Voila nous avons maintenant une tâche planifiée qui va faire le lien entre votre adresse ip et votre sous nom de domaine.

Redirection de port.

Malheureusement je ne peux pas vous faire des captures d’écran pour ceci. En effet vous allez devoir vous connecter à votre Box internet.
Je vous conseille de faire une recherche sur internet pour :

  • faire une réservation d’adresse Ip pour votre Raspberry
  • Mettre en place un transfert de port. , le 443 (port du https) vers l’adresse Ip du Raspberry où se trouve votre Octoprint.
  • Vous devrez aussi mettre en place le transfert de port 80 (http) vers l’adresse Ip du Raspberry.

Cela suivant votre opérateur et le modèle de votre box Internet.

Création un certificat HTTPS pour votre Octoprint

Nous allons mettre en place un certificat letsencrypt.
Lancez Putty et connectez vous à votre Raspberry et passez en super utilisateur (sudo su –)

Nous allons commencer par installer le programme certbot

apt update
apt install certbot

Dans la suite vous devrez modifier votre.nomdemaine.com par le nom de domaine que vous avez créé avec le site freedns

/etc/init.d/haproxy stop && certbot certonly --standalone -d votre.nomdedomaine.com && /etc/init.d/haproxy start

Après avoir suivi les instructions, vous devriez avoir ce résultat :

Il ne nous reste plus qu’à mettre de nouveau en place une tâche planifiée afin de renouveler automatiquement le certificat.

echo "30 2 1,15 * * /etc/init.d haproxy stop && /usr/bin/certbot renew && /etc/init.d/haproxy start" >> /root/crontab && crontab /root/crontab

Installation du certificat.

Modifiez bien votre.nomdedomaine.com par le nom de domaine que vous avez choisi

echo "40 2 1,15 * * cat /etc/letsencrypt/live/votre.nomdedomaine.com/fullchain.pem /etc/letsencrypt/live/votre.nomdedomaine.com/privkey.pem >/etc/ssl/snakeoil.pem" >> /root/crontab &&  crontab /root/crontab

On va initialiser maintenant le tout :

sed -i "24i redirect scheme https code 301 if \!{ url_beg /api } \!{ ssl_fc }" /etc/haproxy/haproxy.cfg &&
cat /etc/letsencrypt/live/votre.nomdedomaine.com/fullchain.pem /etc/letsencrypt/live/votre.nomdedomaine.com/privkey.pem >/etc/ssl/snakeoil.pem &&
/etc/init.d/haproxy restart 

Ces lignes de code vont forcer le passage du http au https lors de vos connexions et initialiser le premier certificat.

Vous pouvez maintenant depuis votre navigateur vous rendre à l’adresse que vous avez choisie.
Si tout ce passe correctement vous devriez avoir ceci :

Octoprint détecte automatiquement que vous provenez d’un accès dit externe et vous alerte. Vous pouvez ignorer (1) le message.

Conclusion

Ce tutoriel est sans contexte la cerise sur le gâteau pour Octoprint, vous pouvez vraiment maintenant partir de chez vous tout en continuant de surveiller votre imprimante.

Il est aussi le tutoriel le plus compliqué. Prenez donc votre temps et relisez bien les lignes de commandes avant de les copier dans le terminal Putty.

Il est à noter que vous aurez à reconfigurer la connexion à votre Octoprint dans Cura en utilisant votre nom de domaine maintenant et en rafraichissant la clé api.

 

What do you want to do ?

New mail

38 commentaires
  • arnaud
    Répondre

    Salut, pour cette ligne
    /etc/init.d/haproxy stop && certbot certonly –standalone -d votre.nomdedomaine.com && /etc/init.d/haproxy start
    il me demande une adresse mail, normal ?
    Arnaud.

    1. TM
      Répondre

      Oui c est normal le systeme cerbot genere un certificat gratuit et t enverras un email si tu as un souci dessus , donc tu peux mettre ton mail.

  • arnaud
    Répondre

    Salut, installé et fonctionnel, j’ai suivi pas à pas tes indications et impeccable 😉
    Merci à toi.
    Hâte de voir la suite dans tes vidéos et tutos.
    Arnaud.

  • Sebastien
    Répondre

    Bonjour
    Superbe Tuto
    Il y a t’il un équivalent de Putty sur Mac ?

    1. TM
      Répondre

      Merci a toi !!
      Mac etant un systeme unix tu peux utiliser le terminal directement en utilisant dedans la commande ssh tonlogin@tonip, si tu change le port : ssh -p leport tonlogin@tonip

  • Sebastien
    Répondre

    Bonjour
    J’ai déjà un nom de domaine Free, suis je obligé de faire la ligne de commande
    echo « COPIEZ ICI LA DERNIERE LIGNE DU FICHIER PRECEDENT EN ENTIER » >> /root/crontab && crontab /root/crontab
    Sinon il y a t-il une autre commande
    Merci

    1. TM
      Répondre

      alors non du tout et je vais t expliquer pourquoi.
      Comme je l indiquais ce système permet de faire en sorte que les gens qui ont une ip dynamique, donc qui change a chaque reconnexion de la box puisse faire que le nom de domaine pointe bien sur la nouvelle IP.
      Chez Free , tu as une ip fixe normalement, donc tu peux utiliser ton nom de domaine free et tu as pas besoin d un service comme freedns. Tu dois faire ta redirection de port sur ta freebox et la generation du certificat et enjoy le résultat

  • Sebastien
    Répondre

    Et pour générer le certifiât tu fais comment ?

  • TM
    Répondre

    Euh… c est une caméra caché … il est ou jean roucasse?
    Non serieusement, scroll et lit c est marqué juste en dessous dans le tutorial

  • Sebastien
    Répondre

    En effet oui je suis resté scotché sur le nom de domaine
    Merci

  • Fabrice
    Répondre

    Bonjour,
    Sur Mac, il n’y a même pas besoin de connaître l’@ip du raspberry car on peut y accéder directement « ssh pi@octopi.local » si vous avez gardé le login pi. Je laisse le soin à TM de faire un tuto sur Google-Authenticator si vous voulez sécuriser un peu plus votre accès ssh 😉.

  • jeje
    Répondre

    bonjour, merci pour ton topic, c’est genial =)

    parcontre j’ai un souci sur la fin à la ligne :

    cat /etc/letsencrypt/live/votre nom de domaine/fullchain.pem /etc/letsencrypt/live/votre nom de domaine/privkey.pem >/etc/ssl/snakeoil.pem

    ça me met : No such file or directory
    une idée?
    je n’ai pas le repertoire /live dans le dossier letsencrypt normal?

    je passe par un dns de la freebox si jamais àa peut aider
    merci de votre aide!

  • david
    Répondre

    Salut,

    Je suis bloqué peux tu me venir en aide?

    Quand j’arrive à cette étape (bien évidemment je met mon nom de domain) :

    /etc/init.d/haproxy stop && certbot certonly –standalone -d votre.nomdedomaine.com && /etc/init.d/haproxy start

    J’ai ce message d’erreur :

    [….] Starting haproxy (via systemctl): haproxy.serviceJob for haproxy.service failed because the control process exited with error code.
    See « systemctl status haproxy.service » and « journalctl -xe » for details.
    failed!

  • david
    Répondre

    un redémarrage et c’est bon

    Merci

  • Manu
    Répondre

    Salut à tous!
    pouvez-vous me venir en aide? Je m’arrache les cheveux depuis quelques jours pour paramétrer ma freebox révolution, ce tuto est le tuto le plus « simple » et le plus clair que j’ai pu trouver et pourtant je n’y arrive pas, j’ai toujours une erreur quand j’essaye d’obtenir le certificat voir ci dessous:

    root@octopi:~# /etc/init.d/haproxy stop && certbot certonly –standalone -d votre.domaine.com && /etc/init.d/haproxy start
    [ ok ] Stopping haproxy (via systemctl): haproxy.service.
    Saving debug log to /var/log/letsencrypt/letsencrypt.log
    Plugins selected: Authenticator standalone, Installer None
    Obtaining a new certificate
    Performing the following challenges:
    http-01 challenge for votre.domaine.com
    Waiting for verification…
    Cleaning up challenges
    Failed authorization procedure. votre.domaine.com (http-01): urn:ietf:params:acme:error:connection :: The server could not connect to the client to verify the domain :: Fetching http://votre.domaine.com/.well-known/acme-challenge/11pa9XRuf6WT9qRD7L0efHhwJuT2J_Xxs78q5Gu9hfM: Timeout during connect (likely firewall problem)

    IMPORTANT NOTES:
    – The following errors were reported by the server:

    Domain: votre.domaine.com
    Type: connection
    Detail: Fetching
    http://votre.domaine.com/.well-known/acme-challenge/11pa9XRuf6WT9qRD7L0efHhwJuT2J_Xxs78q5Gu9hfM:
    Timeout during connect (likely firewall problem)

    To fix these errors, please make sure that your domain name was
    entered correctly and the DNS A/AAAA record(s) for that domain
    contain(s) the right IP address. Additionally, please check that
    your computer has a publicly routable IP address and that no
    firewalls are preventing the server from communicating with the
    client. If you’re using the webroot plugin, you should also verify
    that you are serving files from the webroot path you provided.
    root@octopi:~#

    j’ai testé aussi avec mondomaine.freeboxos.fr mais ça ne marche pas non plus, j’ai bidouiller pas mal dans la box en suivant divers tutos et j’ai peur d’avoir fait une boulette …

    J’ai aussi un problème avec les redirections de port? Je ne peux choisir que des ports compris entre 16384 et 32766…

    J’en profite quand même pour te dire que tes tutos sont tops et bien expliqués ( du moins j’ai réussi tous les autres ^^ ), vivement les prochains!

  • Daniel
    Répondre

    Bonjour,
    Je viens de suivre ce tuto (très explicite, bon travail). Je rencontre un problème lors de l’installation du certificat.
    Putty me renvoie :
    cat: ‘/etc/letsencrypt/live/http://xxxxx.dynservers.net/fullchain.pem’: No such file or directory
    cat: ‘/etc/letsencrypt/live/http://xxxxx.dynservers.net/privkey.pem’: No such file or directory
    Quel peut être le problème ?
    Cordialement.

  • Eric
    Répondre

    Bonjour,
    Est ce que quelqu’un équipé de Livebox 4 a réussi à faire fonctionner ce tuto en faisant la manip sur freedns ?
    Pour ma part, toutes les étapes du tuto se passent bien. Sur ma Livebox 4, j’ai bien redirigé les ports http et https vers des ports externes concernant mon Octoprint en TCP/UDP. J’ai ensuite dans DYNDns crée mes deux lignes http et https://votre.nomdedmaine.com avec mon adresse mail et mon identifiant chez Freedns en sélectionnant le service DNSDynamic (Freedns n’est pas dans la liste)
    Sur Freedns je vois bien mon ip publique.

    Maintenant si avec Chrome, Firefox ou Edge , je tape https://votre.nomdedmaine.com, ils me renvoient tous « Cette page ne fonctionne pas » . Si je tape mon iplocale dans le navigateur, j’accède bien à Octoprint avec un petit message m’indiquant que le certificat est attribué à votre.nomdedomaine.com mais je peux passer outre.

    Voilà, je sèche là dessus. Ai je oublié quelque chose quelque part ? Serait-ce dû au fait que le service Freedns n’existant pas dans la Livebox, celle-ci ne veut pas reconnaitre cette adresse ?

    Donc où est le souci ?

    Pour info, j’ai voulu tester avec No-ip.com (service reconnu par la Livebox) mais je n’ai pas réussi à créer le certificat……

    Merci d’avance aux âmes généreuses qui voudront bien me répondre.

    Cordialement

  • Eric
    Répondre

    Bon, je m’auto-réponds car je pense que cela peut aider certains.
    En fait sur ma Livebox , mon port interne https (443) affecté à mon Octoprint étant rerouté vers un port externe différent du 443 (oui car ça fait balot de rerouter un port interne vers un port externe du même numéro), je dois rajouter ce dernier dans mon adresse https:\\votre.nomdedomaine.com:monportexterne
    Maintenant tout fonctionne impeccable.
    Merci pour ce tuto…..

  • Marc
    Répondre

    Merci TM pour le Tuto, accès extérieur mis en place sur la base de la free Delta avec nom de domaine sous free

  • Marc
    Répondre

    Merci TM pour le Tuto, accès extérieur mis en place sur la base de la free Delta avec nom de domaine sous free……sauf que je n’arrive pas a me connecter de mon téléphone par la 4G, si je tapes le nom de domaine quand je suis sur le réseau wifi ca passe mais qd je coupe le wifi et je passe par la 4G pas de réponse

  • Marc
    Répondre

    désolé pour le doublon

  • Marc
    Répondre

    j’ai progressé j’arrive a ouvrir octoprint sur mon smartphone android……en utilisant l’adresse IP publique de ma box mais pas en utilisant le nom de domaine

    1. TM
      Répondre

      Content que tu y arrives. Alors déjà est ce que ton nom de domaine ping bien sur l ip de ta box?

  • Chafik
    Répondre

    Bonjour. Premièrement merci pour ce tuto qui m’a beaucoup servis. Je rencontre actuellement un problème lors de cette étape. J’ai bien créé mon adresse via le site freedns comme dans le tuto, j’ai bien rerouté les port de ma box 443 et 80 vers l’adresse IP du Raspberry, mais lorsque que je tape la commande pour l’obtention du certificat, j’ai ça :

    Failed authorization procedure. votre.domaine.com (http-01): urn:ietf:params:acme:error:dns :: DNS problem: NXDOMAIN looking up A for votre.domaine.com – check that a DNS record exists for this domain

    IMPORTANT NOTES:
    – The following errors were reported by the server:

    Domain: votre.domaine.com
    Type: None
    Detail: DNS problem: NXDOMAIN looking up A for votre.domaine.com –
    check that a DNS record exists for this domain

    Est-ce que quelqu’un peut m’aider svp ? Merci

    1. TM
      Répondre

      tu as bien remplace votre.domaine.com, par ton nom de domaine dans ta ligne de code …

  • Chafik
    Répondre

    J’obtiens aussi ça parfois :

    IMPORTANT NOTES:
    – The following errors were reported by the server:

    Domain: votre.domaine.com
    Type: connection
    Detail: Fetching
    http://votre.domaine.com/.well-known/acme-challenge/8xcDWKHrCyl8ha5xhN4PEIrlf-9uxKzFXv3_K1NHno8:
    Timeout during connect (likely firewall problem)

    To fix these errors, please make sure that your domain name was
    entered correctly and the DNS A/AAAA record(s) for that domain
    contain(s) the right IP address. Additionally, please check that
    your computer has a publicly routable IP address and that no
    firewalls are preventing the server from communicating with the
    client. If you’re using the webroot plugin, you should also verify
    that you are serving files from the webroot path you provided.

    Bref je suis perdu…

    1. TM
      Répondre

      j ai répondu avec beaucoup de retard sur ton autre message désolé j avais pas le nez sur le site mais sur un autre gros projet

  • Apollo
    Répondre

    Bonjour,

    Après plusieurs tentative et galère, j’ai finalement réussi grâce à votre tutoriel, la configuration sur mon Raspberry. Je vous en remercie. J’ai enfin accès à Octopi sur mon iphone. Cependant en me connectant sur safari, malgré que c’est bien marqué « https », ça me dit que la connection n’est pas privée. Du coup je me pose la question si j’ai bien sécuriser l’accès ?.

    1. TM
      Répondre

      il se peut que tu es certains appelle de la page qui soit encore encoder en http, ca arrive avec quelques modules je crois mais pas bien sur a checker. Désolé pour le temps de réponse j etais sur un gros projet

  • Younoussa
    Répondre

    Ça fonctionne niquel merci !

  • David
    Répondre

    Bonjour,
    J’ai une question, je suis sur un box sfr, j’ai une adresse ip fixe, je peux donc me passer du service FREEDNS, si j’ai bien lu ?
    Pour la génération du certificat, pour remplacer « votrenomdomaine » je met l’adresse ip fixe de ma box ? Ou autre chose ? Ip fixe + port ?
    Merci

    1. TM
      Répondre

      non un certificat est par rapport un nom de domaine avec letsencrypt. Tu dois donc avoir un enregistrement chez freedns ou t acheter un nom de domaine que tu fais pointer sur ton ip fixe

  • Nico
    Répondre

    J’ai suivi le tuto à la lettre , mais quand je me connecte le message ‘ cette connexion n’est pas privée ‘ s’affiche . Auriez vous une idée ?

    1. TM
      Répondre

      la première raison a cela est que ton flux https n est pas vraiment redirigé vers ton octoprint, vérifie que l administration de ta box par exemple ne répond pas sur le port 443 de ton ip publique

  • Axel
    Répondre

    Salut,
    Je voulais commencer ce tuto, mais il y a un truc que je comprend pas. On dit qu’on ouvre les port 80 et 443 soit http et https. Ça veut dire qu’on redirige toute les requêtes des ports vers la carte?
    C’est peut être bête mais internet marchera plus si on redirige les ports vers la carte?

    1. TM
      Répondre

      Non ce qui ne marchera plus c est par exemple l’accès à l’administration de ta box depuis l’extérieur si elle était sur ces ports. mais ton internet est un flux sortant pas entrant.

  • Delba
    Répondre

    Bonjour,
    Merci pour ce tuto qui est très clair néanmoins je bloque sur une étape, ce qui va peut être vous sembler évident mais bon je débute
    lorsque je lance la commande sudo su et la ligne décrite j’ai cela :

    pi@octopi:~ $ sudo su
    root@octopi:/home/pi# echo 2,7,12,17,22,27,32,37,42,47,52,57 * * * * sleep 15 ; wget -O – http://freedns.afraid.org/dynamic/update.php?ZTdLdFdFOEQ5NWxxxxxPSWNUOjIwMzQ3OTMw >> /tmp/freedns_rxxxxx_chickenkiller_com.log 2>&1 & /root/crontab && crontab /root/crontab
    2,7,12,17,22,27,32,37,42,47,52,57 mjpg-streamer OctoPrint oprint scripts wget-log mjpg-streamer OctoPrint oprint scripts wget-log mjpg-streamer OctoPrint oprint scripts wget-log mjpg-streamer OctoPrint oprint scripts wget-log sleep 15
    [1] 4651
    bash: /root/crontab: No such file or directory
    root@octopi:/home/pi#

    Esc te normal ?

    1. TM
      Répondre

      ta ligne de commande injecte pas dans le fichier /root/crontab , pourquoi tu envoie dans ton fichier tmp?

Laisser un commentaire

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