Отвечая, в частности, на:
Вы можете создать новый интерфейс в сетевой панели на основе существующего интерфейса, но он не будет действовать в качестве реального полнофункционального интерфейса (если исходный интерфейс неактивен, то производный также неактивен).
Это может быть достигнуто с помощью устройства Tun / Tap, как предлагает psv141, и манипулирования файлом /Library/Preferences/SystemConfiguration/preferences.plist
для добавления NetworkService на основе интерфейса tun или tap. Mac OS X не позволяет создавать NetworkService на основе интерфейса виртуальной сети, но можно напрямую манипулировать файлом preferences.plist
для добавления NetworkService вручную. Обычно вы открываете файл preferences.plist
в Xcode (или редактируете XML напрямую, но Xcode, вероятно, будет более надежным) и копируете конфигурацию из существующего интерфейса Ethernet. Место для создания нового NetworkService находится в разделе «NetworkServices», и если на вашем Mac есть устройство Ethernet, профиль NetworkService также будет находиться в этой записи свойства. Запись Ethernet может быть скопирована в значительной степени дословно, единственные поля, которые вы на самом деле изменили бы:
- UUID
- UserDefinedName
- Конфигурация IPv4 и настройте интерфейс для вашего устройства tun или tap (то есть tun0 или tap0).
- DNS-сервер, если необходимо.
Тогда вы также будете манипулировать определенным местоположением, для которого требуется этот NetworkService (помните, что Mac OS X может настраивать все сетевые интерфейсы в зависимости от вашего "местоположения"). UUID местоположения по умолчанию можно получить в корне PropertyList в качестве ключа «CurrentSet». После выяснения, какое местоположение (или набор) вы хотите, раскройте свойство Set и добавьте записи в Global / IPv4 / ServiceOrder с UUID нового NetworkService. Также в свойстве Set необходимо развернуть свойство Service и добавить здесь UUID в качестве словаря с одной записью String с ключом __LINK__ и значением в качестве UUID (используйте другие интерфейсы в качестве примера).
После изменения файла preferences.plist
просто перезагрузите компьютер, и NetworkService будет доступен в SystemPreferences-> Network. Обратите внимание, что мы имитировали устройство Ethernet, поэтому сетевой уровень Mac OS X заметит, что «кабель отключен» и не позволит вам активировать интерфейс через графический интерфейс. Однако, поскольку базовое устройство является устройством настройки / прослушивания и имеет IP-адрес, интерфейс станет активным и будет добавлена правильная маршрутизация на уровне BSD.
Для справки это используется для создания особой магии маршрутизации.
Если вы зашли так далеко и у вас возникли проблемы, вам нужно создать устройство tun / tap, открыв одно из устройств в / dev /. Вы можете использовать любую программу для этого, но я сам фанат старого доброго C:
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main()
{
int fd = open("/dev/tun0", O_RDONLY);
if (fd < 0)
{
printf("Failed to open tun/tap device. Are you root? Are the drivers installed?\n");
return -1;
}
while (1)
{
sleep(100000);
}
return 0;
}