но я был поражен 5-й точкой во время кодирования, которое говорит о kSCNetworkProtocolTypePPP, и такого не существует ...
Нет необходимости извлекать протокол PPP, вы можетеприменить настройки непосредственно к интерфейсу, который вы создали.Если вы создали интерфейс, подобный следующему:
interface = SCNetworkInterfaceCreateWithInterface(bottomInterface, kSCNetworkInterfaceTypePPP);
, вы можете применить параметры PPP напрямую, используя:
SCNetworkInterfaceSetConfiguration(interface, myOptions)
Вам придется применить общий секрет, используя
SCNetworkInterfaceSetExtendedConfiguration(interface, CFSTR("IPSec"), myOptions)
И если вы хотите включить «Отправлять весь трафик через VPN», вам необходимо применить эти настройки, сначала загрузив протокол IPv4:
SCNetworkProtocolRef protocol = SCNetworkServiceCopyProtocol(service, kSCNetworkProtocolTypeIPv4);
SCNetworkProtocolSetConfiguration(protocol, myOptions)
Исходный код, упомянутый в этом ответе, былизвлечено из https://github.com/halo/macosvpn/blob/master/macosvpn/Classes/VPNController.m, где вы можете найти его полностью.