Pembungkus DTLS generik untuk sesi UDP. Seperti stunnel , tetapi untuk UDP. Cocok untuk membungkus Wireguard atau UDP OpenVPN atau sesi UDP yang berorientasi koneksi lainnya.
"Klien" menerima lalu lintas UDP yang paling buruk dan meneruskannya ke "server" melalui koneksi DTLS yang dienkripsi. "Server" mendengarkan port UDP dan menerima sesi DTLS terenkripsi, meneruskan pesan dari setiap sesi sebagai koneksi UDP terpisah ke port UDP plaintext.
Binari pra-dibangun tersedia di sini.
Atau, Anda dapat menginstal DTLSpipe dari Sumber. Jalankan perintah berikut dalam direktori sumber:
make install
Mari kita asumsikan Anda memiliki pengaturan berikut: Anda memiliki server dengan alamat IP publik 203.0.113.11, menjalankan beberapa layanan UDP di port 514. Anda ingin mengakses layanan ini dengan aman dan memiliki datagram UDP antara Anda dan layanan ini dienkripsi dan diautentikasi.
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 bukannya 203.0.113.11:514 untuk komunikasi dengan layanan.Beberapa catatan:
127.0.0.1 untuk pengikat port juga opsional dan digunakan dalam contoh untuk membatasi akses port dari localhost saja. Gunakan 0.0.0.0 untuk memungkinkan akses jaringan dari luar.DTLSPIPE_PSK .Pengaturan DTLSPIPE dapat dilakukan dengan menggunakan contoh untuk case generik, tetapi lebih khusus lagi, server DTLSPIPE harus menunjuk ke port server Wireguard dan klien Wireguard harus berkomunikasi dengan port klien DTLSpipe.
Anda perlu melakukan penyesuaian berikut untuk konfigurasi klien Wireguard:
MTU = 1280 ke bagian [Peer] dari Wireguard Client dan Server Tunnel Config.AllowedIPs di konfigurasi klien Wireguard. Kalkulator ini dapat membantu Anda. Contoh untuk alamat server 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
DTLSPIPE Server melewatkan pesan HellOverify secara default untuk mengatasinya beberapa sistem DPI. Ini terkait dengan beberapa risiko keamanan DOS. Harap tambahkan opsi server -skip-hello-verify=false jika perilaku tersebut tidak diinginkan. Atau risiko tersebut dapat dikurangi dengan firewall, membatasi sesi yang dihitung pada port server.
$ 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)