Виртуальное сетевое соединение - PullRequest
2 голосов
/ 27 ноября 2009

Я вижу, что многие программы, такие как openvpn и Teamviewer для своего VPN-соединения, создают виртуальное сетевое соединение на Windows. Я хочу создать его для себя в целях тестирования.

Можно ли его создать программно или так?

Ответы [ 2 ]

3 голосов
/ 05 декабря 2009

Похоже, вы ищете драйвер Tap-Win32. Это драйвер, который OpenVPN в Windows использует для создания виртуального интерфейса, который вы видите, и фактически является частью пакета OpenVPN . Эта подсистема также доступна на многих * nixes.

Интерфейс этого драйвера TAP примерно одинаков во всех ОС. Вы открываете специальный файл и записываете в него необработанные кадры Ethernet. Затем драйвер вставляет эти кадры в виртуальный интерфейс. И наоборот, любые пакеты, которые передаются по виртуальному интерфейсу, могут быть прочитаны из специального файла как необработанные кадры Ethernet.

Большинство реализаций также имеют режим TUN, который работает на уровне 3, а не на уровне 2. Таким образом, вы будете читать необработанные пакеты IP, IPv6 и т. Д. Вместо кадров Ethernet.

У меня нет опыта работы с этим в Windows, поэтому я собираюсь быстро просмотреть исходный код. OpenVPN выполняет большинство этих шагов в функции tun.c open_tun. Вы найдете несколько определений этой функции, но они # ifdef'd для разных ОС (поэтому ищите CreateFile). Основной способ, которым это работает в Windows:

  1. Перед запуском любого приложения, работающего с интерфейсом TAP, один или несколько виртуальных интерфейсов предварительно создаются (установщиком?). Эти интерфейсы вначале отключены.
  2. Ваше приложение запускается и выполняет специальный вызов CreateFile на "\\. \ Global \ GUID.tap". Где GUID заменяется GUID, который описывает конкретный виртуальный интерфейс. Виртуальные интерфейсы могут быть повторены в разделе реестра, который определен как ADAPTER_KEY в «tap-win32 \ common.h» в исходном коде OpenVPN.
  3. Ваше приложение может выполнять некоторые вызовы DeviceIoControl. OpenVPN использует это несколько раз, чтобы получить версию драйвера, получить MTU, установить режим TUN и другие разные вещи.
  4. В этот момент интерфейс, вероятно, отображается как подключенный в Windows, и вы можете даже читать запросы DHCP, которые вы уже получаете от самой Windows. OpenVPN проходит через множество проблем для настройки интерфейса с использованием других частей сетевых интерфейсов API Windows, но это не относится к драйверу TAP.

Таким образом, хотя API на самом деле является просто специальным файлом и, следовательно, довольно простым, на самом деле многое может управлять интерфейсом. Но если вы просто для тестирования, этого вполне может быть достаточно. Затем вы можете вручную настроить тестовый интерфейс в Windows.

0 голосов
/ 01 декабря 2009

Функция MSDN Ras Dial

Это может быть шаг в правильном направлении?

Со страницы:

Служба удаленного доступа (RAS) поддерживает соединения виртуальной частной сети (VPN) в дополнение к обычным соединениям удаленного доступа, использующим протокол PPP. В VPN-соединении VPN-пакеты инкапсулируются в IP-пакеты и отправляются через IP-сеть, такую ​​как Интернет. Следовательно, доступ к IP-сети является требованием для установления VPN-соединения. Если клиентский компьютер всегда подключен к IP-сети, например, к IP-сети, клиент может установить VPN-подключение, используя один вызов функции RasDial.

...