Пожалуйста, ознакомьтесь с приведенным ниже фрагментом кода 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();
}
}