Node-Red : problème de permission et d'IPv6

Mon serveur YunoHost

Matériel: Vieil ordinateur
Version de YunoHost: 11.0.9.12
J’ai accès à mon serveur : En SSH | Par la webadmin | ShellInaBox
Êtes-vous dans un contexte particulier ou avez-vous effectué des modificiations particulières sur votre instance ? : non (aucune modification)
Si oui, expliquer:

Description du problème

Bonjour,

Je viens d’installer Yunohost afin de remplacer mon vieux serveur à la maison. J’avais préalablement un peu testé dans une VM.

Là, je suis sur ma vrai machine et je transfert tous mes services, dont node-red. Et ce dernier m’embête comme il faut, avec plusieurs soucis :

  • Ping impossible : quel que soit le node utilisé (node-red-contrib-ui-ping, node-red-node-ping, node-red-contrib-advanced-ping), impossible de pinger. J’obtient “EPERM error”. J’ai un peu creusé :
    • Si je remplace le paquet “iputils-ping” par le paquet "inetutils-ping, je n’ai plus l’erreur.
    • Si je reste avec “iputils-ping” et que je joue avec les permissions sur “/usr/bin/ping”, je n’ai plus l’erreur.

Mais, dans les deux cas précédent, quand je n’ai plus l’erreur, tous les ping échouent, ils sont sans réponse. Avec un tcpdump, je constate en fait que les ping de Node-Red ne partent pas sur l’interface réseau… :crazy_face:
A noter que le ping émis par l’utilisateur “root” ou par le premier utilisateur créé sur Yunohost, fonctionnent !
A noter aussi que le problème existe avec une installation de debian puis Yunohost installé par le script (curl …), ou directement via l’installation de la distro Yunohost, j’ai testé les deux.

  • Aléatoirement, Node-red essaye d’émettre des flux vers les adresses IPv6 des hotes que je cherche à joindre (serveurs pushbullet ou mon propre VPS)
    • Je n’ai pas d’IPv6 à la maison. Mon provider (fibre SFR) ne semble faire que de l’IPv4.
    • Le diagnostique Yunohost me dit bien que je n’ai pas d’IPv6.
    • pour autant un nslookup me retourne les réponse A et AAAA.
    • et node red tente parfois de joindre les services distant en IPv6… avec l’erreur suivante :
"Error: connect ENETUNREACH ICI_IPv6_DU_SERVICE:587 - Local (:::0)"

Là, sur les deux sujets, je sèche. J’ai fouillé Internet, tenté des choses, mais je sèche.

Je suis justement, entre autre, passé sur Yunohost pour pouvoir exposer proprement mon Node-red, et là, Node-Red ne donne pas satisfaction, ballot !

Je n’ai jamais eut ce type de problème avec node-red, pas même sur termux…

Auriez vous quelques idées ?

Merci.

Cela ressemble fortement à un problème avec les restrictions de sécurité qu’on impose au service qui fait tourner Node-RED.

Je viens de tester sur mon serveur, et en effet les pings ne marchent pas (j’ai juste des false en réponse, pas d’erreur particulière) jusqu’à ce que je les enlève toutes.

Je vais investiguer un peu plus et proposer un correctif. Je reposterai ici. :wink:


Quant au problème avec IPv6, j’avoue ne pas savoir. Il devrait y avoir un moyen de forcer le ping en ipv4, non?

Merci beaucoup pour le test.

En termes de permission, j’ai oublié de le dire, mais je n’arrive pas non plus a le connecter au port série /dev/ttyUSB0 avec node-red. Je n’ai pas l’erreur sous la main, mais ça ressemble aux permissions.

Concernant l’IPv6, ce n’est pas le ping, mais par exemple le node pushbullet. Et c’est aléatoire.

J’ai tenté de désactiver IPv6 via sysctl, j’ai cherché côté dnsmasq pour ne pas qu’il résolve les AAAA. dans le premier cas ça change rien, dans le deuxième, j’ai pas trouvé comment faire.

Peux-tu tester une mise à jour avec le correctif?

sudo yunohost app upgrade nodered -u https://github.com/YunoHost-Apps/nodered_ynh/tree/testing

Cela couvre le ping et la communication USB. :crossed_fingers:

C’est malheureusement pas mieux.
Pour le port série : “[serialconfig:4876616732c24166] serial port /dev/ttyUSB0 error: Error: Error: Permission denied, cannot open /dev/ttyUSB0”

Et pour le ping, la réponse est toujours “false”.

Je suis en train de m’assurer d’avoir fait marche arrière sur mes expérimentations. J’ai désinstallé/réinstallé le paquet “iputils-ping”, et j’ai l’erreur d’origine “Error: spawn EPERM”, et non pas une réponse aux pings “false”…

Peux-tu partager le log de la mise à jour de NodeRED? Tu peux le trouver dans le menu Outils > Journaux de la webadmin.

C’est ICI

Hello.

le contenu de /etc/systemd/system/nodered.service est ICI

A noter que le problème est le même sur une installation from scratch dans une VM, avec l’erreur EPERM sur les pings.

Mmmmh, et ça marche de mon côté… Essayons quelque chose de drastique. Peux-tu commenter les lignes

#DevicePolicy=closed
...
#SystemCallFilter=~@clock @debug @module @mount @obsolete @reboot @swap

puis

sudo systemctl daemon-reload
sudo systemctl restart nodered

et essaie de nouveau?

pas mieux. :pensive:

Encore plus drastique, commente toutes les lignes entre # Sandboxing options to harden security et CapabilityBoundingSet=~CAP_SYS_ADMIN CAP_SYS_PTRACE CAP_SYSLOG, incluse.

Refais les même commandes. (et je me prépare mentalement à être déçu ^^)

ça fonctionne.
mais j’imagine que coté sécu c’est pas satisfaisant.

C’est pas ouf, mais bon… c’est ça ou tu ne peux pas te servir de ton app.

Tu peux tenter de réactiver une à une les directives pour voir laquelle est celle qui bloque (plus rapide que de comprendre la doc de systemd…). C’est ce que j’avais fait pour le correctif proposé plus tôt.

ok, je joue avec ça demain.

Merci.
Je poste ici ce qu’il en sera.

Cela dit, je n’ai pas accès au port série. tout est commenté, et j’ai quand même :

"[serialconfig:4876616732c24166] serial port /dev/ttyUSB0 error: Error: Error: Permission denied, cannot open /dev/ttyUSB0"

Ceci pourrait être une solution, mais d’autres fils sur StackExchange mentionnent que ça ne marche pas sur Debian. usermod -a -G dialout nodered

Au cas où peux-tu donner le retour de ls -la /dev/ttyUSB0 ?

je l’avais tenté, de mettre nodered dans le groupe dialout, sans succès.
Et pour le serial, hier soir, excédé j’ai fait un “chmod 777 /dev/ttyUSB0” :unamused:

Alors, petit bilan.

La commande suivante fonctionne dès lors que tout est “ouvert” via le fichier “/etc/systemd/system/nodered.service”

Pour le reste, j’ai essayé divers configurations, mais sans succès sur le ping. J’avoue avoir laissé tomber.

Je pense que le risque est limité avec node-red reverse proxifié par nginx et l’authentification yunohost. Du coup, je vais me contenter de cette configuration.

Merci beaucoup !