OVPN-DCO-WIN은 "Windows 용 OpenVPN 데이터 채널 오프로드"를 나타냅니다. 가상 네트워크 어댑터로 기능하고 OpenVPN 데이터 채널을 처리하기 위해 필요한 기능을 구현하는 최신 Windows 드라이버입니다. OVPN-DCO-WIN을 사용하는 경우 OpenVPN 소프트웨어는 사용자와 커널 공간 (암호화, 암호 해독 및 라우팅)간에 데이터 트래픽을 앞뒤로 보내지 않지만 페이로드의 작업은 Windows 커널에서 이루어집니다. 드라이버는 최신 프레임 워크 인 WDF 및 NetAdapterCX를 사용하여 개발되고 있습니다. 이 때문에 코드는 기존 NDIS Miniport 드라이버와의 비교를 읽고 유지하기가 더 쉽습니다. Speed-Wise 새로운 드라이버는 Tap-Windows6과 비교하여 훨씬 더 나은 비교를 수행하므로 Windows에서 OpenVPN의 성능을 방해하는 병목 현상을 제거해야합니다.
OVPN-DCO-WIN은 OpenVPN 2.6에서 시작하는 기본 드라이버입니다.
서명 드라이버를 포함하여 최신 OpenVPN 2.6 릴리스를 설치할 수 있습니다.
또는 Github에서 릴리스를 얻을 수 있습니다.
DevCon 도구 (WDK의 일부로 사용 가능)를 사용하여 드라이버를 설치할 수 있습니다.
devcon install ovpn-dco.inf ovpn-dco
이 프로젝트에는 개발 테스트 베드, 참조 클라이언트 및 API 사용 예제로 작동하는 OVPN-DCO-CLI 명령 라인 도구가 포함되어 있습니다. 이를 통해 OVPN-DCO Linux 프로젝트의 ./ovpn-cli 도구를 사용하여 두 개의 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"원격 주소/포트 "는 로컬 VPN IP입니다.
두 번째 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 사이에 터널을 설정하려면 두 번째 (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)를 핑하고 IPERF 테스트를 실행할 수 있어야합니다 (첫 번째 호스트에서 IPERF3 -S 10.8.0.2는 IPERF3 -C 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 및 Read/WriteFile 호출을 사용하여 연결을 설정하고 제어 패킷을 보내고받습니다. IOCTL 명령 목록은 UAPI.H와 OVPN-DCO-Cli.CPP를 사용하는 방법에 대해 참조하십시오.
먼저 클라이언트는 OVPN_IOCTL_NEW_PEER 명령으로 피어를 초기화해야합니다. 클라이언트는 OVPN_NEW_PEER 구조를 통과하며 로컬/원격 IP 주소/포트 (IPv4 또는 IPv6) 및 전송 프로토콜 (TCP 또는 UDP)을 포함합니다.
피어를 초기화 한 후 클라이언트는 암호 알고리즘 (지원되는 "None"및 "AES-GCM"), OVPN_CRYPTO_DATA 구조의 일부로 Crypto Keys 및 Peer-ID를 사용하여 OVPN_IOCTL_NEW_KEY 명령을 전달했습니다. OpenVPN에 대한 설명 암호화는이 문서의 범위를 벗어납니다.
Crypto를 설정 한 후 클라이언트는 OVPN_IOCTL_SET_PEER 명령을 통해 세션에 대해 rectalive 매개 변수 (OVPN_SET_PEER STRUCT)를 설정할 수 있습니다. Keepalive Interval은 나가는 데이터 트래픽이 없을 때 특수 Keepalive 패킷을 보내는 빈도를 정의합니다. KeepAlive timeout 수신 데이터 트래픽이없는 경우 사용자 공간을 알리는시기 (오류로 읽기 요청을 완료 함)를 정의합니다.
VPN 세션을 시작하려면 클라이언트는 ovpn_ioctl_start_vpn 명령을 보냅니다. 이것은 드라이버가 네트워크 어댑터를 시작하도록 신호를 보냅니다.
VPN 세션을 시작한 후 클라이언트는 네트워크 어댑터 (IP 주소, 넷 마스크, 게이트웨이) 및 라우팅을 설정합니다.
제어 채널 패킷을 보내고 받으려면 클라이언트는 읽기/쓰기 파일 호출을 사용합니다. file_flag_overlapped를 createfile 호출로 전달하고 겹쳐진 구조를 통과하여 통화를 읽고 쓰기로 전달하여 중첩 된 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
실행하십시오 예를 들어 Windows Performance Analyzer ( wpa.exe
)에 의해 ETL 파일을 열 수 있습니다.
첨부 된 Debbuger (WINDBG)의 로그를 보려면 관리자 명령 프롬프트에서 tracelog.exe
사용하십시오.
tracelog -start MyTrace -guid #4970F9cf-2c0c-4f11-b1cc-e3a1e9958833 -rt -kd
부팅 문제가 발생하면 Autologger 세션을 활성화 할 수 있습니다. NECCESSARY 레지스트리 키를 생성 한 다음 재부팅하는 ovpn-dco-autologger.reg
파일을 실행하십시오.
드라이버 로그는 %SystemRoot%System32LogFilesWMIovpn-dco.etl
에 저장됩니다.
OVPN-DCO-WIN의 릴리스 빌드는 재현 가능합니다. 즉, 동일한 빌드 환경을 사용하면 동일한 OVPN-DCO.SYS BINARY를 얻어야합니다. 이렇게하면 이진 양식으로 해제 된 드라이버가 실제로이 저장소의 소스 코드에서 컴파일 된 것을 확인할 수 있습니다. 이것은 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]에 문의