it-swarm.it

Interfaccia di rete virtuale in Mac OS X

So che puoi creare un'interfaccia di rete virtuale in Windows (vedi qui ), e in Linux è anche piuttosto facile con gli alias IP, ma esiste qualcosa di simile per Mac OS X? Ho cercato adattatori loopback, interfacce virtuali e non ho trovato una buona soluzione. 

È possibile creare una nuova interfaccia nel pannello di rete, in base a un'interfaccia esistente, ma non fungerà da vera interfaccia pienamente funzionale (se l'interfaccia originale è inattiva, anche quella derivata è inattiva).

Questo scenario è necessario quando si lavora in una situazione completamente disconnessa. Anche in questo caso, ha senso disporre di funzionalità di rete durante l'esecuzione di server in un'installazione VMWare. Queste macchine virtuali possono essere raggiunte dal loro indirizzo IP, ma non dal loro nome DNS, anche se eseguo un server DNS in una di quelle macchine virtuali. Configurando un'interfaccia per utilizzare il server DNS virtuale, ho pensato di testare alcuni scenari DNS. Sfortunatamente, nessuna interfaccia risolve i nomi DNS se nessuno di questi è inattivo ...

42
Hans Doggen

L'adattatore loopback è sempre attivo.

ifconfig lo0 alias 172.16.123.1 aggiungerà un alias IP 172.16.123.1 alla scheda loopback

ifconfig lo0 -alias 172.16.123.1 lo rimuoverà

53
Dave Whitla

Rispondendo in particolare a:

È possibile creare una nuova interfaccia nel pannello di rete, in base a un'interfaccia esistente, ma non fungerà da vera interfaccia pienamente funzionale (se l'interfaccia originale è inattiva, anche quella derivata è inattiva).

