質問

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

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

役に立ちましたか?

解決

Tap-Win32ドライバーを探しているようです。これは、Windows上のOpenVPNが使用している仮想インターフェースを作成するために使用するドライバーであり、実際には OpenVPNパッケージ。このサブシステムは多くの* nixでも利用可能です。

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

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

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

  1. TAPインターフェースを操作するアプリケーションが開始される前に、1つ以上の仮想インターフェースが事前に作成されます(インストーラーによって?)。これらのインターフェースは切断された状態で開始されます。
  2. アプリケーションが起動し、" \\。\ Global \ GUID.tap"で特別なCreateFile呼び出しを実行します。 GUIDは、特定の仮想インターフェイスを記述するGUIDに置き換えられます。仮想インターフェイスは、「tap-win32 \ common.h」でADAPTER_KEYとして定義されているレジストリキーで繰り返すことができます。 OpenVPNソースコードで。
  3. アプリケーションは、DeviceIoControl呼び出しを実行する場合があります。 OpenVPNはこれを何度も使用して、ドライバーバージョンの取得、MTUの取得、TUNモードの設定、その他のさまざまなことを行います。
  4. この時点で、インターフェイスはおそらくWindowsで接続されているように表示され、Windows自体から既に受信しているDHCP要求を読んでいる可能性もあります。 OpenVPNは、WindowsネットワークAPIの他の部分を使用してインターフェイスを構成するために大量のフープラを通過しますが、これはTAPドライバーに固有のものではありません。

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

他のヒント

MSDN Rasダイヤル機能

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

ページから:

  

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top