2


2

仮想ネットワーク接続

VPN接続用のopenvpnやTeamviewerなどの多くのプログラムが、Windows上で仮想ネットワーク接続を作成していることがわかります。 テスト用に自分用に作成したいです。

プログラムで作成することは可能ですか?

2 Answer


3


Tap-Win32ドライバーを探しているようです。 これは、Windows上のOpenVPNが使用している仮想インターフェイスの作成に使用するドライバーであり、実際にはhttp://www.openvpn.net/index.php/open-source/downloads.html[OpenVPNパッケージ]の一部です。 このサブシステムは、多くの* nixでも利用可能です。

このTAPドライバーへのインターフェイスは、すべてのOSでほぼ同じです。 特別なファイルを開き、このファイルに未加工のイーサネットフレームを書き込みます。 次に、ドライバーはこれらのフレームを仮想インターフェースに挿入します。 逆に、仮想インターフェースで送信されるパケットは、生のイーサネットフレームとして特殊ファイルから読み取ることができます。

ほとんどの実装には、レイヤー2ではなくレイヤー3で動作するTUNモードもあります。 したがって、未加工のIP、IPv6などを読み取ることになります。 イーサネットフレームの代わりにパケット。

私はWindowsでこれを使った経験がないので、ここでソースコードをざっと見ていきます。 OpenVPNは、tun.c関数open_tunでこれらの手順のほとんどを実行します。 この関数には複数の定義がありますが、異なるOS向けに#ifdefされています(したがって、CreateFileを検索してください)。 これがWindows上で動作するように見える基本的な方法は次のとおりです。

  1. TAPインターフェースを操作するアプリケーションを開始する前に、1つまたは より多くの仮想インターフェースが事前に作成されます(インストーラーによって?)。 これらのインターフェイスは切断された状態で開始されます。

  2. アプリケーションが起動し、特別なCreateFile呼び出しを実行します 「\\。\ Global \ GUID.tap」。 GUIDは、特定の仮想インターフェイスを記述するGUIDに置き換えられます。 仮想インターフェイスは、OpenVPNソースコードの「tap-win32 \ common.h」でADAPTER_KEYとして定義されているレジストリキーで繰り返すことができます。

  3. アプリケーションは、いくつかのDeviceIoControl呼び出しを実行する場合があります。 OpenVPNが使用する これは、ドライバーのバージョンを取得したり、MTUを取得したり、TUNモードを設定したり、その他のさまざまなことを行うために何度も行われます。

  4. この時点で、インターフェイスはおそらく接続された状態で表示されています Windowsであり、Windows自体から既に受信しているDHCP要求を読んでいる場合もあります。 OpenVPNは、WindowsネットワークAPIの他の部分を使用してインターフェイスを構成するために大量のフープラを通過しますが、これはTAPドライバーに固有のものではありません。

したがって、APIは実際には単なる特別なファイルであり、したがって非常に単純ですが、実際にインターフェイスを管理することはたくさんあります。 しかし、テストのためだけにいるなら、これで十分でしょう。 その後、Windowsでテストインターフェイスを手動で構成できます。


0


これは正しい方向への一歩かもしれませんか?

ページから:

_ リモートアクセスサービス(RAS)は、ポイントツーポイントプロトコル(PPP)を使用する従来のリモートアクセス接続に加えて、仮想プライベートネットワーク(VPN)接続をサポートします。 VPN接続では、VPNパケットはIPパケットにカプセル化され、インターネットなどのIPネットワークを介して送信されます。 したがって、IPネットワークへのアクセスは、VPN接続を確立するための要件です。 クライアントコンピューターがIPネットワークへの接続など、IPネットワークへの常時接続を持っている場合、クライアントはRasDial機能への単一の呼び出しを使用してVPN接続を確立できます。 _