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.
41 commentaires
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.
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.
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.
Bonjour
Superbe Tuto
Il y a t’il un équivalent de Putty sur Mac ?
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
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
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
Et pour générer le certifiât tu fais comment ?
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
En effet oui je suis resté scotché sur le nom de domaine
Merci
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 😉.
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!
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!
un redémarrage et c’est bon
Merci
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!
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.
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
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…..
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
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
désolé pour le doublon
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
Content que tu y arrives. Alors déjà est ce que ton nom de domaine ping bien sur l ip de ta box?
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
tu as bien remplace votre.domaine.com, par ton nom de domaine dans ta ligne de code …
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…
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
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 ?.
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
Ça fonctionne niquel merci !
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
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
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 ?
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
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?
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.
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 ?
ta ligne de commande injecte pas dans le fichier /root/crontab , pourquoi tu envoie dans ton fichier tmp?
bonjours je rencontre un soucie sur le tutoriel
en rentrant la ligne :
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
avec le bon nom de domaine dans putty, le logiciel me demande mon adresse mail que je lui transmets puis me pose deux question ou je reponds oui puis me mets ce message d’erreur :
An unexpected error occurred:
The server will not issue certificates for the identifier :: Error creating new order :: Cannot issue for « florianswx2 »: Domain name needs at least one dot
je suis retourné sur le site, j’ai chercher un peu et si je veux pouvoir utiliser un site .com il me demande de payer 24dollars à l’année
merci d’avoir lu en espérant avoir une solution
cordialement florian
Bonjour,
Merci pour ce tuto, mais étant avec une freebox revolution chez free, j’avoue m’être retrouvé perdu au moment du paramètrage des ports 80 et 443… Je ne comprend pas comment faire. Perso, pour le moment, j’ai juste une redirection d’adresse ip 192.168.x.x vers un port devant obligatoirement être au dessus de 49152.
Ayant, avant ce tuto, déjà souscrit à un nom de domaine gratuit chez NoIp, je voulais savoir si il y avait moyen d’adapter ce tuto à ce fournisseur de nom de domaine ?
Car dans ma box, j’ai une option qui me permet d’activer le dns dynamique chez NoIp, en entrant login, mdp et nom de domaine.
Donc si j’active ça, est ce que ça suffit pour ce connecter à distance ?
Et comment dois je m’y prendre pour créer la connexion ssl ?
Merci d’avance.
Bonjour, merci pour ce tuto ! Petite question (peut être bête…) si j’ai un autre serveur à la maison (comme un serveur domotique par exemple) et que je souhaite également pouvoir me connecter dessus, est-ce qu’il peut y avoir des conflits entre les certificat SSL ? Est-ce que freedns peut créer différents sous domaine ?