web-dev-qa-db-ja.com

OpenVPNパケットの内容をログに記録するにはどうすればよいですか?

任意のネットワーク接続を分析およびデバッグする開発者ツールを設計していますが、ローカルにインストールするソフトウェアではなく、サービスとして提供したいと考えています。

理想的には、すべてのインバウンドパケットとアウトバウンドパケットをユーザーごとにデータベースに保存したいと思います。

例えば:

  1. 開発者は、ソフトウェアを実行しているマシンをVPNに接続します。
  2. 次に、開発者は自分のソフトウェアを実行します。ソフトウェアは任意のホストに接続できます。
  3. トラフィックはVPNを介してルーティングされ、そこでログに記録されます。
  4. その後、開発者はそのセッションのログにアクセスできます。

3番目のステップに対処する方法を理解するのに苦労しています。

マニュアルを読み、Webを検索し、Server Faultを検索しましたが、どこかにパズルのピースが欠けているのではないかと思います。仮想インターフェイスをスニッフィングするための追加のツールが必要ですか、それともOpenVPNがこれを何らかの方法で処理できますか?

2
Jim

OpenVPN自体は何もスニッフィングしませんが、標準のスニッフィングツールを使用できます。

トンネルモードで動作するようにOpenVPNを構成すると、アプリケーションホストとサーバー間の接続は、独自のIPアドレスを持つ仮想インターフェイス(unixライクなホストではtunなどの名前)に表示されます。それぞれの側に。アプリケーションの観点からは、サーバーはアプリケーションホストの同じネットワーク上に物理的に存在し、ルーターとして機能しているように見えます。したがって、通常のネットワークインターフェイスで動作するスニッフィングツールは、必要なデータを取得します。しましょう。

私は多かれ少なかれ次のように何かをします

  • ユーザーにVPNに接続してもらいます(もちろん、OpenVPNはVPNサーバーを介してトラフィックをルーティングするように構成する必要がありますall)。
  • サーバー側で、接続時刻、ユーザー、および使用しているIPアドレスを登録するフックを構成します
  • (オプションで)サーバー側で、イベントを登録する切断時に別のフックを構成します。

一方、VPN仮想デバイス上でスニッフィングプログラムを実行して、インターフェイスから継続的にパケットを取得し、リモートアドレスを調べて、現在のユーザーリストと照合し、データベースに保存します。これはおそらく、ネットワークインターフェイスからパケットを抽出するための標準のスニッフィングツールと、パケットを解析し、必要な情報を抽出してどこかに保存するカスタムツールの組み合わせになります。

2
Marco Righele

VPNエンドポイントとして機能しているコンピューター上のOpenVPNTUNまたはTAPインターフェイスを離れるときに、トラフィックをスニッフィングする必要があります。ここには魔法はありません(または少なくとも私が考えることができる以上のものはありません)。インターフェースは、インターフェースであり、インターフェースです。

OpenVPNはパケットスニッフィングのネイティブ機能を提供しませんが、tcpdumpやtshark/wiresharkなどのその任務を実行するための専用ツールがたくさんあります。

1
user62491

実際、OpenVPNはどのように全体像に適合していますか?

Linuxが「TUN」と「TAP」(それぞれIPトンネルスタイルとイーサネットスタイルのインターフェース)と呼ばれる「仮想」ネットワークインターフェースをサポートしていることをどこかで読んだことが漠然と感じているので、グーグルで検索しました。たまたまそのインターフェイスのタイプに同じ方法で名前を付けるOpenVPNを見つけました(Linuxで同じカーネル機構を使用していると私は信じているため)。

実際、あなたは これらの仮想インターフェイスの直接操作 の世話をしていると思います。これにより、独自のネットワークインターフェイスを作成でき、ユーザースペースアプリケーションを介してそれらを通過するすべてのトラフィックを効果的に渡すことができます。

0
kostix