Подтвердить что ты не робот

Виртуальный сетевой интерфейс в Mac OS X

Я знаю, что вы можете создать виртуальный сетевой интерфейс в Windows (см. здесь), а в Linux это также довольно легко с ip- aliases, но что-то подобное существует для Mac OS X? Я искал адаптеры loopback, виртуальные интерфейсы и не мог найти хорошего решения.

Вы можете создать новый интерфейс в сетевой панели на основе существующего интерфейса, но он не будет функционировать как реальный полностью функциональный интерфейс (если исходный интерфейс неактивен, то производный он также неактивен).

Этот сценарий необходим при работе в полностью отключенной ситуации. Даже тогда имеет смысл иметь сетевые возможности при запуске серверов в установке VMWare. Эти виртуальные машины могут быть достигнуты по их IP-адресу, но не по их DNS-имени, даже если я запустил DNS-сервер на одной из этих виртуальных машин. Конфигурируя интерфейс для использования виртуального DNS-сервера, я подумал, что могу протестировать некоторые сценарии DNS. К сожалению, ни один интерфейс не разрешает имена DNS, если ни один из них неактивен...

4b9b3361

Ответ 1

Адаптер loopback всегда работает.

ifconfig lo0 alias 172.16.123.1 добавит псевдоним IP 172.16.123.1 к адаптеру loopback

ifconfig lo0 -alias 172.16.123.1 удалит его

Ответ 2

Отвечая, в частности, на:

Вы можете создать новый интерфейс в сетевой панели на основе существующего интерфейса, но он не будет функционировать как реальный полностью функциональный интерфейс (если исходный интерфейс неактивен, то производный он также неактивен).

Это может быть достигнуто с помощью устройства 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, профиль этой сети также будет находиться под этой записью. Запись 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 здесь в качестве словаря с одной строкой с ключом __LINK__ и значением в качестве UUID (в качестве примера используйте другие интерфейсы).

После изменения вашего файла preferences.plist просто перезагрузитесь, и NetworkService будет доступен в SystemPreferences- > Network. Обратите внимание, что мы подражали устройству Ethernet, поэтому уровень сетевого уровня Mac OS X будет означать, что "кабель отсоединен" и не позволит вам активировать интерфейс через графический интерфейс. Однако, поскольку базовое устройство является устройством tun/tap и имеет 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;
}

Ответ 3

В отношении @bmasterswizzle BRILLIANT answer - более конкретно - к @DanRamos "вопрос о том, как заставить новое состояние интерфейса интерфейса" подняться ". Я использую этот script, о происхождении которого я не могу вспомнить, но который работает сказочно (по согласованию с @bmasterswizzles "Mona Lisa" ответов)...

#!/bin/zsh

[[ "$UID" -ne "0" ]] && echo "You must be root. Goodbye..." && exit 1
echo "starting"
exec 4<>/dev/tap0
ifconfig tap0 10.10.10.1 10.10.10.255
ifconfig tap0 up
ping -c1 10.10.10.1
echo "ending"
export PS1="tap interface>"
dd of=/dev/null <&4 & # continuously reads from buffer and dumps to null

Я НЕ совсем уверен, что понимаю изменение в подсказке в конце или...

dd of=/dev/null <&4 & # continuously reads from buffer and dumps to null

но WHATEVER. оно работает. link свет🚦: зеленый✅. любит его.

enter image description here

Ответ 5

Несколько других, казалось, намекают на это, но следующее демонстрирует использование ifconfig для создания vlan и тестирования DNS на виртуальном интерфейсе (с помощью minidns) на OS X 10.9.5:

$ sw_vers -productVersion
10.9.5
$ sudo ifconfig vlan169 create && echo vlan169 created
vlan169 created
$ sudo ifconfig vlan169 inet 169.254.169.254 netmask 255.255.255.255 && echo vlan169 configured
vlan169 configured
$ sudo ./minidns.py 169.254.169.254 &
[1] 35125
$ miniDNS :: * 60 IN A 169.254.169.254