Questo può essere ottenuto usando un dispositivo Tun/Tap come suggerito da psv141 e manipolando il file /Library/Preferences/SystemConfiguration/preferences.plist per aggiungere un NetworkService basato su un'interfaccia tun o tap. Mac OS X non consente la creazione di un NetworkService basato su un'interfaccia di rete virtuale, ma è possibile manipolare direttamente il file preferences.plist per aggiungere il NetworkService a mano. Fondamentalmente si aprirà il file preferences.plist in Xcode (o si modificherà l'XML direttamente, ma Xcode sarà probabilmente più infallibile) e copierà la configurazione da un'interfaccia Ethernet esistente. Il posto dove creare il nuovo NetworkService è sotto "NetworkServices", e se il tuo Mac ha un dispositivo Ethernet il profilo NetworkService sarà anche sotto questa voce di proprietà. La voce Ethernet può essere copiata in modo molto fedele, gli unici campi che dovresti effettivamente modificare sono:

  • UUID
  • UserDefinedName
  • Configurazione IPv4 e impostazione dell'interfaccia sul dispositivo tun o tap (ad esempio, tun0 o tap0).
  • Server DNS se necessario.

Quindi dovrai anche manipolare la particolare Posizione in cui desideri questo NetworkService (ricorda che Mac OS X può configurare tutte le interfacce di rete in base alla tua "Posizione"). L'UUID di ubicazione predefinito può essere ottenuto nella radice di PropertyList come chiave "CurrentSet". Dopo aver individuato quale posizione (o set) si desidera, espandere la proprietà Set e aggiungere voci in Global/IPv4/ServiceOrder con l'UUID del nuovo NetworkService. Anche sotto la proprietà Set è necessario espandere la proprietà Service e aggiungere l'UUID qui come dizionario con una voce String con la chiave __LINK__ e valore come UUID (utilizzare le altre interfacce come esempio).

Dopo aver modificato il file preferences.plist, è sufficiente riavviare e NetworkService sarà disponibile in SystemPreferences-> Network. Si noti che abbiamo imitato un dispositivo Ethernet in modo che il livello di rete di Mac OS X noti che "un cavo è scollegato" e non consente di attivare l'interfaccia tramite la GUI. Tuttavia, poiché il dispositivo sottostante è un dispositivo tun/tap e ha un indirizzo IP, l'interfaccia diventerà attiva e il routing appropriato verrà aggiunto a livello BSD.

Come riferimento questo è usato per fare magie speciali di routing.

Se sei arrivato così lontano e hai problemi, devi creare il dispositivo tun/tap aprendo uno dei dispositivi sotto/dev /. Puoi usare qualsiasi programma per farlo, ma io sono un fan del buon vecchio stile C me stesso:

#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

Per quanto riguarda @bmasterswizzle 's BRILLIANT answer - in particolare - per @DanRamos' domanda su come forzare lo stato di collegamento della nuova interfaccia su "su" .. Io uso questo script, di cui Origin I non può ricordare, ma che funziona favolosamente (in coordinamento con @bmasterswizzles "Mona Lisa" di risposte ) ...

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

Non sono abbastanza sicuro di capire l'alterazione del Prompt alla fine, o ...

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

ma comunque. Funziona. link light ????: verde ✅. lo ama????.

enter image description here

8
Alex Gray

È possibile utilizzare il dispositivo TUN/TAP . http://tuntaposx.sourceforge.net/

5
psv141

Pochi altri sembrano suggerire questo, ma il seguente dimostra usando ifconfig per creare un vlan e testare il DNS sull'interfaccia virtuale (usando minidns ) su 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
5
web-online

Cosa intendi con 

"ma non agirà come un'interfaccia completamente funzionale (se l'interfaccia originale è inattiva, anche quella derivata è inattiva"

?

Posso creare una nuova interfaccia, basarla su una già esistente, quindi disabilitare quella esistente e la nuova funziona ancora. La creazione di una seconda interfaccia non crea tuttavia un'interfaccia reale (quando si controlla con ifconfig), assegnerà solo un secondo IP a quello già esistente (tuttavia, questo può essere DHCP mentre il primo è codificato in modo rigido ad esempio).

Quindi ti ho capito bene, che vuoi creare un'interfaccia, non legata ad alcuna interfaccia reale? Come si potrebbe usare questa interfaccia? Per esempio. se si disconnette tutta la rete WLAN e si estrae tutti i cavi di rete, dove verrà inviata l'interfaccia a questa interfaccia se si invia traffico ad essa? Forse la tua domanda è un po 'oscura, potrebbe essere di grande aiuto se la riformuli, quindi è chiaro che cosa stai effettivamente cercando di fare con questa "interfaccia virtuale" una volta che ce l'hai.

Come hai detto "alias IP" nella tua domanda, significherebbe un'interfaccia alias. Ma un'interfaccia alias è sempre legata a un'interfaccia reale. La differenza è in Linux una tale interfaccia veramente&EGRAVE;un'interfaccia (ad esempio un'interfaccia alias per eth0 potrebbe essere eth1), mentre su Mac, non viene creata alcuna interfaccia real, invece viene creata un'interfaccia virtuale , che può essere configurato e utilizzato in modo indipendente, ma è sempre la stessa interfaccia fisicamente e quindi non viene generata alcuna nuova interfaccia con nome (hai solo due interfacce, che sono entrambe en0, ma entrambe possono essere abilitate/disabilitate e configurate indipendentemente).

1
Mecki

Dai un'occhiata a questo tutorial, è per FreeBSD ma si applica anche a OS X. http://people.freebsd.org/~arved/vlan/vlan_en.html

1
Ariel Monaco

ho fatto ricorso a PFSense, un router/firewall basato su BSD per raggiungere questo obiettivo ....

perché? perché OS X Server ottiene così FREAKY senza un IP statico ...

quindi dopo aver lottato con esso per DAYS per fare NAT e DHCP e firewall e ...

Sto provando questo è paralleli ...

ti farò sapere come va ...

0
Alex Gray

se ci si trova in un ambiente di sviluppo e si desidera accedere ad alcuni servizi già in esecuzione su un host/host locale. nella finestra mobile per Mac è disponibile un'altra opzione.use docker.for.mac.localhost anziché localhost nel contenitore docker docker.for.mac.Host.internal deve essere utilizzato al posto di docker.for.mac.localhost da Docker Community Edition 17.12.0-ce-mac46 2018-01-09 . Questo ti permette di connetterti al servizio in esecuzione sul tuo Mac da dentro un contenitore docker.

comprensione del comportamento di docker.for.mac.localhost

note di rilascio

0
arvin_v_s

Vai a Preferenze di rete.

Nella parte inferiore dell'elenco di schede di rete, fare clic sulle icone +  

Selezionare l'interfaccia esistente che si desidera arp (ad esempio Ethernet 1) e fornire il nome del servizio che si desidera per la nuova porta (ad esempio Ethernet 1.1), quindi premere crea.

Ora hai la nuova interfaccia virtuale nella GUI e puoi gestire gli indirizzi IP ecc. In modo normale.

ifconfig -a confermerà che hai più IP sull'interfaccia, e questi saranno ancora lì quando riavvii.

È un Mac. Non combatterlo, fallo nel modo più semplice. 

0
Henry 3 Dogg