frp : un proxy inverse en Go pour les services derrière un NAT
Un proxy inverse rapide pour vous aider à exposer un serveur local derrière un NAT ou un pare-feu à Internet.
En bref
- De quoi s’agit-il ?
- frp associe un serveur public à un client situé derrière un NAT pour acheminer le trafic TCP, UDP, HTTP et HTTPS vers des services locaux. Le README couvre les protocoles, la configuration, la sécurité et les options de transport, sans benchmark.
- À qui s’adresse-t-il ?
- frp est encore en développement, avec une réécriture v2 prévue et incompatible avec v1. La licence Apache-2.0 accorde des droits de reproduction et de redistribution ; l'extrait de licence ne dit rien sur le support, la garantie ou la sécurité.
- Puis-je l’utiliser commercialement ?
- Oui. Apache-2.0 est une licence permissive : vous pouvez utiliser, modifier et vendre un logiciel qui en dépend, à condition de conserver les mentions de droit d’auteur et de licence.
- Est-il encore maintenu ?
- Oui. Les derniers commits datent d’il y a 1 jour.
- En quel langage est-il écrit ?
- Principalement Go, d’après les statistiques de langage de GitHub.
Ces réponses reposent sur les données GitHub du projet (dernière synchronisation le 15 septembre 2026) et sur notre analyse. Elles ne constituent pas un avis juridique.
ANALYSE OPEN SOURCE APPROFONDIE
Deux binaires, un tunnel
frp est un proxy inverse écrit en Go qui relie une machine disposant d'une IP publique à une machine située derrière un NAT ou un pare-feu. Le dépôt fournit deux composants : frps côté serveur et frpc côté client. frpc établit une connexion sortante vers frps, et frps achemine le trafic entrant sur les ports configurés via cette connexion vers les services locaux de la machine cliente. Le README qualifie frp de rapide, mais ne fournit aucune donnée de benchmark pour étayer cette affirmation. Les métadonnées du dépôt enregistrent environ 108 000 étoiles et 15 000 forks. frp sépare `frps`, côté serveur public, et `frpc`, côté réseau privé. Le fichier de configuration peut limiter `allowPorts`; l authentification par token est le défaut, OIDC est disponible, et `transport.tls.force = true` impose TLS. Testez un proxy TCP ou HTTP avec des ports explicitement autorisés et examinez `/metrics` si Prometheus est activé. Cette distinction permet de relier la fonction annoncée à une décision technique précise, sans attribuer au projet des garanties absentes de sa documentation.
Protocoles et types de trafic
Le README indique que frp prend en charge TCP et UDP, ainsi que HTTP et HTTPS, ces deux derniers permettant d'acheminer des requêtes vers des services internes par nom de domaine. Il existe aussi un mode de connexion P2P nommé xtcp, destiné à transférer directement de grandes quantités de données entre clients ; un serveur frps reste nécessaire pour la coordination, et le README précise que xtcp peut ne pas fonctionner avec tous les types de NAT et suggère de revenir à stcp en cas d'échec. Dans le mode xtcp, le champ remotePort est omis et le côté visiteur écoute sur un port local via bindAddr et bindPort. Le mode stcp (Secret TCP) expose un service de manière privée aux autres clients qui détiennent une clé pré-partagée correspondante. frp sépare `frps`, côté serveur public, et `frpc`, côté réseau privé. Le fichier de configuration peut limiter `allowPorts`; l authentification par token est le défaut, OIDC est disponible, et `transport.tls.force = true` impose TLS. Testez un proxy TCP ou HTTP avec des ports explicitement autorisés et examinez `/metrics` si Prometheus est activé. Le périmètre est donc clair: les éléments décrits sont vérifiables dans le dépôt, alors que les performances et la compatibilité non documentées restent à établir dans votre contexte.
Formats et fichiers de configuration
Depuis v0.52.0, frp accepte les fichiers de configuration TOML, YAML et JSON ; INI est obsolète et sera supprimé dans les versions futures, les nouvelles fonctionnalités n'étant disponibles que dans les formats récents. Les exemples du README utilisent tous TOML. Des variables d'environnement peuvent être référencées dans le fichier de configuration avec la syntaxe de template Go et un préfixe .Envs. Les définitions de proxys peuvent être réparties dans plusieurs fichiers et incluses via un champ includes dans la configuration principale. Le README renvoie également à des exemples complets pour frps et frpc, en avertissant qu'ils servent de référence et ne doivent pas être exécutés directement. frp sépare `frps`, côté serveur public, et `frpc`, côté réseau privé. Le fichier de configuration peut limiter `allowPorts`; l authentification par token est le défaut, OIDC est disponible, et `transport.tls.force = true` impose TLS. Testez un proxy TCP ou HTTP avec des ports explicitement autorisés et examinez `/metrics` si Prometheus est activé. Cette distinction permet de relier la fonction annoncée à une décision technique précise, sans attribuer au projet des garanties absentes de sa documentation.
Schémas de déploiement du README
Le README présente plusieurs déploiements concrets. D'abord l'accès SSH à une machine du LAN : frps écoute sur le port 7000, frpc déclare un proxy tcp avec remotePort 6000, et l'utilisateur se connecte avec ssh -oPort=6000. Les services HTTP peuvent être exposés sous des domaines personnalisés en définissant vhostHTTPPort sur le serveur et en configurant un enregistrement DNS A ou CNAME. Le transfert de requêtes DNS est illustré avec un proxy udp pointant vers 8.8.8.8:53. Les sockets Unix et le service de fichiers statiques sont gérés par des plugins client. Le README note aussi que certains antivirus signalent frpc comme logiciel malveillant car les proxys inverses peuvent contourner les restrictions de ports du pare-feu, et renvoie à l'issue 3637. frp sépare `frps`, côté serveur public, et `frpc`, côté réseau privé. Le fichier de configuration peut limiter `allowPorts`; l authentification par token est le défaut, OIDC est disponible, et `transport.tls.force = true` impose TLS. Testez un proxy TCP ou HTTP avec des ports explicitement autorisés et examinez `/metrics` si Prometheus est activé. Le périmètre est donc clair: les éléments décrits sont vérifiables dans le dépôt, alors que les performances et la compatibilité non documentées restent à établir dans votre contexte.
Authentification et protection du trafic
frpc s'authentifie auprès de frps soit par authentification par token, qui est le défaut, soit par OIDC avec le flux Client Credentials Grant. Des scopes supplémentaires optionnels appliquent l'authentification à chaque heartbeat ou à chaque nouvelle connexion de travail. TLS est activé par défaut depuis v0.50.0, et frps peut être configuré avec transport.tls.force = true pour n'accepter que des connexions TLS. Le chiffrement et la compression sont disponibles par proxy mais désactivés par défaut. Les proxys HTTP peuvent exiger une authentification Basic via les champs httpUser et httpPassword, et le serveur peut restreindre les ports exposés avec une liste allowPorts. frp sépare `frps`, côté serveur public, et `frpc`, côté réseau privé. Le fichier de configuration peut limiter `allowPorts`; l authentification par token est le défaut, OIDC est disponible, et `transport.tls.force = true` impose TLS. Testez un proxy TCP ou HTTP avec des ports explicitement autorisés et examinez `/metrics` si Prometheus est activé. Cette distinction permet de relier la fonction annoncée à une décision technique précise, sans attribuer au projet des garanties absentes de sa documentation.
Options de transport et de connexion
Le canal entre frpc et frps peut fonctionner sur TCP, KCP ou QUIC. Le README attribue à KCP des compromis précis : une réduction de la latence moyenne de 30 à 40 % et une réduction du délai maximal par un facteur trois, au prix d'une bande passante accrue de 10 à 20 % par rapport à TCP. Le multiplexage de flux TCP est pris en charge depuis v0.10.0 et peut être désactivé. Le pooling de connexions permet à frps de conserver des connexions préétablies vers le backend, ce que le README juge adapté aux grands nombres de connexions courtes. Les groupes d'équilibrage répartissent aléatoirement les connexions entre les proxys du même groupe, et les vérifications de santé (ping TCP ou réponse HTTP 2xx attendue) retirent les proxys de frps après un nombre configurable d'échecs. frp sépare `frps`, côté serveur public, et `frpc`, côté réseau privé. Le fichier de configuration peut limiter `allowPorts`; l authentification par token est le défaut, OIDC est disponible, et `transport.tls.force = true` impose TLS. Testez un proxy TCP ou HTTP avec des ports explicitement autorisés et examinez `/metrics` si Prometheus est activé. Le périmètre est donc clair: les éléments décrits sont vérifiables dans le dépôt, alors que les performances et la compatibilité non documentées restent à établir dans votre contexte.
Interfaces d'exploitation et feature gates
frps peut exposer un tableau de bord avec l'état et les statistiques des proxys sur un port configurable, éventuellement derrière TLS. frpc possède sa propre interface d'administration, qui prend en charge la gestion dynamique des proxys via un Store : les proxys et visiteurs créés via l'interface Web ou l'API sont persistés dans un fichier et restaurés au redémarrage. Une fois activées, les métriques Prometheus sont servies sur /metrics au port du tableau de bord. La ligne de commande frpc offre les sous-commandes reload et verify pour le rechargement à chaud de la configuration. Les feature gates contrôlent les fonctions expérimentales ; la seule documentée est VirtualNet, au stade ALPHA, qui utilise une interface TUN pour le routage au niveau IP. Une passerelle tunnel SSH ajoutée en v0.53.0 permet aux clients SSH de créer des proxys TCP sur frps sans exécuter frpc. frp sépare `frps`, côté serveur public, et `frpc`, côté réseau privé. Le fichier de configuration peut limiter `allowPorts`; l authentification par token est le défaut, OIDC est disponible, et `transport.tls.force = true` impose TLS. Testez un proxy TCP ou HTTP avec des ports explicitement autorisés et examinez `/metrics` si Prometheus est activé. Cette distinction permet de relier la fonction annoncée à une décision technique précise, sans attribuer au projet des garanties absentes de sa documentation.
Conclusion éditoriale
frp est encore en développement, avec une réécriture v2 prévue et incompatible avec v1. La licence Apache-2.0 accorde des droits de reproduction et de redistribution ; l'extrait de licence ne dit rien sur le support, la garantie ou la sécurité. Pour décider, vérifiez frp sépare `frps`, côté serveur public, et `frpc`, côté réseau privé. Le fichier de configuration peut limiter `allowPorts`; l authentification par token est le défaut, OIDC est disponible, et `transport.tls.force = true` impose TLS. Testez un proxy TCP ou HTTP avec des ports explicitement autorisés et examinez `/metrics` si Prometheus est activé. dans un environnement de test avant de l intégrer à votre flux.
Notes de la communauté