$ dig @169.254.169.254 +short test.host
Request: test.host. -> 169.254.169.254
Request: test.host. -> 169.254.169.254
169.254.169.254
$ sudo kill 35125
$ 
[1]+  Exit 143                sudo ./minidns.py 169.254.169.254
$ sudo ifconfig vlan169 destroy && echo vlan169 destroyed
vlan169 destroyed

Ответ 6

Что вы подразумеваете под

", но он не будет действовать как полноценный полностью функциональный интерфейс (если исходный интерфейс неактивен, то производный тоже неактивен"

?

Я могу создать новый интерфейс, основывать его на уже существующем, а затем отключить существующий, а новый - работать. Однако создание второго интерфейса не создает реального интерфейса (при проверке с помощью ifconfig), он просто назначит второй IP уже существующий (однако это может быть DHCP, в то время как первый из них жестко закодирован, например).

Я правильно понял, что вы хотите создать интерфейс, не связанный с каким-либо реальным интерфейсом? Как будет использоваться этот интерфейс? Например. если вы отключите всю WLAN и потяните все сетевые кабели, куда бы этот интерфейс отправил трафик, если вы отправляете на него трафик? Может быть, ваш вопрос немного неясен, это может сильно помочь, если перефразировать его, поэтому ясно, что вы на самом деле пытаетесь сделать с этим "виртуальным интерфейсом" после его появления.

Как вы упомянули в своем вопросе "alias IP", это будет означать интерфейс псевдонимов. Но интерфейс alias всегда связан с реальным интерфейсом. Разница заключается в том, что в Linux такой интерфейс действительно IS интерфейс (например, интерфейс alias для eth0 может быть eth1), тогда как на Mac нет реального интерфейса, создается виртуальный интерфейс, который может сконфигурирован и используется независимо, но физически он по-прежнему остается одним и тем же интерфейсом, поэтому новый именованный интерфейс не генерируется (у вас есть только два интерфейса, которые фактически являются en0, но оба могут быть включены/отключены и настроены независимо).

Ответ 8

Я прибег к запуску PFSense, основанного на BSD маршрутизатора/брандмауэра, для достижения этой цели...

почему? потому что OS X Server получает так FREAKY без статического IP...

поэтому после борьбы с ним для DAYS для создания NAT и DHCP и брандмауэра и...

Я пытаюсь это параллели...

позволит вам знать, как это происходит...

Ответ 9

Перейдите в Настройки сети.

В нижней части списка сетевых адаптеров щелкните значок +

Выберите существующий интерфейс, который вы хотите записать (например, Ethernet 1), и укажите имя службы, которое требуется для нового порта (например, Ethernet 1.1), затем нажмите кнопку create.

Теперь у вас есть новый виртуальный интерфейс в gui и он может управлять IP-адресами и т.д. обычным способом.

ifconfig -a подтвердит, что у вас несколько IP-адресов на интерфейсе, и они все равно будут присутствовать при перезагрузке.

Его Mac. Не боритесь, делайте это легко.

Ответ 10

если вы находитесь в среде разработки и хотите получить доступ к какой-либо службе, уже работающей на компьютере с локальным хостом/хостом. в Docker для Mac у вас есть другой option.use docker.for.mac.localhost вместо localhost в контейнере Docker. Вместо docker.for.mac.localhost из Docker Community Edition 17.12.0-ce-mac46 2018-01-09 следует использовать docker.for.mac.host.internal. это позволяет вам подключиться к службе, работающей на вашем компьютере Mac, из контейнера Docker. Пожалуйста, обратитесь к ссылкам ниже

понимание поведения docker.for.mac.localhost

заметки о выпуске

Ответ 11

ifconfig interfacename create создаст виртуальный интерфейс,

Ответ 12

Вот хороший гид: https://web.archive.org/web/20160301104014/http://gerrydevstory.com/2012/08/20/how-to-create-virtual-network-interface-on-mac-os-x/

В основном вы выбираете сетевой адаптер на панели "Networks" системных настроек, затем нажимаете на кнопку "Дублировать сервис". После дублирования службы вы вручную назначаете IP-адрес в одном из диапазонов частных адресов. Тогда пинг это, чтобы убедиться;)