問題タブ [tun]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
19984 参照

java - VpnService を使用した Android ファイアウォール

BS プロジェクトの VpnService を使用して、Android 用の単純なファイアウォールを実装しようとしています。ルート化されていないデバイスで動作するため、VpnService を選択します。接続をログに記録し、接続をフィルタリングできます。(IPベース)

これを行うアプリケーションがあるため、可能です。

Google Play アプリ ストア

いくつかの調査を行ったところ、VpnService が Tun インターフェイスを作成することがわかりました。これ以上何もない。(トンネルだけの VPN 実装はありません) このインターフェイスにアドレスを指定し、ルートを追加できます。ファイル記述子を返します。送信パッケージを読み取り、受信パッケージを書き込むことができます。

VpnService 派生クラスを作成し、サービスを開始しました。tun0VpnService.Builder クラスで設定できます。mobiwol's接続を見ると、10.2.3.4/32 アドレスadb shell netcfgのインターフェイスが作成されます。tun0すべてのパッケージをこのプライベート ネットワークにルーティングし、インターネットに送信します。私も同じことをしようとしています。10.0.0.2/32 アドレスのインターフェイスを作成しました。addRoute 関数でルートを追加しました。0.0.0.0/0 したがって、私が理解している限り、すべてのネットワークからすべてのパッケージをキャプチャできます。(私はこの主題にかなり慣れていないので、まだ学んでいます。インターネットで作品を見つけたので、よくわかりません。間違っている場合は修正してください。)

サービスで 2 つのスレッドを作成しました。ファイル記述子から読み取り、保護されたソケットで 127.0.0.1 に書き込みます。(127.0.0.1 に読み書きする必要があるかどうかよくわかりません。これが問題なのかもしれません。)

ファイル記述子から読み取ったパケットを分析しました。例えば:

残りのデータに他の IP ヘッダーは見つかりませんでした。10.0.0.2 ネットワークからローカル ネットワーク (192.168.2.1) とインターネットの間にカプセル化が必要だと思います。わからない。

私の本当の問題は、着信パッケージのスレッドで立ち往生していることです。何も読めません。応答なし。スクリーンショットでわかるように、受信データはありません:

スクリーンショット

保護されたソケットで 127.0.0.1 への書き込みに使用しているのと同じ接続から読み取ろうとしています。

Android <-> Tun インターフェイス (tun0) <-> インターネット接続

すべてのパッケージ <-> 10.0.0.2 <-> 127.0.0.1? <-> 192.168.2.1 <-> インターネット?

VpnService について役立つ情報は見つかりませんでした。(ToyVPN の例は役に立たない) Linux Tun/Tap に関するドキュメントを読みましたが、それはホストとリモート間のトンネリングに関するものです。ホストとリモートが同じデバイスに必要です。トンネリングとは違います。

これどうやってするの?

編集:コードが要求されました。それは非常に初期の段階にあります。前に述べたように、これは VpnService 派生クラスです。サービススレッドに作成された 2 つのスレッド (読み取りと書き込み)。

0 投票する
1 に答える
3666 参照

c - Linux TUN/TAP: TAP デバイスからデータを読み戻せません

質問は、Tun/Tap モジュールを利用したい Linux ホストの適切な構成に関するものです。

私の目標:

既存のルーティング ソフトウェア (以下の APP1 と APP2) を使用しますが、それによって送受信されるすべてのメッセージを傍受して変更します (メディエーターによって行われます)。

私のシナリオ:

  • tap1 と tap2: それぞれ IFF_TAP フラグと IP 10.0.0.1/24 と 10.0.0.2/24 で設定されたタップ デバイス。デバイスを作成するコードは次のとおりです。

    /li>
  • メディエーター: 単純に、tap1 と tap2 の間でデータを中継するための小さな自己記述コード。基本構造は次のとおりです。

    /li>
  • APP1 および APP2: それぞれ、tap1 および tap2 を介して通信する OSPF ルーティング デーモン。デーモンのトレースは、基本的に次のシステム コールが関係していることを示しています。

    /li>

私の使い方:

  • wireshark を tap1 に接続します。(トラフィックはまだ見られません)。
  • APP1 を開始します。(wireshark は、ソースが 10.0.0.1 (tap1) の IGMP および OSPF メッセージを認識します)
  • APP2 を起動します。(Mediator がまだ実行されていないため、wireshark はソース 10.0.0.1 (tap1) の IGMP および OSPF メッセージのみを認識します)
  • メディエータを起動します。(wireshark は現在、tap1 と tap2 の両方のソースを持つ IGMP および OSPF メッセージを認識します)。

私の問題:

タップ 1 に接続された Wireshark がタップ 1 とタップ 2 の両方からのメッセージを確認しても、APP2 は APP1 から送信されたメッセージを受信せず、APP2 も APP1 からのメッセージを受信しません。上記の strace 抽出では、select() 呼び出しはファイル記述子 8 を返しません。これは実際には、tap1 に接続されたソケットです。

私の質問:

APP2 によって送信されたメッセージが APP2 によって送信され、メディエーターによって中継され、tap1 に接続されている Wireshark によって見られるにもかかわらず、APP1 がそれ​​らのメッセージを受信しないのはなぜですか?

Linux ホストに任意のタイプ/種類のルートを追加する必要がありますか?

tun/tap デバイスの設定を間違えましたか?

私の Mediator コードは正しく動作しませんか?

0 投票する
2 に答える
3599 参照

sockets - どの物理インターフェイス tun/tap デバイスが接続されているか

tun/tap デバイスが実際にどのように機能するかを理解するのに少し問題があります。これは wiki からのものです。

  1. 仮想ネットワーク デバイスは実際にどのように機能しますか? 仮想ネットワーク デバイスは、物理メディアからパケットを受信する代わりに、ユーザー空間プログラムから受信し、物理メディアを介してパケットを送信する代わりに、ユーザー空間プログラムに送信する単純なポイント ツー ポイントまたはイーサネット デバイスと見なすことができます。

tap0 で IPX を構成したとします。カーネルが IPX パケットを tap0 に送信するたびに、アプリケーション (VTun など) に渡されます。アプリケーションはそれを暗号化、圧縮し、TCP または UDP 経由で反対側に送信します。反対側のアプリケーションは、受信したデータを解凍して復号化し、パケットを TAP デバイスに書き込みます。カーネルは、実際の物理デバイスから来たかのようにパケットを処理します。

OK アプリケーションは暗号化、圧縮し、TCP または UDP 経由で反対側に送信します。

インターネットへのルーティングごとに 3 つの物理接続がある場合、tun/tap デバイスがインターネットへのルーティングに使用する物理デバイスはどれですか?

tun/tap インターフェイスと実際の物理インターフェイスとの間の実際の関係について誰も実際に話していないので、私は混乱しています。

事前にタイ

0 投票する
5 に答える
739 参照

c - AX.25 カプセル化を使用した TUN ネットワーク デバイスの作成

AX.25 カプセル化を使用して TUN ネットワーク デバイスを作成しようとしています。機能するのは: - デバイスの作成 - そのカプセル化を ax25 に設定する

うまくいかないのは、ハードウェアアドレスの設定です。これは、ノードを一意にアドレス指定するために使用されるため、ax.25 通信では重要です。

まず、TUN デバイスを作成します。

これにより、次の結果が得られます。

次に、インターフェイスを AX.25 カプセル化に設定します。

これにより、次の結果が得られます。

あとはハードウェアアドレスの設定です。ハードウェア アドレスは次のような文字列です。 FH1GOU-1 まず、このアドレスの各バイトを 1 ビット右にシフトする必要があります。次に、ioctl-magic。これは常に失敗します。また、tun-device を作成してから ifconfig を呼び出してみましたが、「サポートされていません」というエラーが発生しました。もちろん、tun デバイスに ax.25 ハードウェア アドレスを設定することは不可能である可能性がありますが、なぜ ax.25 カプセル化を設定できるのでしょうか?

ioctl を含む最後の行では、常に -1 (=エラー) が出力されます。

また、TUNSETIFF ioctl を使用して hw-address を直接設定しようとしましたが、無視されているようです。

何か案は?

0 投票する
1 に答える
462 参照

android - Android VpnService: Tun デバイスからの読み取りがハングする

私のアプリは、トラフィックの傍受に VpnService を使用しています。


1. ループ内の Tun デバイスから読み取ります。

TunDevice.read:

2.データを保護されたソケットにプロキシします。

問題は、しばらくすると TUN デバイスからの読み取りが停止することです。読み取りメソッドがハングし、しばらく (3 ~ 5 分など) 待機します。

netstat を使用すると、すべての新しい接続が SYN_SENT 状態にあることがわかり、その理由を理解できます。これらの SYN パケットを受信できないため、コードから ACK を受信できません。

問題は、それは何でしょうか? TUN デバイスがこのように動作するのはいつですか?

0 投票する
2 に答える
14417 参照

android - Android 4 OpenVPN アプリ tun_builder_error (トポロジ net30)

サーバーで OpenVPN サーバーを実行しており、複数のデバイス (スマートフォン、ノートブック、デスクトップ コンピューター、タブレットなど) を接続したいと考えています。Linux、Mac OS X、または Windows 8 タブレットとノートブックを問題なく接続できます。それで、その仕事はかなりうまくいっています。

しかし、Nexus 5 を Android 4.4.2 に接続しようとすると、OpenVPN アプリで次のエラーが表示されます。

これが私のclient.confです。

対応する server.conf:

ccd/Nexus5 ファイル:

すべてのクライアントに同じ client.conf を使用します (もちろん適合証明書)。Nexus 5を除くすべてのデバイスで動作します。調査の結果、追加するのに役立つ可能性があることを読みました

server.conf に。しかし、その後、クライアントはもう接続できないため、役に立ちません。私の設定ファイルなどにエラーを見つけることができますか?

Nexus 5 OpenVPN アプリのログは次のとおりです。

ありがとうございました!