Paquets TUN convertis en connexions vers un proxy
tun2socks lit les paquets IP qui arrivent sur une interface TUN, les fait passer dans la pile TCP/IP de gVisor, en espace utilisateur, et ouvre les connexions TCP et UDP correspondantes à travers un serveur proxy. Les programmes de la machine n'ont aucun réglage de proxy à connaître : il suffit que la table de routage dirige leur trafic vers l'interface. L'outil est écrit en Go et publié en binaires précompilés.
SOCKS5, Shadowsocks, SSH et relais GOST en sortie
- L'option
--proxyaccepte huit schémas :http://(le serveur doit gérer la méthode CONNECT),socks4://,socks5://(y compris sur socket Unix),ss://avec obfuscation HTTP facultative,ssh://par mot de passe ou clé privée,relay://pour le protocole relay de GOST,direct://pour les tests etreject://, qui refuse toute connexion sortante. - La v2.7.0 publie 31 archives pour Linux, macOS, Windows, FreeBSD et OpenBSD, dont des builds Linux pour ARM, MIPS, PowerPC, s390x et LoongArch.
- Le périphérique
fd://reprend un descripteur de fichier déjà ouvert au lieu d'une interface nommée ; la v2.6.0 y a ajouté une option pour iOS. - Le mode passerelle route au niveau 3 le trafic des autres appareils du réseau. Sous Linux, l'image Docker
ghcr.io/xjasonlyu/tun2socksprend en charge la mise en place : création de l'interface, routage par marquefwmark, routes incluses ou exclues passées en variables d'environnement. - La configuration se fait en options ou dans un fichier YAML (
-c).--tun-pre-upet--tun-post-uplancent une commande avant et après la création de l'interface,--restapiouvre un serveur HTTP de statistiques. - IPv6 est pris en charge, y compris pour transporter de l'IPv4 sur IPv6 et l'inverse.
Routage et DNS à la charge de l'utilisateur, UDP selon le protocole
L'adressage et les routes se posent à la main. tun2socks relie l'interface TUN au proxy et s'arrête là. Les exemples du wiki configurent l'interface et la route par défaut avec ip sous Linux, parfois en désactivant rp_filter, ajoutent neuf routes avec route sous macOS et passent par netsh sous Windows, où le pilote wintun se télécharge à part. Seul le script d'entrée de l'image Docker l'automatise, sous Linux.
La résolution DNS n'est pas prise en charge. Le wiki l'écrit : tun2socks n'est pas conçu pour résoudre les noms, et les serveurs DNS restent à configurer par l'utilisateur.
L'UDP ne passe pas par tous les protocoles. SOCKS5 et Shadowsocks le transportent, Relay l'encapsule dans du TCP. HTTP, SOCKS4 et SSH ne font passer que le TCP : côté SSH, le code renvoie une erreur « non pris en charge » à toute demande UDP.
Un proxy sur la même machine provoque une boucle de routage. Le wiki déconseille un serveur proxy en écoute locale (127.0.0.1:1080). La parade, lier tun2socks à l'interface physique avec --interface, demande selon le projet des connaissances réseau suffisantes.
La mémoire se règle à la main. Le projet vise d'abord la performance et prévient que la consommation peut monter : les tampons TCP valent 1 Mio par défaut. Sur une machine à peu de RAM, le wiki conseille des tampons de 16k à 64k (--tcp-sndbuf, --tcp-rcvbuf), qui consomment parfois jusqu'à 80 % de mémoire en moins qu'avec de grands tampons.
Le README annonce les meilleures performances dans tous les scénarios, sur un benchmark de 2021. La comparaison du wiki face à badvpn-tun2socks et go-tun2socks porte sur la v2.3.2, sortie en novembre 2021.
La licence est MIT depuis la v2.6.0. Les versions jusqu'à la v2.5.2 étaient publiées sous GPL-3.0.
La dernière version est la v2.7.0, du 12 juillet 2026. Elle a ajouté le proxy SSH. La v2.6.0 date de juin 2025 et la v2.5.2 de novembre 2023. Le dernier commit remonte au 11 octobre 2026.
