UDPセッション用の一般的なDTLSラッパー。 stunnelのように、しかしudpの場合。 WireGuardまたはUDP OpenVPNまたはその他の接続指向のUDPセッションをラッピングするのに適しています。
「クライアント」は、最大のUDPトラフィックを受信し、暗号化されたDTLS接続を介して「サーバー」に転送します。 「サーバー」はUDPポートをリッスンし、暗号化されたDTLSセッションを受け入れ、各セッションからのメッセージをPlantext UDPポートへの別のUDP接続として転送します。
事前に構築されたバイナリはこちらから入手できます。
または、ソースからDTLSPIPEをインストールすることもできます。ソースディレクトリ内で次のコマンドを実行します。
make install
次のセットアップがあると仮定します。パブリックIPアドレス203.0.113.11を備えたサーバー、ポート514でUDPサービスを実行しています。このサービスに安全にアクセスし、このサービスとこのサービスとの間にUDPデータグラムを暗号化および認証します。
dtlspipe genpskで事前に共有キーを生成しますdtlspipe -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:2815203.0.113.11:514ではなくアドレス127.0.0.1:2816使用します。少数のメモ:
127.0.0.1の使用もオプションであり、exampleで使用されてLocalHostからのポートアクセスのみを制限します。 0.0.0.0を使用して、外部からのネットワークアクセスを許可します。DTLSPIPE_PSK環境変数を介して指定することもできます。dtlspipeセットアップは、一般的なケースの模範を使用して実行できますが、より具体的には、dtlspipeサーバーはワイヤガードサーバーポートを指す必要があり、ワイヤーガードクライアントはdtlspipeクライアントのポートと通信する必要があります。
WireGuardクライアント構成に次の調整を行う必要があります。
[Peer]セクションにMTU = 1280を追加します。AllowedIPsからDTLSPIPEサーバーアドレスを除外します。この計算機はあなたを助けるかもしれません。サーバーアドレスの例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サーバーは、いくつかのDPIシステムを回避するために、デフォルトでメッセージをスキップします。これは、いくつかのDOSセキュリティリスクに関連付けられています。サーバーオプション-skip-hello-verify=falseを追加してください。そのような動作が望ましくない場合。あるいは、このようなリスクはファイアウォールで軽減される可能性があり、セッションがサーバーポートでカウントされることが制限されます。
$ 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)