Ce référentiel contient une implémentation simple d'un réseau privé virtuel point à point en ouvrant un périphérique TUN et en transférant le trafic brut via UDP. Ce VPN a été conçu pour créer un tunnel entre deux hôtes :
Le trafic TUN est envoyé ad verbatim entre les deux points de terminaison via des paquets UDP non chiffrés. Ainsi, cela ne doit être utilisé que si un protocole plus sécurisé (comme SSH ; voir github.com/dsnet/sshtunnel) s'exécute sur ce VPN. Afin d'empêcher les attaquants de se connecter à d'autres sockets liés localement sur les points de terminaison, un simple filtre de port est intégré pour limiter le trafic IP aux ports spécifiés uniquement. Les utilisateurs d'udptunnel doivent également configurer des règles iptables comme mesure secondaire pour restreindre le trafic malveillant.
Cela ne prend en charge que Linux.
Construisez le démon :
go get -u github.com/dsnet/udptunnel
Créez un fichier de configuration du serveur :
{
"TunnelAddress" : "10.0.0.1" ,
"NetworkAddress" : ":8000" ,
"AllowedPorts" : [ 22 ] ,
}
La NetworkAddress
avec un hôte vide indique que le démon fonctionne en mode serveur.
Créez un fichier de configuration client :
{
"TunnelAddress" : "10.0.0.2" ,
"NetworkAddress" : "server.example.com:8000" ,
"AllowedPorts" : [ 22 ] ,
}
L'hôte server.example.com
est supposé se résoudre à une adresse à laquelle le client peut atteindre le serveur.
Démarrez le démon sur le client et le serveur (en supposant que $GOPATH/bin
se trouve dans votre $PATH
) :
[email protected] $ udptunnel /path/to/config.json
[email protected] $ udptunnel /path/to/config.json
Essayez d'accéder à l'autre point de terminaison (par exemple, pour le client vers le serveur) :
[email protected] $ ping 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_req=1 ttl=64 time=56.7 ms
64 bytes from 10.0.0.1: icmp_req=2 ttl=64 time=58.7 ms
64 bytes from 10.0.0.1: icmp_req=3 ttl=64 time=50.1 ms
64 bytes from 10.0.0.1: icmp_req=4 ttl=64 time=51.6 ms
[email protected] $ nmap 10.0.0.1
Host is up (0.063s latency).
PORT STATE SERVICE
22/tcp open ssh
[email protected] $ ssh 10.0.0.1
Password: ...
L'exemple ci-dessus montre le client essayant de communiquer avec le serveur, qui est adressable à 10.0.0.1
. Les exemples de commandes peuvent être exécutés à partir du serveur en composant plutôt le client à 10.0.0.2
.