UWP VPN - реализация подключения VpnPlugin генерирует исключение в StartWithMainTransport - PullRequest
0 голосов
/ 21 марта 2019

Пожалуйста, ознакомьтесь с приведенным ниже фрагментом кода UWP, который был опробован на настольном компьютере с Windows 10 с использованием Visual Studio 2017 Community Edition.

В коде реализован модуль Custom IVpnPlugin. Когда для этого приложения выбрана конфигурация VPN системы, и соединение установлено, запускается задача приложения и вызывается метод плагина VPN «Connect ()».

Однако при выполнении StartWithMainTransport (…) следующие шаги кода сталкиваются с исключением. («Операция была отменена пользователем») в Visual Studio. В настройках VPN системы видна следующая ошибка - «конфигурация ip службы удаленного доступа не работает»

Я думаю, что правильно передаю адрес v4 и v6 на канал-> StartWithMainTransport (…) API, который привязан к моему сетевому вводу / выводу m / c. Какие другие проверки могли быть причиной этой проблемы. Я не хочу настраивать сертификаты и т. Д. Для VpnChannel, поскольку я планирую реализовать инкапсуляцию и декапсулирование себя в VpnPlugin.

// Sample Plugin's connect implementation 
void TunnelPlugin::Connect(Windows::Networking::Vpn::VpnChannel^ channel)
{
    this->dSock = ref new DatagramSocket();
    channel->AssociateTransport(this->dSock, nullptr); // No difference even if this statement is moved after ConnectAsync().
    Platform::String^ svcName = "22111";
    auto result = create_task(dSock->BindServiceNameAsync(svcName));
    result.get();
    // Connect to the destination tunnel address on UDP socket.
    HostName^ remoteTunnelIP = ref new HostName("192.168.1.137");
    Platform::String^ remoteTunnelPort = "22112";
    result = create_task(this->dSock->ConnectAsync(remoteTunnelIP, remoteTunnelPort));
    result.get();

    VpnChannelConfiguration^ chanCfg = channel->Configuration;
    // IP destinations to be routed via VPN
    VpnRouteAssignment^ routeScope = ref new VpnRouteAssignment();
    routeScope->Ipv4InclusionRoutes->Append(ref new VpnRoute(ref new HostName("192.168.1.111"), 32));
    Vector<HostName^>^ localV4Addrs = ref new Vector<HostName^>;
    localV4Addrs->Append(ref new HostName("192.168.1.133")); // Local host name to be bound.
    Vector<HostName^>^ localV6Addrs = ref new Vector<HostName^>;
    localV6Addrs->Append(ref new HostName("fc00::44fd:d3ed:b02a:a05e"));
    Vector<HostName^>^ dnsServers = ref new Vector<HostName^>;
    dnsServers->Append(ref new HostName("1.1.1.1"));
    VpnDomainNameInfo^ dnsInfo = ref new VpnDomainNameInfo(".", VpnDomainNameType::Suffix, dnsServers, ref new Vector<HostName^>);
    VpnDomainNameAssignment^ dnsAssignment = ref new VpnDomainNameAssignment;
    dnsAssignment->DomainNameList->Append(dnsInfo);

    try
    {
        // Throws exception here. 
        channel->StartWithMainTransport(localV4Addrs->GetView(), localV6Addrs->GetView(), nullptr, routeScope, dnsAssignment, 1400, 1412, false, this->dSock);
    }
    catch (Exception^ exc)
    {
        auto type = exc->GetType();
        Platform::String^ str = exc->ToString();
    }
}
...