문제

VPN 연결을위한 OpenVPN 및 TeamViewer와 같은 로트의 프로그램이 Windows에서 가상 네트워크 연결을 생성하는 것을 볼 수 있습니다. 테스트 목적으로 직접 만들고 싶습니다.

프로그래밍 방식으로 하나를 만들 수 있습니까?

도움이 되었습니까?

해결책

탭 -WIN32 드라이버를 찾고있는 것 같습니다. Windows의 Driver OpenVPN은보고있는 가상 인터페이스를 만들기 위해 사용합니다. OpenVPN 패키지. 이 하위 시스템은 많은 *닉스에서도 사용할 수 있습니다.

이 탭 드라이버의 인터페이스는 모든 OS에서 거의 동일합니다. 특수 파일을 열고이 파일에 원시 이더넷 프레임을 작성하십시오. 그런 다음 드라이버는 이러한 프레임을 가상 인터페이스에 삽입합니다. 반대로, 가상 인터페이스에서 전송되는 모든 패킷은 특수 파일에서 원시 이더넷 프레임으로 읽을 수 있습니다.

대부분의 구현에는 레이어 2 대신 레이어 3에서 작동하는 TUN 모드가 있습니다. 따라서 이더넷 프레임 대신 원시 IP, IPv6 등을 읽게됩니다.

Windows에서 이것에 대한 경험이 없으므로 여기서 소스 코드를 빠르게 훑어 보면됩니다. OpenVPN은 Tun.c 함수 Open_Tun에서 이러한 단계의 대부분을 거칩니다. 이 기능의 여러 정의를 찾을 수 있지만 다른 OS에 대한 #ifdef'd (CreateFile을 검색). 이것이 Windows에서 작동하는 기본 방법은 다음과 같습니다.

  1. 탭 인터페이스를 작동하는 응용 프로그램이 시작되기 전에 설치자가 하나 이상의 가상 인터페이스를 사전 제작합니다. 이 인터페이스는 연결이 끊어졌습니다.
  2. 귀하의 응용 프로그램은 ". Global Guid.tap"에서 특별한 CreateFile 호출을 시작하고 수행합니다. 여기서 Guid는 특정 가상 인터페이스를 설명하는 GUID로 대체됩니다. 가상 인터페이스는 OpenVPN 소스 코드에서 "tap-Win32 common.h"에서 adapter_key로 정의되는 레지스트리 키에서 반복 할 수 있습니다.
  3. 애플리케이션에서 일부 장치를 제어 통화를 수행 할 수 있습니다. OpenVPN 은이 번을 사용하여 드라이버 버전을 얻고 MTU를 얻고, 튜닝 모드를 설정하고 기타 기타 물건을 사용합니다.
  4. 이 시점에서 인터페이스는 아마도 Windows에 연결된대로 표시 될 수 있으며 이미 Windows 자체에서 받고있는 DHCP 요청을 읽을 수도 있습니다. OpenVPN은 많은 양의 HOOPLA를 통해 Windows 네트워킹 API의 다른 부분을 사용하여 인터페이스를 구성하지만 탭 드라이버에만 국한되지는 않습니다.

따라서 API는 실제로 특별한 파일이므로 상당히 간단하지만 실제로 인터페이스를 관리하는 데 많은 것이 있습니다. 그러나 당신이 단지 테스트를 위해 그것에 있다면, 이것은 충분할 수 있습니다. 그런 다음 Windows에서 테스트 인터페이스를 수동으로 구성 할 수 있습니다.

다른 팁

MSDN RAS 다이얼 기능

이것은 올바른 방향으로 나아가는 단계 일 수 있습니까?

페이지에서 :

원격 액세스 서비스 (RAS)는 PPP (Point-to-Point Protocol)를 사용하는 기존 원격 액세스 연결 외에도 VPN (Virtual Private Network) 연결을 지원합니다. VPN 연결에서 VPN 패킷은 IP 패킷으로 캡슐화되어 인터넷과 같은 IP 네트워크로 전송됩니다. 따라서 IP 네트워크에 대한 액세스는 VPN 연결을 설정하기위한 요구 사항입니다. 클라이언트 컴퓨터가 IP 네트워크에 항상 연결되는 경우 (예 : IP LAN과의 연결) 클라이언트는 rasdial 함수에 대한 단일 호출을 사용하여 VPN 연결을 설정할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top