
Transforme un flux UDP en flux TCP (fictifs) pouvant traverser les pare-feux/NAT de couche 3 et couche 4 (NAPT).
Un obfuscateur UDP vers TCP léger et rapide.
Rust ne fournit qu'un support de niveau 3 pour les plates-formes MIPS depuis 2023. Les builds MIPS de Phantun sont donc construits à l'aide de la chaîne d'outils nightly de Rust et fournis au mieux.
Phantun est un projet qui obfusque les paquets UDP en connexions TCP. Il vise à atteindre des performances maximales avec un minimum de traitement et de surcharge d'encapsulation.
Il est couramment utilisé dans les environnements où l'UDP est bloqué/limite mais où le TCP est autorisé.
Phantun convertit simplement un flux de paquets UDP en paquets de flux TCP obfusqués. La pile TCP utilisée par Phantun est conçue pour traverser la plupart des pare-feu/NAT d'état/de session de couche 3/4. Il ne pourra pas traverser les proxy de couche 7. Cependant, l'avantage de cette approche est qu'aucun des facteurs de performance courants de l'UDP sur TCP, tels que les retransmissions et le contrôle de flux, ne se produira. Les propriétés sous-jacentes de l'UDP, telles que la livraison hors ordre, sont entièrement préservées même si la connexion finit par ressembler à une connexion TCP du point de vue des pare-feu/NAT.
Phantun signifie Phantom TUN, car c'est un obfuscateur pour le trafic UDP qui fait juste assez de travail pour le faire passer à travers un pare-feu/NAT d'état en tant que paquets TCP.
Phantun est écrit en 100% Rust sécurisé. Il a été largement optimisé pour bien passer à l'échelle sur les systèmes multi-cœurs et n'a aucun problème à saturer toutes les ressources CPU disponibles sur une connexion rapide. Voir la section Performances pour les résultats de référence.

Pour l'exemple ci-dessous, on suppose que le serveur Phantun écoute les connexions entrantes des clients Phantun sur
le port 4567 (l'option --local du serveur) et qu'il transmet les paquets UDP au serveur UDP à l'adresse 127.0.0.1:1234
(l'option --remote du serveur).
On suppose également que le client Phantun écoute les paquets UDP entrants sur
127.0.0.1:1234 (l'option --local du client) et se connecte au serveur Phantun à 10.0.0.1:4567
(l'option --remote du client).
Phantun crée une interface TUN à la fois pour le Client et le Serveur. Pour le Client, Phantun s'attribue l'adresse IP
192.168.200.2 et fcc8::2 par défaut.
Pour le Serveur, il attribue 192.168.201.2 et fcc9::2 par défaut. Par conséquent, votre noyau doit avoir
le forwarding IPv4/IPv6 activé et configurer les règles iptables/nftables appropriées pour le NAT entre l'adresse
de votre interface réseau physique et l'adresse de l'interface Tun de Phantun.
Vous pouvez personnaliser le nom de l'interface Tun créée par Phantun et les adresses attribuées. Veuillez
exécuter l'exécutable avec les options -h pour voir comment les modifier.
Une autre façon de comprendre cette topologie réseau (veuillez consulter le diagramme ci-dessus pour une illustration de cette topologie) :
Le client Phantun est comme une machine avec une adresse IP privée (192.168.200.2/fcc8::2) derrière un routeur.
Pour qu'il puisse atteindre Internet, vous devrez faire du SNAT sur l'adresse IP privée avant que son trafic
ne quitte l'interface.
Le serveur Phantun est comme un serveur avec une adresse IP privée (192.168.201.2/fcc9::2) derrière un routeur.
Pour y accéder depuis Internet, vous devez faire un DNAT sur son port d'écoute sur le routeur
et changer l'adresse IP de destination vers l'adresse où le serveur écoute les connexions entrantes.
Dans ces cas, la machine/iptables exécutant Phantun agit comme le « routeur » qui permet à Phantun de communiquer avec l'extérieur en utilisant ses adresses IP privées.
Depuis Phantun v0.4.1, l'IPv6 est entièrement pris en charge à la fois pour les côtés TCP et UDP.
Pour spécifier une adresse IPv6, utilisez le format suivant : [::1]:1234 avec
les options de ligne de commande. La résolution d'enregistrement AAAA est également prise en charge. Veuillez exécuter le programme
avec -h pour voir les options détaillées sur la façon de contrôler le comportement IPv6.
Retour à la table des matières
Edit /etc/sysctl.conf, add net.ipv4.ip_forward=1 and run sudo sysctl -p /etc/sysctl.conf.
net.ipv6.conf.all.forwarding=1 devra également être défini.
Retour à la table des matières
Le client a simplement besoin que le SNAT soit activé sur l'interface physique pour traduire l'adresse de Phantun en une adresse utilisable sur le réseau physique. Cela peut être fait simplement avec le masquerade.
Remarque : remplacez eth0 par le nom réel de l'interface physique.
Retour à la table des matières
table inet nat {
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
iifname tun0 oif eth0 masquerade
}
}
Remarque : la règle ci-dessus utilise inet comme type de famille de table, elle est donc compatible avec
les utilisations IPv4 et IPv6.
Retour à la table des matières
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Retour à la table des matières
Le serveur a besoin de faire du DNAT sur le port d'écoute TCP vers l'adresse de l'interface TUN de Phantun.
Remarque : remplacez eth0 par le nom réel de l'interface physique et 4567 par
le numéro de port TCP réel utilisé par le serveur Phantun.
Retour à la table des matières
table inet nat {
chain prerouting {
type nat hook prerouting priority dstnat; policy accept;
iif eth0 tcp dport 4567 dnat ip to 192.168.201.2
iif eth0 tcp dport 4567 dnat ip6 to fcc9::2
}
}
Retour à la table des matières