OVPN-DCO-WINは、「Windows用のOpenVPNデータチャネルオフロード」の略です。これは、仮想ネットワークアダプターとして機能し、OpenVPNデータチャネルを処理するために必要な機能を実装する最新のWindowsドライバーです。 OVPN-DCO-Winを使用する場合、OpenVPNソフトウェアはユーザーとカーネルスペース(暗号化、復号化、ルーティング用)の間でデータトラフィックを行き来しませんが、ペイロードの操作はWindowsカーネルで行われます。ドライバーは、最新のフレームワーク(WDFとnetAdaptercx)を使用して開発されています。そのため、コードは既存のNDISミニポートドライバーとの比較を読み取り、維持するのが簡単です。スピードごとに、新しいドライバーはTap-Windows6と大幅に優れた比較を実行するため、WindowsでOpenVPNのパフォーマンスを妨げるボトルネックを排除するはずです。
OVPN-DCO-WINは、OpenVPN 2.6から始まるデフォルトのドライバーです。
署名済みのドライバーを含む最新のOpenVPN 2.6リリースをインストールできます。
または、GitHubからリリースを入手できます。
DevCon Tool(WDKの一部として利用可能)を使用して、ドライバーをインストールできます。
devcon install ovpn-dco.inf ovpn-dco
このプロジェクトには、開発テストベッド、リファレンスクライアント、API使用の例として機能するOVPN-DCO-CLIコマンドラインツールが含まれています。これにより、OVPN-DCO Linuxプロジェクトの./oVPN-CLIツールを使用して、2つのWindowsホスト間、またはWindowsとLinuxホストの間にVPNトンネルをセットアップできます。
Windows <-> Windowsトンネルをセットアップするには、最初のホスト実行時に:
ovpn-dco-cli.exe udp i4 0.0.0.0 1194 192.168.100.200 1194 10.8.0.2 255.255.255.0 10.8.0.1 data64.key 0
ここで、ソケットを結合する「0.0.0.0 1194 "ローカルIPアドレス/ポート" 192.168.100.200 1194 "リモートアドレス/ポート" 10.8.0.2 "はローカルVPN IPです。
2番目のWindowsホストで実行されます:
ovpn-dco-cli.exe udp i4 0.0.0.0 1194 192.168.100.100 1194 10.8.0.1 255.255.255.0 10.8.0.1 data64.key 1
リモートIP、VPN IP、およびキー方向(最後の0/1桁)は異なることに注意してください。
WindowsとLinuxの間にトンネルをセットアップするには、2番目の(Linux)ホストで実行します。
# ip link add dev ovpn0 type ovpn-dco
# ip link set ovpn0 up
# ip link set mtu 1428 dev ovpn0
# ip addr add dev ovpn0 10.8.0.1/24
# tests/ovpn-cli ovpn0 new_peer 1194 0 192.168.100.100 1194 10.8.0.2
# tests/ovpn-cli ovpn0 new_key 0 aes 1 tests/data64.key
192.168.100.150はLinuxホストIPアドレス、192.168.100.100はWindowsホストIPアドレスです。
トンネルを確立した後、ホスト(10.8.0.1 < - > 10.8.0.1)をpingし、IPERFテスト(最初のホストでIPERF3 -S 10.8.0.2を実行できるはずです。 )VPNトンネル経由。
OVPN-DCO-CLIツールを生産に使用することは非常に悪い考えであることに注意してください。なぜなら、キーネゴシエーションを行わず、代わりに静的キー(data64.Key)を使用することに注意してください。
ドライバーを使用するには、CreateFileを呼び出してファイルハンドルを取得する必要があります。シンボリックリンクまたはデバイスインターフェイスを使用して、ファイルパスを取得できます。 OVPN-DCOツールの例を次に示します(以下を参照):
HANDLE h = CreateFileA("\\.\ovpn-dco", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM | FILE_FLAG_OVERLAPPED, NULL);
ハンドルを取得した後、クライアントはdeviceiocontrolを使用し、コールを読み取り/書き込み接続を設定し、コントロールパケットを送信/受信します。 IOCTLコマンドのリストとそれらの使用方法については、uapi.hを参照してください。
まず、クライアントはovpn_ioctl_new_peerコマンドでピアを初期化する必要があります。クライアントは、ローカル/リモートIPアドレス/ポート(IPv4またはIPv6のいずれか)とトランスポートプロトコル(TCPまたはUDP)を含むOVPN_NEW_PEER構造を渡します。
ピアを初期化した後、クライアントはovpn_crypto_data構造の一部として、cipherアルゴリズム(サポートされている「none」および「aes-gcm」)、crypto keys and peer-idに合格しました。 OpenVPN Cryptoの説明は、このドキュメントの範囲を超えています。
cryptoを設定した後、クライアントはovpn_ioctl_set_peerコマンドを介してセッションのキープライブパラメーター(ovpn_set_peer struct)を設定することができます。 Keepalive Intervalは、発信データトラフィックがない場合に特別なKeepaliveパケットを送信する頻度を定義します。 KeepAlive Timeoutは、着信データトラフィックがない場合にユーザースペースに通知するタイミング(エラーで読み取り要求を完了することにより)を定義します。
VPNセッションを開始するには、クライアントはovpn_ioctl_start_vpnコマンドを送信します。これにより、ドライバーがネットワークアダプターを開始することを信号します。
VPNセッションを開始した後、クライアントはネットワークアダプター(IPアドレス、ネットマスク、ゲートウェイ)とルーティングをセットアップします。
コントロールチャネルパケットを送信および受信するには、クライアントは読み取り/WriteFileコールを使用します。 File_flag_Overlappedを渡してファイルを作成し、構造を重ねて読み取り/書き込みファイルコールを作成することにより、オーバーラップIOを使用することをお勧めします。 OVPN-DCO-CLIはASIOを使用しており、これらの低レベルの詳細を抽象化しています。
OVPN-DCO-WINドライバーは、デフォルトで2.6リリースから開始してOpenVPNを使用します。
OpenVPN3は、最新のマスターブランチでOVPN-DCO-Winもサポートしています。
ロギングは、ETWに基づいたTracelogging APIを介して実行されます。ターゲットマシンのログを表示するには:
traceview.exe
実行します4970F9cf-2c0c-4f11-b1cc-e3a1e9958833
> OK分析のためのログを収集するには:
wpr -start ovpn-dco-win.wprp
を実行する(WPRPファイルはドライバーソースツリーにあります)wpr -stop ovpn-dco-win.etl
を実行しますETLファイルは、たとえば、Windows Performance Analyzer( wpa.exe
)によって開くことができます。
添付のdebbuger(windbg)のログを表示するには、管理者コマンドプロンプトでtracelog.exe
使用します。
tracelog -start MyTrace -guid #4970F9cf-2c0c-4f11-b1cc-e3a1e9958833 -rt -kd
ブートの問題が発生した場合は、Autoggerセッションを有効にすることをお勧めします。 ovpn-dco-autologger.reg
ファイルを実行します。これにより、ネクサリーレジストリキーが作成されてから再起動します。
ドライバーログは%SystemRoot%System32LogFilesWMIovpn-dco.etl
に保存されます。
OVPN-DCO-WINのリリースビルドは再現可能です。つまり、同じビルド環境を使用する場合、まったく同じovpn-dco.sysバイナリを取得する必要があります。そうすれば、バイナリ形式でリリースされたドライバーが実際にこのリポジトリのソースコードからコンパイルされていることを確認できます。これは、Microsoftのドライバー署名要件により、セルフコンパイルされたドライバーを実行することが難しくなるため、これは便利です。
リリースされたドライバーは、Windows 11 EWDK(Enterprise Windows Driver Kit)で構築されています。名前にもかかわらず、Windows 10でも動作します。ここからダウンロードできます:https://docs.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk
ovpn-dco.sysファイルを取得した場合、次のように確認できます。
signtool remove /s ovpn-dco.sys
LaunchBuildEnv.cmd
を実行します。msbuild /p:platform=<arch> /p:configuration=release /p:signmode=off ovpn-dco-win.vcxproj /t:Build
<arch>
がWin32
、 x64
、 ARM
またはARM64
を構築します。<arch>/Release/ovpn-dco.sys
を確認し、ステップ1のファイルには同じSHA256ハッシュがあることを確認してください。lev stipakov [email protected]にお問い合わせください(lev__ on#openvpn-devel)