このリポジトリには、TUN デバイスを開いて生のトラフィックを UDP 経由で転送することによる、ポイントツーポイント仮想プライベート ネットワークの簡単な実装が含まれています。この VPN は、2 つのホスト間にトンネルを作成するように設計されています。
TUN トラフィックは、暗号化されていない UDP パケットを介して 2 つのエンドポイント間で逐語的に送信されます。したがって、これは、より安全なプロトコル (SSH など、github.com/dsnet/sshtunnel を参照) がこの VPN 上で実行されている場合にのみ使用する必要があります。攻撃者がエンドポイント上の他のローカルにバインドされたソケットに接続するのを防ぐために、IP トラフィックを指定されたポートのみに制限する単純なポート フィルターが組み込まれています。 udptunnel のユーザーは、悪意のあるトラフィックを制限するための二次的な手段として iptable ルールをセットアップする必要もあります。
これは Linux のみをサポートします。
デーモンを構築します。
go get -u github.com/dsnet/udptunnel
サーバー構成ファイルを作成します。
{
"TunnelAddress" : "10.0.0.1" ,
"NetworkAddress" : ":8000" ,
"AllowedPorts" : [ 22 ] ,
}
NetworkAddress
に空のホストが含まれている場合は、デーモンがサーバー モードで動作していることを示します。
クライアント構成ファイルを作成します。
{
"TunnelAddress" : "10.0.0.2" ,
"NetworkAddress" : "server.example.com:8000" ,
"AllowedPorts" : [ 22 ] ,
}
ホストserver.example.com
、クライアントがサーバーに到達できるアドレスに解決されると想定されます。
クライアントとサーバーの両方でデーモンを起動します ( $GOPATH/bin
$PATH
にあると仮定します)。
[email protected] $ udptunnel /path/to/config.json
[email protected] $ udptunnel /path/to/config.json
他のエンドポイントにアクセスしてみます (例: クライアントからサーバー)。
[email protected] $ ping 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_req=1 ttl=64 time=56.7 ms
64 bytes from 10.0.0.1: icmp_req=2 ttl=64 time=58.7 ms
64 bytes from 10.0.0.1: icmp_req=3 ttl=64 time=50.1 ms
64 bytes from 10.0.0.1: icmp_req=4 ttl=64 time=51.6 ms
[email protected] $ nmap 10.0.0.1
Host is up (0.063s latency).
PORT STATE SERVICE
22/tcp open ssh
[email protected] $ ssh 10.0.0.1
Password: ...
上の例は、クライアントが10.0.0.1
でアドレス指定可能なサーバーと通信しようとしている様子を示しています。代わりに、 10.0.0.2
でクライアントにダイヤルすることで、サーバーからコマンド例を実行できます。