Emballage générique DTLS pour les sessions UDP. Comme stunnel , mais pour UDP. Convient pour emballer Wireguard ou UDP OpenVPN ou toute autre session UDP axée sur la connexion.
"Client" reçoit le trafic UDP Plainst et le transmet au "serveur" via la connexion DTLS cryptée. "Server" écoute le port UDP et accepte les sessions DTL cryptées, transmettant les messages de chaque session en tant que connexion UDP distincte au port UDP en texte clair.
Des binaires prédéfinis sont disponibles ici.
Alternativement, vous pouvez installer DTLSpipe à partir de la source. Exécutez la commande suivante dans le répertoire source:
make install
Supposons que vous ayez une configuration suivante: vous avez un serveur avec l'adresse IP publique 203.0.113.11, exécutant un service UDP sur le port 514. Vous souhaitez accéder en toute sécurité à ce service et avoir des données UDP entre vous et ce service crypté et authentifié.
dtlspipe genpskdtlspipe -psk xxxxxxxxxxxx server 0.0.0.0:2815 127.0.0.1:514dtlspipe -psk xxxxxxxxxxxx client 127.0.0.1:2816 203.0.113.11:2815127.0.0.1:2816 au lieu de 203.0.113.11:514 pour la communication avec le service.Peu de notes:
127.0.0.1 pour le port de port est également facultative et utilisée dans l'exemple pour restreindre l'accès au port à partir de localhost uniquement. Utilisez 0.0.0.0 pour permettre à l'accès au réseau depuis l'extérieur.DTLSPIPE_PSK .La configuration DTLSpipe peut être effectuée en utilisant l'exemple pour le cas générique, mais plus précisément, le serveur DTLSpipe doit pointer vers le port de serveur Wireguard et le client Wireguard doit communiquer avec le port du client DTLSpipe.
Vous devez effectuer des ajustements suivants à la configuration du client WireGuard:
MTU = 1280 à la section [Peer] du client WireGuard et de la configuration du tunnel serveur.AllowedIPs dans la configuration du client WireGuard. Cette calculatrice peut vous aider. Exemple de l'adresse du serveur 203.0.113.11 : AllowedIPs = 0.0.0.0/1, 128.0.0.0/2, 192.0.0.0/5, 200.0.0.0/7, 202.0.0.0/8, 203.0.0.0/18, 203.0.64.0/19, 203.0.96.0/20, 203.0.112.0/24, 203.0.113.0/29, 203.0.113.8/31, 203.0.113.10/32, 203.0.113.12/30, 203.0.113.16/28, 203.0.113.32/27, 203.0.113.64/26, 203.0.113.128/25, 203.0.114.0/23, 203.0.116.0/22, 203.0.120.0/21, 203.0.128.0/17, 203.1.0.0/16, 203.2.0.0/15, 203.4.0.0/14, 203.8.0.0/13, 203.16.0.0/12, 203.32.0.0/11, 203.64.0.0/10, 203.128.0.0/9, 204.0.0.0/6, 208.0.0.0/4, 224.0.0.0/3, ::/0
Le serveur DTLSpipe saute le message Helloverify par défaut afin de solution de contournement certains systèmes DPI. Il est associé à certains risques de sécurité DOS. Veuillez ajouter l'option Server -skip-hello-verify=false si un tel comportement n'est pas souhaitable. Alternativement, ces risques peuvent être atténués avec un pare-feu, les sessions restreignant comptent sur le port serveur.
$ dtlspipe -h
Usage:
dtlspipe [OPTION]... server <BIND ADDRESS> <REMOTE ADDRESS>
Run server listening on BIND ADDRESS for DTLS datagrams and forwarding decrypted UDP datagrams to REMOTE ADDRESS.
dtlspipe [OPTION]... client <BIND ADDRESS> <REMOTE ADDRESS>
Run client listening on BIND ADDRESS for UDP datagrams and forwarding encrypted DTLS datagrams to REMOTE ADDRESS.
dtlspipe [OPTION]... hoppingclient <BIND ADDRESS> <ENDPOINT GROUP> [ENDPOINT GROUP]...
Run client listening on BIND ADDRESS for UDP datagrams and forwarding encrypted DTLS datagrams to a random chosen endpoints.
Endpoints are specified by a list of one or more ENDPOINT GROUP. ENDPOINT GROUP syntax is defined by following ABNF:
ENDPOINT-GROUP = address-term *( "," address-term ) ":" Port
address-term = Domain / IP-range / IP-prefix / IP-address
Domain = <Defined in Section 4.1.2 of [RFC5321]>
IP-range = ( IPv4address ".." IPv4address ) / ( IPv6address ".." IPv6address )
IP-prefix = IP-address "/" 1*DIGIT
IP-address = IPv6address / IPv4address
IPv4address = <Defined in Section 4.1 of [RFC5954]>
IPv6address = <Defined in Section 4.1 of [RFC5954]>
Endpoint is chosen randomly as follows.
First, random ENDPOINT GROUP is chosen with equal probability.
Next, address is chosen from address sets specified by that group, with probability
proportional to size of that set. Domain names and single addresses condidered
as sets having size 1, ranges and prefixes have size as count of addresses in it.
Example: 'example.org:20000-50000' '192.168.0.0/16,10.0.0.0/8,172.16.0.0-172.31.255.255:50000-60000'
dtlspipe [OPTION]... genpsk
Generate and output PSK.
dtlspipe ciphers
Print list of supported ciphers and exit.
dtlspipe curves
Print list of supported elliptic curves and exit.
dtlspipe version
Print program version and exit.
Options:
-cid
enable connection_id extension (default true)
-ciphers value
colon-separated list of ciphers to use
-cpuprofile string
write cpu profile to file
-curves value
colon-separated list of curves to use
-identity string
client identity sent to server
-idle-time duration
max idle time for UDP session (default 30s)
-key-length uint
generate key with specified length (default 16)
-mtu int
MTU used for DTLS fragments (default 1400)
-psk string
hex-encoded pre-shared key. Can be generated with genpsk subcommand
-rate-limit value
limit for incoming connections rate. Format: <limit>/<time duration> or empty string to disable (default 20/1m0s)
-skip-hello-verify
(server only) skip hello verify request. Useful to workaround DPI (default true)
-stale-mode value
which stale side of connection makes whole session stale (both, either, left, right) (default either)
-time-limit duration
limit for each session duration. Use single value X for fixed limit or range X-Y for randomized limit
-timeout duration
network operation timeout (default 10s)