it-swarm-eu.dev

Virtuelle Netzwerkschnittstelle in Mac OS X

Ich weiß, dass Sie eine virtuelle Netzwerkschnittstelle in Windows erstellen können (siehe hier ). In Linux ist dies auch mit IP-Aliasen ziemlich einfach, aber gibt es etwas Ähnliches für Mac OS X? Ich habe nach Loopback-Adaptern und virtuellen Schnittstellen gesucht und konnte keine gute Lösung finden. 

Sie können eine neue Schnittstelle im Netzwerkbereich erstellen, die auf einer vorhandenen Schnittstelle basiert, jedoch nicht als eine voll funktionsfähige Schnittstelle fungiert (wenn die ursprüngliche Schnittstelle inaktiv ist, ist die abgeleitete auch inaktiv).

Dieses Szenario ist erforderlich, wenn Sie in einer vollständig getrennten Situation arbeiten. Selbst dann ist es sinnvoll, über Netzwerkfunktionen zu verfügen, wenn Server in einer VMWare-Installation ausgeführt werden. Diese virtuellen Maschinen sind über ihre IP-Adresse erreichbar, nicht jedoch über ihren DNS-Namen, selbst wenn ich einen DNS-Server auf einer dieser virtuellen Maschinen betreibe. Durch die Konfiguration einer Schnittstelle zur Verwendung des virtuellen DNS-Servers dachte ich, ich könnte einige DNS-Szenarios testen. Leider löst keine Schnittstelle DNS-Namen auf, wenn keine von ihnen inaktiv ist ...

42
Hans Doggen

Der Loopback-Adapter ist immer aktiv.

ifconfig lo0 Alias ​​172.16.123.1 fügt dem Loopback-Adapter einen Alias ​​IP 172.16.123.1 hinzu

ifconfig lo0 -Alias ​​172.16.123.1 wird es entfernen

53
Dave Whitla

Antworten insbesondere auf:

Sie können eine neue Schnittstelle im Netzwerkbereich erstellen, die auf einer vorhandenen Schnittstelle basiert, jedoch nicht als eine voll funktionsfähige Schnittstelle fungiert (wenn die ursprüngliche Schnittstelle inaktiv ist, ist die abgeleitete auch inaktiv).

Dies kann mit einem Tun/Tap-Gerät erreicht werden, wie von psv141 vorgeschlagen, und durch Bearbeiten der /Library/Preferences/SystemConfiguration/preferences.plist-Datei kann ein NetworkService basierend auf einer Tun- oder Tap-Schnittstelle hinzugefügt werden. Mac OS X erlaubt nicht die Erstellung eines NetworkService basierend auf einer virtuellen Netzwerkschnittstelle. Sie können jedoch die preferences.plist-Datei direkt bearbeiten, um den NetworkService manuell hinzuzufügen. Grundsätzlich würden Sie die preferences.plist-Datei in Xcode öffnen (oder XML direkt bearbeiten, aber Xcode ist wahrscheinlich idiotensicherer) und die Konfiguration von einer vorhandenen Ethernet-Schnittstelle kopieren. Der Ort zum Erstellen des neuen NetworkService befindet sich unter "NetworkServices". Wenn Ihr Mac über ein Ethernet-Gerät verfügt, befindet sich auch das NetworkService-Profil unter diesem Eigenschaftseintrag. Der Ethernet-Eintrag kann wortwörtlich kopiert werden. Die einzigen Felder, die Sie tatsächlich ändern würden, sind:

  • UUID
  • UserDefinedName
  • IPv4-Konfiguration und stellen Sie die Schnittstelle auf Ihr Tun- oder Tap-Gerät ein (z. B. Tun0 oder Tap0).
  • DNS-Server bei Bedarf.

Dann würden Sie auch die Position ändern, für die dieser NetworkService gewünscht wird (Mac OS X kann alle Netzwerkschnittstellen konfigurieren, die von Ihrem "Standort" abhängig sind). Die Standardspeicherort-UUID kann im Stammverzeichnis der PropertyList als Schlüssel "CurrentSet" abgerufen werden. Erweitern Sie nach dem Ermitteln des gewünschten Speicherorts (oder der gewünschten Gruppe) die Eigenschaft Set und fügen Sie unter Global/IPv4/ServiceOrder Einträge mit der UUID des neuen NetworkService hinzu. Auch unter der Set-Eigenschaft müssen Sie die Service-Eigenschaft erweitern und die UUID hier als Wörterbuch mit einem String-Eintrag mit dem Schlüssel __LINK__ und Wert als UUID hinzufügen (verwenden Sie die anderen Schnittstellen als Beispiel).

Nachdem Sie Ihre preferences.plist-Datei geändert haben, starten Sie einfach neu, und der NetworkService ist unter SystemPreferences-> Network verfügbar. Beachten Sie, dass wir ein Ethernet-Gerät nachgeahmt haben. Mac OS X-Netzwerkebenen weisen darauf hin, dass "ein Kabel nicht angeschlossen ist" und Sie die Schnittstelle nicht über die GUI aktivieren können. Da das zugrunde liegende Gerät ein Tun/Tap-Gerät ist und über eine IP-Adresse verfügt, wird die Schnittstelle aktiv und das richtige Routing auf BSD-Ebene hinzugefügt.

Als Referenz wird dies verwendet, um spezielle Routing-Magie auszuführen.

