{"id":4359,"date":"2026-05-04T21:26:17","date_gmt":"2026-05-04T18:26:17","guid":{"rendered":"https:\/\/demensdeum.com\/blog\/2026\/05\/04\/port-forwarding-chisel\/"},"modified":"2026-05-04T21:48:08","modified_gmt":"2026-05-04T18:48:08","slug":"port-forwarding-chisel","status":"publish","type":"post","link":"https:\/\/demensdeum.com\/blog\/fr\/2026\/05\/04\/port-forwarding-chisel\/","title":{"rendered":"Redirection de port entre clients via Chisel : un tunnel \u00e9pur\u00e9 sans L3"},"content":{"rendered":"<p>Lorsque deux appareils sont derri\u00e8re un NAT ou un pare-feu strict et ne peuvent pas se \u00ab voir \u00bb directement, un VPN semble \u00eatre la solution standard. Mais un tunnel L3 \u00e0 part enti\u00e8re (comme WireGuard ou OpenVPN) est souvent redondant : il n\u00e9cessite des droits root, la configuration d&#8217;interfaces virtuelles et peut entrer en conflit avec les routes existantes.<\/p>\n<p>Dans de tels cas, il est pratique d&#8217;utiliser <b>Chisel<\/b> &#8211; un tunnel TCP\/UDP qui s&#8217;ex\u00e9cute sur HTTP et utilise WebSockets pour le transfert de donn\u00e9es. Dans cette note, je vais montrer comment \u00ab transf\u00e9rer \u00bb un port d&#8217;un client \u00e0 un autre via un serveur interm\u00e9diaire.<\/p>\n<h2>Comment \u00e7a marche\u00a0?<\/h2>\n<p>Imaginez la situation\u00a0: vous disposez d&#8217;un <b>Client A<\/b> (par exemple, votre serveur domestique), d&#8217;un <b>Client B<\/b> (votre ordinateur portable de travail) et d&#8217;un <b>VPS<\/b> avec une adresse IP publique. Les clients A et B peuvent acc\u00e9der au VPS, mais pas l&#8217;un \u00e0 l&#8217;autre.<\/p>\n<p>Le sch\u00e9ma de transfert ressemblera \u00e0 ceci\u00a0:<br \/>\n1. Le <b>Client A<\/b> se connecte au VPS et ouvre un port \u00ab inverse \u00bb sur le serveur. D\u00e9sormais, tout ce qui arrive au port X du serveur va au port Y du client A.<br \/>\n2. Le <b>Client B<\/b> se connecte au VPS et transf\u00e8re le port Z de sa machine locale vers le port X du serveur.<br \/>\n3. En cons\u00e9quence, le client B acc\u00e8de \u00e0 <b>localhost:Z<\/b> et se retrouve sur le <b>client A:Y<\/b>.<\/p>\n<p>Cette approche est l&#8217;une des solutions dans les cas o\u00f9 la communication avec un VPS n&#8217;impl\u00e9mente pas la couche L3 ou o\u00f9 il n&#8217;y a pas de possibilit\u00e9 de configurer le routage entre les clients. Nous travaillons exclusivement au niveau applicatif et portuaire.<\/p>\n<h2>\u00c9tape\u00a01\u00a0: D\u00e9marrez le serveur<\/h2>\n<p>Sur votre VPS, ex\u00e9cutez simplement Chisel en mode serveur. L&#8217;indicateur <code>--reverse<\/code> est requis pour permettre aux clients d&#8217;ouvrir des ports c\u00f4t\u00e9 serveur.<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-unknown\" data-lang=\"unknown\"><code>chisel server --port 8080 --reverse\n<\/code><\/pre>\n<\/div>\n<h2>\u00c9tape\u00a02\u00a0:\u00a0Connexion du client\u00a0A (source)<\/h2>\n<p>Disons que le client A souhaite ouvrir l&#8217;acc\u00e8s \u00e0 son serveur Web local sur le port 3000. Il se connecte au VPS et dit : \u00ab r\u00e9servez le port 2000 sur le serveur et transmettez-le-moi au 3000 \u00bb.<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-unknown\" data-lang=\"unknown\"><code>chisel client vps-ip:8080 R:2000:127.0.0.1:3000\n<\/code><\/pre>\n<\/div>\n<p>D\u00e9sormais, le port 2000 sur le VPS (sur l&#8217;interface de bouclage) m\u00e8ne au client A.<\/p>\n<h2>\u00c9tape\u00a03\u00a0:\u00a0Connexion du client\u00a0B (consommateur)<\/h2>\n<p>Le client B souhaite d\u00e9sormais acc\u00e9der \u00e0 cette ressource. Il se connecte au m\u00eame VPS et redirige son port local 8080 vers le port 2000 du serveur.<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-unknown\" data-lang=\"unknown\"><code>chisel client vps-ip:8080 8080:127.0.0.1:2000\n<\/code><\/pre>\n<\/div>\n<p>Pr\u00eat! D\u00e9sormais, lorsque vous ouvrez <code>http:\/\/localhost:8080<\/code> sur le client B, vous verrez le service s&#8217;ex\u00e9cuter sur le client A.<\/p>\n<h2>S\u00e9curit\u00e9 et nuances<\/h2>\n<p>Chisel prend en charge l&#8217;authentification via l&#8217;indicateur <code>--auth<\/code>, qui est fortement recommand\u00e9 lorsque vous travaillez via des serveurs publics. Vous pouvez \u00e9galement utiliser des certificats TLS pour chiffrer le trafic.<\/p>\n<p>Le principal avantage de cette approche est qu\u2019elle ne n\u00e9cessite pas de p\u00e9riph\u00e9riques TUN\/TAP ni de tables de routage complexes. Il s&#8217;agit d&#8217;un tunnel simplifi\u00e9 qui fait exactement une chose\u00a0: lier les ports via une connexion WebSocket. Cela fonctionne m\u00eame via des proxys d&#8217;entreprise si vous configurez Chisel pour qu&#8217;il fonctionne via le port 443.<\/p>\n<h2>Sortie<\/h2>\n<p>Chisel est un utilitaire pour des t\u00e2ches r\u00e9seau sp\u00e9cifiques. Lorsque vous devez transf\u00e9rer des ports entre des n\u0153uds isol\u00e9s sans configurer un VPN \u00e0 part enti\u00e8re, une combinaison de tunnels aller et retour via un serveur relais s&#8217;av\u00e8re \u00eatre une solution tout \u00e0 fait viable.<\/p>\n<h2>Liens<\/h2>\n<p><a href=\"https:\/\/github.com\/jpillora\/chisel\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/jpillora\/chisel<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lorsque deux appareils sont derri\u00e8re un NAT ou un pare-feu strict et ne peuvent pas se \u00ab voir \u00bb directement, un VPN semble \u00eatre la solution standard. Mais un tunnel L3 \u00e0 part enti\u00e8re (comme WireGuard ou OpenVPN) est souvent redondant : il n\u00e9cessite des droits root, la configuration d&#8217;interfaces virtuelles et peut entrer en<a class=\"more-link\" href=\"https:\/\/demensdeum.com\/blog\/fr\/2026\/05\/04\/port-forwarding-chisel\/\">Continue reading <span class=\"screen-reader-text\">&#8220;Redirection de port entre clients via Chisel : un tunnel \u00e9pur\u00e9 sans L3&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[61],"tags":[],"class_list":["post-4359","post","type-post","status-publish","format-standard","hentry","category-techie","entry"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"fr","enabled_languages":["en","ru","zh","de","fr","ja","pt","hi"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"ru":{"title":true,"content":true,"excerpt":false},"zh":{"title":true,"content":true,"excerpt":false},"de":{"title":true,"content":true,"excerpt":false},"fr":{"title":true,"content":true,"excerpt":false},"ja":{"title":true,"content":true,"excerpt":false},"pt":{"title":true,"content":true,"excerpt":false},"hi":{"title":true,"content":true,"excerpt":false}}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/4359","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/comments?post=4359"}],"version-history":[{"count":1,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/4359\/revisions"}],"predecessor-version":[{"id":4360,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/4359\/revisions\/4360"}],"wp:attachment":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/media?parent=4359"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/categories?post=4359"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/tags?post=4359"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}