Iroh 1.0 - Se connecter par clé plutôt que par IP - Bibliothèque réseau pour connecter des appareils arbitraires
(iroh.computer)- Iroh 1.0 est la première version stable et garantit la stabilité du wire protocol ainsi que de l’API des langages, ce qui permet à des endpoints iroh v1 de communiquer entre eux независимо de la version mineure ou du langage
- En plus du crate Rust, Python, Node.js, Swift et Kotlin sont officiellement pris en charge, ce qui permet d’embarquer iroh dans des applications Swift iOS et des apps Kotlin Android
- Les changements qui affectent la stabilité du wire interviennent toujours avec une major release, et à l’avenir les versions d’API par langage et la compatibilité wire pourront être versionnées indépendamment
- Après la 1.0, les versions majeures et mineures seront prises en charge selon le calendrier de support, et la version mineure 0.35 ne recevra pas de release supplémentaire
- La prise en charge du public relay sera assurée jusqu’à la fin de vie pour la v1.0, jusqu’au 31 décembre 2026 pour la v0.35x, et jusqu’au 30 septembre 2026 pour les v0.9x et v1.0.0-rcX
- Le public relay passe généralement à la dernière version dans les 24 heures suivant chaque release, et les changements de relay incompatibles au niveau wire utilisent une nouvelle URL afin que les clients existants continuent de fonctionner
- Les fonctionnalités de connexion incluent QUIC multipath, QUIC NAT traversal, une configuration local-first, l’exécution en WASM et dans le navigateur, des hooks de contrôle de connexion et la prise en charge de transports personnalisés
- Pour les connexions, il est courant que 95 % des données soient transmises directement entre appareils, ce qui réduit les sauts via le cloud et les coûts d’egress {p:95}
- Le trafic relayé via le public relay est soumis à des rate limits, et ces limites peuvent changer à tout moment
2 commentaires
Avis sur Hacker News
Si vous découvrez Iroh, on peut grosso modo le comprendre comme un Tailscale de couche applicative plutôt que de couche réseau
La question « pourquoi ne pas simplement utiliser Tailscale ? » est différente du point de vue d’un développeur d’app. Pour connecter facilement des instances d’application entre elles, on pourrait en théorie intégrer les fonctionnalités de Tailscale dans l’app, mais cela obligerait les utilisateurs à avoir un compte Tailscale et rendrait aussi l’app dépendante de Tailscale
Iroh permet d’intégrer directement cette capacité et fournit aussi des relais publics de secours. Si l’app grossit au point que les relais publics ne suffisent plus, passer à ses propres relais est presque aussi simple que d’actionner un interrupteur
Encore plus si Iroh rend les bonnes pratiques aussi simples et bien faites
Dans des environnements où les utilisateurs doivent accéder à des instances locales, Iroh peut être un vrai game changer. Chez nous, cela sert à permettre de piloter facilement un logiciel depuis un téléphone ou un autre appareil
Avant, il fallait peut-être vérifier qu’on était sur le même LAN, mais avec Iroh, ça fonctionne dans n’importe quel environnement
Iroh et OpenZiti peuvent tous deux être intégrés dans une app, et ce sont tous les deux de bons cas d’usage pour les développeurs qui veulent les embarquer dans un service
OpenZiti est utilisé pour des services où l’échelle et la sécurité sont cruciales, tandis qu’Iroh peut être très pratique parce qu’il permet aussi à des participants sans relation préalable de se joindre
Je suis l’un des développeurs d’Iroh
Une question fréquente est de savoir quand Iroh prendra en charge WebRTC, BLE, LoRa, etc.
Pour l’instant, Iroh ne prend en charge par défaut que l’IPv4, l’IPv6 et le transport via relais. Il existe tellement de modes de transport intéressants que vouloir tous les prendre en charge transformerait la base de code en un labyrinthe de feature flags impossible à maintenir
À la place, nous avons permis d’implémenter des transports personnalisés, et leur implémentation peut vivre dans une crate complètement séparée
Parmi les transports personnalisés expérimentaux existants, on trouve Tor, Nym et BLE. https://github.com/mcginty/iroh-ble-transport
On peut voir le fonctionnement interne ici : https://www.iroh.computer/blog/iroh-0-97-0-custom-transports...
Si on construit avec ça une configuration client/serveur P2P ou deux machines pair à pair, je me demande quelles sont les limites en termes de configuration supplémentaire nécessaire pour connecter les deux applications
Par exemple, si je crée une app qui tourne sur un téléphone et une autre sur un laptop, est-ce qu’on obtient réellement entre elles une connexion directe et sécurisée, ou est-ce que ça résout un autre problème ?
-[0]: p2p chat, in rust, from scratch: https://www.youtube.com/watch?v=ogN_mBkWu7o
L’an dernier, au moment de choisir entre les deux, j’ai pris celui que je connaissais déjà, mais maintenant j’ai l’impression qu’Iroh a clairement le vent en poupe
Ici, ils utilisent un démon Tor. Il existe une implémentation de Tor en Rust, et en Rust on peut l’utiliser sous la forme d’un objet de type flux
Un exemple d’utilisation est visible sur https://gitlab.torproject.org/tpo/core/oniux
Le pattern Strategy et une gestion centralisée des fonctionnalités sont de bonnes approches
Je ne sais pas si les « dial keys » étaient expliquées dans la vidéo, mais à mon avis le premier paragraphe devrait préciser clairement de quel type de clés il s’agit et pourquoi elles sont nécessaires
On ne dit pas s’il s’agit de clés cryptographiques, si elles sont asymétriques, ni même comment cela fonctionne au niveau le plus élémentaire. Le texte enchaîne aussitôt sur des affirmations abstraites de supériorité et des statistiques d’usage
Il semble que les relais soient impliqués, mais il vaudrait mieux l’expliquer d’emblée au lieu de laisser les gens le découvrir dans la discussion HN
Il y a d’abord https://docs.iroh.computer/what-is-iroh, puis une section sur le fonctionnement. Jusqu’ici, la doc a l’air vraiment correcte et semble répondre assez vite aux questions soulevées
Ça peut être distribué, gratuit et non monolithique, mais au sens large ça reste la même catégorie
.ssh/configMais en creusant un peu plus, on dirait plutôt une nouvelle manière de faire du réseau au-dessus de QUIC
Mon résumé Lobste.rs, en gardant à l’esprit que je ne suis pas expert et que c’est un projet que je découvre aujourd’hui : cela ressemble davantage à une configuration WebRTC très orientée, qui attribue des ID persistants aux clients. Le travail de mise en place d’un serveur de signalisation est déjà géré, et la solution semble suffisamment générique et peu coûteuse pour qu’on puisse utiliser un serveur hébergé par la communauté. C’est un peu comparable à ce qu’apporte l’infrastructure P2P propriétaire gamenetworkingsocket de Steam
https://lobste.rs/s/cslljn/iroh_1_0_dial_keys_not_ips#c_s3na...
À la base, je ne comprends pas quel problème ils essaient de résoudre. IP et DNS fonctionnent bien
On a déjà IPv6 et QUIC, et pour obtenir une adoption significative dans ce domaine, il faut des éditeurs et des logiciels majeurs
Plus précisément, imaginons un appareil derrière le NAT du WLAN domestique, et un autre derrière la 4G ou un autre NAT d’entreprise
Dans la plupart des cas, le hole punching permet d’établir très rapidement une connexion directe entre les deux appareils, avec la meilleure bande passante possible et la latence la plus faible
Ce problème n’avait jusqu’à présent pas été résolu
Comme TCP/IP n’a pas de véritable couche session, vMotion n’est en général possible qu’au sein d’un seul domaine de broadcast. Dans cette situation, on utilise en pratique uniquement les adresses MAC pour l’adressage, et même si l’adresse MAC change après un vMotion, l’IP peut rester un identifiant stable. Le mapping est alors géré par la table d’adresses MAC du switch
L’avenir du réseau est décentralisé. J’aime beaucoup Yggdrasil et I2P
On devrait pouvoir acheter un mini-PC à laisser tourner 24 h/24 pour héberger ce dont on a besoin et se connecter aux autres de manière fluide. Beaucoup de techniciens ont déjà une vieille machine de secours qui prend la poussière et qu’ils pourraient transformer en serveur
À long terme, ce serait bien moins cher et plus simple à maintenir que de gérer des domaines et de l’hébergement serveur. J’apprécie sincèrement le travail de l’équipe Iroh
Iroh a été vraiment agréable à utiliser, et les ingénieurs sur le canal Discord étaient eux aussi très serviables
L’approche pragmatique qui fait simplement fonctionner le P2P était facile à comprendre, et le contenu de leur chaîne YouTube est excellent. Félicitations pour la sortie de la v1
https://youtube.com/@n0computer
Ça ne vous semble pas étrange qu’un protocole censé jouer un rôle similaire à des adresses IP ait une grille tarifaire ? Je me trompe peut-être sur quelque chose
En revanche, pour financer le développement, ils proposent des services supplémentaires qui facilitent le déploiement et l’exploitation, surtout pour des cas d’usage plus grands ou plus spécifiques
Vouloir « être de l’infrastructure pour les gens, et un business pour les experts »
C’est coincé entre « il faut de l’argent pour l’exploiter » et « on veut devenir un système d’infrastructure de bien public », et les aspects négatifs d’une entreprise à but lucratif sont balayés d’un « oui mais c’est open source »
Tant que la mention « open source » ne s’accompagne pas d’une base de code entièrement sur mesure et incompréhensible, je trouve que ce concept business reste acceptable dans une certaine mesure
Il est certain qu’exploiter un FAI ou un AS coûte beaucoup d’argent
On utilise Iroh en production dans notre entreprise et on en est vraiment contents
Je le décrirais surtout comme du hole punching façon Tailscale fourni sous forme de crate Rust, même si on peut évidemment ajouter beaucoup de fonctionnalités P2P intéressantes au-dessus de la connexion QUIC de base
Notre entreprise a utilisé Iroh pour un système distribué d’entraînement de machine learning en production, et nous en avons été très satisfaits
Même avant de signer un contrat de support entreprise, l’équipe répondait avec une rapidité incroyable, avec une expertise très profonde, et la bibliothèque elle-même fonctionnait remarquablement bien. Je réutiliserais cette bibliothèque sans hésiter plutôt que libp2p
Félicitations pour la sortie
Il faut d’urgence une page de comparaison avec tailscale/netbird/netmaker/zerotier/twingate/openziti
À voir uniquement les cas d’usage, on ne voit pas encore ce que Tailscale ne permet pas de faire aujourd’hui
Avis sur Lobste.rs
Ici comme sur HN, beaucoup semblent confondre la différence entre Iroh et les réseaux mesh superposés à un VPN (Tailscale, ZeroTier, Netbird, etc.). Mon interprétation, c’est qu’Iroh s’adresse aux développeurs d’applications qui veulent faire communiquer en P2P des appareils exécutant leur propre app, tandis que les réseaux mesh visent les administrateurs réseau qui veulent relier entre eux des machines qu’ils possèdent ou gèrent
Par exemple, si on crée une application de messagerie P2P, un utilisateur peut être sur un appareil mobile qui bascule sans cesse entre Wi‑Fi et données mobiles, donc sans adresse stable, tandis que l’autre peut être sur un portable derrière du NAT et du CGNAT. Si on veut qu’ils puissent communiquer même quand les adresses IP changent, il faut un mécanisme pour gérer ça
Avant, on passait généralement par un serveur d’intermédiation exploité par le développeur de l’application, auquel les deux endpoints se connectaient pour partager leur état ; Iroh semble plutôt vouloir standardiser cela et le proposer comme service
C’est aussi un peu comparable à ce qu’apporte l’infrastructure P2P propriétaire
gamenetworkingsocketde SteamJe rate peut-être quelque chose, mais faire reposer tout le système sur une seule clé me semble extrêmement risqué. Je me demande ce qui se passe si cette clé est perdue ou compromise
J’ai fait une recherche rapide sur « key rotation » dans la documentation d’Iroh, sans rien trouver
Certaines applications qui utilisent Iroh stockent les clés de façon persistante, d’autres en génèrent de nouvelles à chaque session
Si la clé privée fuit, un attaquant peut se faire passer pour moi lorsqu’il initie ou reçoit une connexion. Si je perds la clé, je ne peux plus prouver mon identité à mes pairs. De ce que je comprends, le risque est similaire à celui d’un mot de passe ou d’une clé privée classique perdu(e) ou compromis(e)
Quelles seraient les alternatives proches ? Host Identity Protocol ? https://mkomu.kapsi.fi/hipl/index.php?index=how
J’essaie de comprendre le projet, mais la différence entre une clé et une IP ne me parle pas vraiment. À un moment ou à un autre, la clé n’est-elle pas mappée vers une adresse IP pour utiliser le routage IP ?
La clé remplace-t-elle URL ou DNS comme identifiant durable associé à une adresse IP ?
Quand on veut connecter un nœud à un autre via sa clé, on interroge l’un des serveurs relais pour cette clé, puis on essaie plusieurs méthodes : connexion IP directe, hole punching, et en dernier recours connexion relayée via le serveur relais
Les clés servent aussi au chiffrement de bout en bout via QUIC
Existe-t-il un moyen d’héberger son propre serveur relais pour une application spécifique ? Ça semble possible. Mais le fait qu’il y ait une page tarifaire distincte pour les relais dédiés paraît un peu étrange
Les relais hébergés servent à fournir cela sans la contrainte de gérer soi-même un serveur, tout en donnant davantage de visibilité sur le réseau
Ça me paraît plus proche de Reticulum que de Yggdrasil ou Netbird
J’ai du mal à comprendre ce que c’est. Ça me fait penser à Yggdrasil, mais je ne vois pas bien comment les comparer