Falls Sie so weit gekommen sind und Probleme haben, müssen Sie das Tun/Tap-Gerät erstellen, indem Sie eines der Geräte unter/dev/öffnen. Sie können jedes Programm dazu verwenden, aber ich bin selbst ein Fan von altmodischem 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;
}
22
bmasterswizzle

In Bezug auf @bmasterswizzles BRILLIANT antworten - genauer gesagt - auf @DanRamos 'Frage, wie man den Link-State der neuen Schnittstelle auf "up" setzen kann (in Abstimmung mit @bmasterswizzles "Mona Lisa" der Antworten ) ...

#!/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

Ich bin NICHT ganz sicher, ob ich die Änderung am Prompt am Ende verstehe, oder ...

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

aber was auch immer. Es klappt. Verbindungsleuchte ????: grün ✅. liebt es????.

enter image description here

8
Alex Gray

Es ist möglich, TUN/TAP-Geräte zu verwenden . http://tuntaposx.sourceforge.net/

5
psv141

Einige andere schienen darauf hinzuweisen, aber im Folgenden wird demonstriert, wie Sie mit ifconfig ein Vlan erstellen und DNS auf der virtuellen Schnittstelle (mit minidns ) unter OS X 10.9.5 erstellen:

$ 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
5
web-online

Was meinst du mit 

"aber es handelt sich nicht um eine voll funktionsfähige Schnittstelle (wenn die ursprüngliche Schnittstelle inaktiv ist, ist die abgeleitete auch inaktiv."

?

Ich kann eine neue Schnittstelle erstellen, auf einer bereits vorhandenen basieren, dann die vorhandene deaktivieren und die neue funktioniert noch. Durch das Erstellen einer zweiten Schnittstelle wird jedoch keine echte Schnittstelle erstellt (wenn Sie dies mit ifconfig überprüfen), wird der bereits vorhandenen nur eine zweite IP zugewiesen (dies kann jedoch DHCP sein, während die erste zum Beispiel hart codiert ist).

Habe ich Sie richtig verstanden, dass Sie eine Schnittstelle erstellen möchten, die nicht an eine echte Schnittstelle gebunden ist? Wie würde diese Schnittstelle dann verwendet werden? Z.B. Wenn Sie alle WLAN-Verbindungen trennen und alle Netzwerkkabel ziehen, wohin würde diese Schnittstelle Datenverkehr senden, wenn Sie Datenverkehr dazu senden? Vielleicht ist Ihre Frage ein bisschen unklar, es könnte sehr hilfreich sein, wenn Sie sie umformulieren. Es ist also klar, was Sie eigentlich mit dieser "virtuellen Schnittstelle" versuchen, sobald Sie sie haben.

Wie Sie in Ihrer Frage "Alias-IP" erwähnt haben, bedeutet dies eine Alias-Schnittstelle. Eine Alias-Schnittstelle ist jedoch immer an eine echte Schnittstelle gebunden. Der Unterschied ist in Linux eine solche Schnittstelle wirklichISTeine Schnittstelle (z. B. eine Alias-Schnittstelle für eth0 könnte eth1 sein), während auf dem Mac keine real - Schnittstelle erstellt wird, sondern eine virtuelle Schnittstelle , das kann unabhängig konfiguriert und verwendet werden, aber es ist immer noch dieselbe Schnittstelle, und es wird keine neue benannte Schnittstelle generiert (Sie haben nur zwei Schnittstellen, die beide en0 sind, aber beide können unabhängig voneinander aktiviert/deaktiviert werden).

1
Mecki

Schauen Sie sich dieses Tutorial an, es ist für FreeBSD, gilt aber auch für OS X. http://people.freebsd.org/~arved/vlan/vlan_en.html

1
Ariel Monaco

ich habe auf PFSense, einen BSD-basierten Router/Firewall, zurückgegriffen, um dieses Ziel zu erreichen.

warum? weil OS X Server so FREAKY ohne statische IP bekommt ...

also nach dem Wrestling damit DAYS NAT und DHCP und Firewall machen und…

Ich versuche, das ist Parallelen ...

lass dich wissen, wie es geht ...

0
Alex Gray

wenn Sie sich in einer Dev-Umgebung befinden und auf einige Dienste zugreifen möchten, die bereits auf der localhost/Host-Maschine ausgeführt werden. Im Docker für Mac haben Sie eine andere Option. Verwenden Sie docker.for.mac.localhost anstelle von localhost im Docker-Container . docker.for.mac.Host.internal sollte anstelle von docker.for.mac.localhost von Docker verwendet werden Community Edition 17.12.0-ce-mac46 2018-01-09 . Hiermit können Sie sich mit einem Dienst, der auf Ihrem Mac ausgeführt wird, über einen Docker-Container verbinden

das Verhalten von docker.for.mac.localhost verstehen

Versionshinweise

0
arvin_v_s

Wechseln Sie zu Netzwerkeinstellungen.

Klicken Sie unten in der Liste der Netzwerkadapter auf die Symbole +  

Wählen Sie die vorhandene Schnittstelle aus, die Sie erstellen möchten (z. B. Ethernet 1), und geben Sie den gewünschten Dienstnamen für den neuen Port (z. B. Ethernet 1.1) ein. Drücken Sie dann Erstellen.

Jetzt haben Sie die neue virtuelle Schnittstelle in der GUI und können IP-Adressen usw. wie gewohnt verwalten.

ifconfig -a bestätigt, dass Sie über mehrere IP-Adressen in der Schnittstelle verfügen, die beim Neustart noch vorhanden sind.

Es ist ein Mac. Kämpfe nicht dagegen, mach es einfach. 

0
Henry 3 Dogg