Dsvpn
DSVPN est un VPN Dead Simple, conçu pour traiter le cas d'utilisation le plus courant pour l'utilisation d'un VPN : [dispositif client] ---- (réseau non...
Choisir une liste...
DSVPN est un VPN Dead Simple, conçu pour traiter le cas d'utilisation le plus courant pour l'utilisation d'un VPN :
[client device] ---- (untrusted/restricted network) ---- [vpn server] ---- [the Internet]
Caractéristiques:
- Exécute sur TCP. Fonctionne presque partout, y compris sur le WiFi public où seul TCP/443 est ouvert ou fiable.
- Utilise uniquement la cryptographie moderne, avec des implémentations officiellement vérifiées.
- Petite empreinte de mémoire constante. Il n'effectue aucune attribution de mémoire.
- Petit (~25 KB), avec une base de code également petite et lisible. Aucune dépendance externe.
- Ça sort de la boîte. Aucune documentation n'est à lire. Pas de fichier de configuration. Pas de post-configuration. Exécutez une commande en ligne unique sur le serveur, une commande similaire sur le client et vous avez terminé. Pas de règles de pare-feu et de routage pour le gâchis manuel.
- Fonctionne sur Linux (kernel >= 3.17), macOS et OpenBSD, ainsi que sur DragonFly BSD, FreeBSD et NetBSD en mode client et point à point. Ajouter un support pour d'autres systèmes d'exploitation est trivial.
- Il ne fuit pas entre les connexions si le réseau ne change pas. Bloque IPv6 sur le client pour éviter les fuites d'IPv6.
Installation
make
Sur Raspberry Pi 3 et 4, utilisez plutôt la commande suivante pour activer les optimisations NEON :
env OPTFLAGS=-mfpu=neon make
Si vous avezziginstallé, il peut être utilisé pour compiler DSVPN:
zig build -Drelease
Sur macOS, DSVPN peut être installé en utilisant Homebrew:brew install dsvpn.
Clé secrète
DSVPN utilise un secret partagé. Créez-le avec la commande suivante :
dd if=/dev/urandom of=vpn.key count=1 bs=32
Et copiez-le sur le serveur et le client.
Si nécessaire, les clés peuvent être exportées et importées sous forme imprimée :
base64 < vpn.key
echo 'HK940OkWcFqSmZXnCQ1w6jhQMZm0fZoEhQOOpzJ/l3w=' | base64 --decode > vpn.key
Exemple d'utilisation sur le serveur
sudo ./dsvpn server vpn.key auto 1959
Ici, j'utilise le port1959. Tout le reste est défini aux valeurs par défaut. Si vous voulez utiliser le port par défaut (443), il n'a même pas besoin d'être spécifié, donc les paramètres peuvent êtreserver vpn.key
Exemple d'utilisation sur le client
sudo ./dsvpn client vpn.key 34.216.127.34 1959
C'est un client macOS qui se connecte au serveur VPN34.216.127.34sur le port1959. Le numéro de port est également facultatif ici. Et l'IP peut être remplacé par un nom d'hôte.
Voilà
Vous êtes connecté. Juste frapperCtrl- OuiCpour se déconnecter.
Evaggelos Balaskas a écrit un grand billet de blog marchant à travers toute la procédure:A Dead Simple VPN.
Il maintient aussisystemd service files for DSVPNMerci Evaggelos !
Note sur le DNS
Si vous utilisiez auparavant un résolveur DNS uniquement accessible depuis le réseau local, il ne sera pas accessible via le VPN. C'est peut-être la seule chose à changer. Utilisez un résolveur public, un résolveur local ou DNSCrypt.
Ou envoyez une requête de tirage implémentant les commandes nécessaires pour modifier et retourner les paramètres DNS, ou rediriger les requêtes DNS vers un autre résolveur, pour tous les systèmes d'exploitation supportés.
Configuration avancée
dsvpn "server"
<key file>
<vpn server ip or name>|"auto"
<vpn server port>|"auto"
<tun interface>|"auto"
<local tun ip>|"auto"
<remote tun ip>|"auto"
<external ip>|"auto"
dsvpn "client"
<key file>
<vpn server ip or name>
<vpn server port>|"auto"
<tun interface>|"auto"
<local tun ip>|"auto"
<remote tun ip>|"auto"
<gateway ip>|"auto"
serverAutresclient: utilisationserversur le serveurclientsur les clients.<key file>: chemin vers le fichier avec la clé secrète (par exemple.vpn.key).<vpn server ip or name>: sur le client, il doit s'agir de l'adresse IP ou du nom d'hôte du serveur. Sur le serveur, peu importe, donc vous pouvez simplement utiliserauto.<vpn server port>: le port TCP à écouter/se connecter pour le VPN. Utilisez 443 ou autre chose.autoutilisera443.<tun interface>: c'est le nom de l'interface VPN. Sur Linux, vous pouvez le configurer à n'importe quoi. Ou macOS, il doit suivre un modèle plus ennuyeux. Si vous vous sentez paresseux, utilisez simplementautoici.<local tun ip>: adresse IP locale du tunnel. Utilisez toute adresse IP privée que vous n'utilisez pas ici.<remote tun ip>: adresse IP à distance du tunnel. Voir plus haut. Les IP de tunnel local et distant doivent être les mêmes sur le client et sur le serveur, juste inversé. Pour une raison quelconque, j'ai tendance à choisir192.168.192.254pour le serveur, et192.168.192.1pour le client. Ces valeurs seront utilisées si vous mettezautopour les IP des tunnels locaux et éloignés.<external ip>(serveur seulement) : l'adresse IP externe du serveur. Peut être laissé à"auto".<gateway ip>(client seulement): l'adresse IP du routeur interne. La première ligne imprimée parnetstat -rnvous le dira (gateway).
Si tous les autres paramètres d'une commande sontauto, ils n'ont pas à être spécifiés.
Projets connexes
- Robert Debock maintientan Ansible role for DSVPN
- OpenMPTCProuterest un routeur OpenWrt OS qui prend en charge DSVPN
- Yecheng Fu maintient uneDocker image for DSVPN
Pourquoi
J'avais besoin d'un VPN qui fonctionne dans un environnement où seuls TCP/80 et TCP/443 sont ouverts.
WireGuard ne fonctionne pas sur TCP.
GloryTunest excellent, mais nécessite une post-configuration et la branche maintenue utilise UDP.
J'ai oubliéVTUN-libsodiumMais il aurait été trop complexe et surface d'attaque pour un simple cas d'utilisation.
OpenVPN est horriblement difficile à installer.
Sshuttle est très gentil et je l'ai beaucoup utilisé dans le passé, mais ce n'est pas un VPN. Il ne tunnele pas le trafic non-TCP. Il nécessite également une installation complète de Python, que je préfère éviter sur mon routeur.
Tout le reste que j'ai regardé était soit trop difficile à utiliser, lent, gonflé, n'a pas travaillé sur macOS, n'a pas travaillé sur de petits appareils, était compliqué à compiler en raison de dépendances, n'a pas été maintenu, ou ne se sentait pas en sécurité.
TCP-over-TCP n'est pas aussi mauvais que certains documents le décrivent. Il fonctionne étonnamment bien dans la pratique, en particulier avec les algorithmes modernes de contrôle de la congestion (BBR). Pour les algorithmes traditionnels qui dépendent de la perte de paquets, DSVPN combine les régulateurs de congestion interne et externe en diminuantTCP_NOTSENT_LOWATet déposer les paquets lorsque la congestion est détectée à la couche externe.
Cryptographie
Les primitives cryptographiques utilisés dans DSVPN sont disponibles en tant que projet autonome:Charm.
Garanties, soutien, ajouts de fonctionnalités
Aucune.
C'est ce que j'utilise, parce que ça résout un problème que j'avais. L'étendre pour résoudre différents problèmes n'est pas prévu, mais n'hésitez pas à le fourcher et à l'adapter à vos besoins!
