データグラムトンネラー

TCP 接続 (別名トンネル) を介して UDP データグラムを転送する、シンプルなクロスプラットフォームのクライアント/サーバー プログラム。クライアントはマルチキャスト グループに参加し、受信したデータグラムをサーバーに転送し、サーバーはそれらを独自のサブネット上でマルチキャストします。
- シンプルさを念頭に置いて設計
- OSX 10.13.3 、 Ubuntu 16.04 、 Centos 7.4でテスト済み
- Windowsと互換性がありません
コンテンツ
要件
インストール
あらすじ
例
どのように機能するのでしょうか?
DTEP プロトコル
ライセンス
要件
- Linux または Mac OS ディストリビューションを実行しているコンピュータ
- C++ コンパイラ
10秒でインストール可能
- リポジトリをダウンロードまたは複製します。
- リポジトリに移動します。
cd <path_to_the_repo>/DatagramTunneler
- make を実行するだけで DatagramTunneler を構築します。
- DatagramTunneler バイナリを実行する準備ができました。
./bin/DatagramTunneler -h
実行方法の詳細については、以下の概要を確認してください。
あらすじ
DatagramTunneler を使用するには、最初にサーバー側を起動し、次にクライアント側を起動する必要があります。そうしないと、クライアントはサーバーへの接続に失敗し、すぐに終了します。
サーバ
dgramtunneler --server -i <udp_iface_ip> -t <tcp_listen_port> [-u <udp_dst_ip>:<port>]
- <udp_iface_ip> : 転送されたデータグラムを公開するために使用されるインターフェース
- <tcp_listen_port> : クライアント接続をリッスンするために使用される TCP ポート
- <udp_dst_ip>:<port> : (オプション) サーバーが転送されたデータグラムを公開する udp 宛先 IP とポート。指定しない場合、データグラムはクライアントが参加しているのと同じチャネルで公開されます。
クライアント
dgramtunneler --client -i <udp_iface_ip> -t <tcp_srv_ip>:<tcp_srv_port> -u <udp_dst_ip>:<port>
- <udp_iface_ip> : -u によって提供されるマルチキャスト チャネルに参加するために使用されるインターフェイス
- <tcp_srv_ip>:<port> : データグラムの転送先となるサーバーの IP およびポート
- <udp_dst_ip> : <port> : udp 宛先 IP と参加したいチャネルのポート
例
(このツールが役立つ場合は、小さな星を付けることを忘れないでください:]) サーバー側:
./bin/datagramtunneler --server -i 192.168.0.104 -u 228.14.28.52:1234 -t 28052
クライアント側:
./bin/datagramtunneler --client -i 192.168.0.105 -u 228.1.2.3:7437 -t 192.168.0.104:28052
どのように機能するのでしょうか?
DatagramTunneler の目的は、あるサブネット A からそのマルチキャスト チャネルが利用できない別のサブネット B にマルチキャスト データを転送することです。これを実現するために、以下の図に示すように、DatagramTunneler はクライアント側とサーバー側の 2 つの側に分割されます。 
クライアント側
クライアント側は、マルチキャスト チャネルが参加可能なサブネットで実行する必要があります。開始すると、次のことが行われます。
- DatagramListener サーバー (TCP) に接続します
- マルチキャスト チャネル (UDP) に参加します
- 確立された TCP 接続を使用して、受信したすべてのデータグラムをサーバーに転送します。データグラムは、Datagram Tunneler Encapsulation Protocol (DTEP) を使用して TCP 経由で送信されます。
サーバー側
サーバー側は、マルチキャストが利用できないサブネットで実行する必要があります。開始すると、次のことが行われます。
- クライアント接続をリッスンします (サーバー/クライアント インスタンスの存続期間中、受け入れられる接続は 1 つだけであることに注意してください。トンネルが切断されると、両方のエンドが終了します。
- クライアントとの接続が確立されると、クライアントから送信されたすべてのデータグラムがマルチキャスト チャネルに公開されます。そのチャネルは、サーバーの起動時に指定されたものであれば何でもかまいません。指定されていない場合は、受信したデータグラムでエンコードされた同じマルチキャスト チャネルが使用されます (DTEP を参照)。
データグラム トンネラー カプセル化プロトコル (DTEP)
データグラム トンネラー プロトコル (DTEP) は単純なバイナリ プロトコルであり、次の図で説明されています。 
DTEP パケットには、含まれるペイロードのタイプを指定する 1 バイトのヘッダーがあります。
パケットタイプ 0x00 = ハートビート
このタイプのパケットにはペイロードがありません。これはクライアントによってサーバーに送信され、接続の両端が相手が生きているかどうかを確認するのに役立ちます。
パケットタイプ 0x01 = データグラム
このパケットは、クライアントが監視するデータグラムをカプセル化します。その完全な説明は次のとおりです。 
この図は一目瞭然ですが、すべてのフィールドの内訳を次に示します。
- データグラム長: カプセル化されたデータグラムのバイト数 (DTEP ヘッダーの長さは含まれません)
- UDP チャネル アドレス: クライアントがそのデータグラムを受信するために参加したマルチキャスト グループの宛先アドレス
- UDP Channel Port : クライアントがそのデータグラムを受信するために参加したマルチキャスト グループの宛先ポート
- カプセル化された UDP データグラム: マルチキャスト チャネルからクライアントによって受信された実際のデータグラム
ライセンス
ライセンス参照