Envoltura genérica DTLS para sesiones UDP. Como stunnel , pero para UDP. Adecuado para envolver el guía de alambre o UDP OpenVPN o cualquier otra sesión de UDP orientada a la conexión.
"Cliente" recibe el tráfico UDP más demlado y lo reenvía al "servidor" a través de la conexión DTLS cifrada. "Servidor" escucha el puerto UDP y acepta sesiones DTLS cifradas, reenviando los mensajes de cada sesión como una conexión UDP separada al puerto UDP de texto sin formato.
Los binarios preconstruidos están disponibles aquí.
Alternativamente, puede instalar dtlspipe desde la fuente. Ejecute el siguiente comando dentro del directorio de origen:
make install
Supongamos que tiene la siguiente configuración: tiene un servidor con la dirección IP pública 203.0.113.11, ejecutando algún servicio UDP en el puerto 514. Desea acceder de forma segura a este servicio y tener datagramas UDP entre usted y este servicio encriptado y autenticado.
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 en lugar de 203.0.113.11:514 para la comunicación con el servicio.Pocas notas:
127.0.0.1 para el enlace de puerto también es opcional y se usa en el ejemplo para restringir el acceso al puerto solo desde localhost. Use 0.0.0.0 para permitir el acceso a la red desde el exterior.DTLSPIPE_PSK .La configuración de DTLSPIPE se puede realizar utilizando un ejemplo para un caso genérico, pero más específicamente, el servidor DTLSPIPE debe apuntar al puerto del servidor WireGuard y el cliente de WireGuard debe comunicarse con el puerto de DTLSpipe Client.
Debe realizar los siguientes ajustes a la configuración del cliente de WireGuard:
MTU = 1280 a la sección [Peer] de la configuración del cliente y del servidor del cliente.AllowedIPs en la configuración del cliente de WireGuard. Esta calculadora puede ayudarte. Ejemplo para la dirección del servidor 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
El servidor DTLSPIPE omite el mensaje de Helloverify de forma predeterminada para solucionar algunos sistemas DPI. Está asociado con algunos riesgos de seguridad de DOS. Agregue la opción del servidor -skip-hello-verify=false si dicho comportamiento no es deseable. Alternativamente, estos riesgos pueden mitigarse con firewall, restringiendo las sesiones del recuento en el puerto del servidor.
$ 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)