web-dev-qa-db-fra.com

Interface réseau virtuelle sous Mac OS X

Je sais que vous pouvez créer une interface réseau virtuelle sous Windows (voir ici ), et sous Linux, cela est également assez facile avec ip-aliases, mais existe-t-il une solution similaire pour Mac OS X? Je cherchais des adaptateurs de bouclage, des interfaces virtuelles et je ne pouvais pas trouver une bonne solution. 

Vous pouvez créer une nouvelle interface dans le panneau de mise en réseau, basée sur une interface existante, mais celle-ci ne fonctionnera pas comme une véritable interface entièrement fonctionnelle (si l'interface d'origine est inactive, l'interface dérivée l'est également).

Ce scénario est nécessaire lorsque vous travaillez dans une situation totalement déconnectée. Même dans ce cas, il est logique de disposer de fonctionnalités réseau lors de l’exécution de serveurs dans une installation VMWare. Ces machines virtuelles peuvent être atteintes par leur adresse IP, mais pas par leur nom DNS, même si j'exécute un serveur DNS sur l'une de ces machines virtuelles. En configurant une interface pour utiliser le serveur DNS virtuel, j'ai pensé pouvoir tester certains scénarios DNS. Malheureusement, aucune interface ne résout les noms DNS si aucun d'entre eux n'est inactif ...

42
Hans Doggen

L'adaptateur de bouclage est toujours actif.

ifconfig lo0 alias 172.16.123.1 ajoutera un alias IP 172.16.123.1 à la carte de bouclage

ifconfig lo0-alias 172.16.123.1 le supprimera

53
Dave Whitla

Répondant notamment à:

Vous pouvez créer une nouvelle interface dans le panneau de mise en réseau, basée sur une interface existante, mais celle-ci ne fonctionnera pas comme une véritable interface entièrement fonctionnelle (si l'interface d'origine est inactive, l'interface dérivée l'est également).

Ceci peut être réalisé en utilisant un périphérique Tun/Tap comme suggéré par psv141, et en manipulant le fichier /Library/Preferences/SystemConfiguration/preferences.plist pour ajouter un NetworkService basé sur une interface tun ou tap. Mac OS X n'autorise pas la création d'un NetworkService basé sur une interface réseau virtuelle, mais vous pouvez manipuler directement le fichier preferences.plist pour ajouter le NetworkService manuellement. Fondamentalement, vous devez ouvrir le fichier preferences.plist dans Xcode (ou éditer le XML directement, mais Xcode sera probablement plus fiable) et copier la configuration à partir d'une interface Ethernet existante. L'emplacement pour créer le nouveau NetworkService est sous "NetworkServices", et si votre Mac dispose d'un périphérique Ethernet, le profil NetworkService sera également sous cette entrée de propriété. L'entrée Ethernet peut être copiée à peu près telle quelle, les seuls champs que vous souhaitez réellement modifier sont les suivants:

  • UUID
  • UserDefinedName
  • IPv4 et configurez l’interface sur votre périphérique tun ou tap (c’est-à-dire tun0 ou tap0).
  • Serveur DNS si nécessaire.

Ensuite, vous manipuleriez également l'emplacement particulier pour lequel vous souhaitez utiliser ce service réseau (n'oubliez pas que Mac OS X peut configurer toutes les interfaces réseau en fonction de votre "emplacement"). L'UUID d'emplacement par défaut peut être obtenu à la racine de PropertyList en tant que clé "CurrentSet". Après avoir déterminé l'emplacement (ou le groupe) souhaité, développez la propriété Définir et ajoutez des entrées sous Global/IPv4/ServiceOrder avec l'UUID du nouveau NetworkService. Également sous la propriété Set, vous devez développer la propriété Service et ajouter l'UUID ici en tant que dictionnaire avec une entrée String avec la clé __LINK__ et une valeur en tant que UUID (utilisez les autres interfaces comme exemple).

Après avoir modifié votre fichier preferences.plist, redémarrez simplement et NetworkService sera disponible sous SystemPreferences-> Network. Notez que nous avons imité un périphérique Ethernet. Par conséquent, la couche réseau de Mac OS X notera "qu'un câble est débranché" et ne vous permettra pas d'activer l'interface via l'interface graphique. Cependant, étant donné que le périphérique sous-jacent est un périphérique tun/tap et qu'il possède une adresse IP, l'interface deviendra active et le routage approprié sera ajouté au niveau BSD.

En tant que référence, il est utilisé pour effectuer une magie de routage spéciale.

Au cas où vous seriez si loin et que vous rencontriez des problèmes, vous devez créer le périphérique tun/tap en ouvrant l’un des périphériques sous/dev /. Vous pouvez utiliser n'importe quel programme pour le faire, mais je suis moi-même un fan de bon vieux 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

En ce qui concerne @bmasterswizzle ' BRILLIANT, répondez - plus précisément - à @DanRamos' sur la façon de forcer l'état des liens de la nouvelle interface à "up". (en coordination avec @bmasterswizzles "Mona Lisa" de réponses ) ...

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

Je ne suis pas tout à fait sûr de comprendre la modification apportée à l'invite à la fin, ou ...

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

mais peu importe. Ça marche. lien lumière ????: vert. J'aime ça????.

enter image description here

8
Alex Gray

Il est possible d'utiliser un périphérique TUN/TAP . http://tuntaposx.sourceforge.net/

5
psv141

Quelques autres semblaient le laisser entendre, mais voici ce qui suit montre comment utiliser ifconfig pour créer un vlan et tester DNS sur l'interface virtuelle (à l'aide de minidns ) sous 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

Que veux-tu dire par 

"mais il ne s'agira pas d'une véritable interface entièrement fonctionnelle (si l'interface d'origine est inactive, l'interface dérivée l'est aussi"

?

Je peux créer une nouvelle interface, la baser sur une interface existante, puis désactiver celle existante et la nouvelle fonctionne toujours. Faire une deuxième interface ne crée cependant pas une véritable interface (si vous vérifiez avec ifconfig), il ne fera qu’attribuer une deuxième adresse IP à celle qui existe déjà (cependant, celle-ci peut être DHCP alors que la première est codée en dur).

Alors, est-ce que je vous ai bien compris, que vous voulez créer une interface, non liée à une interface réelle? Comment cette interface serait alors utilisée? Par exemple. Si vous déconnectez tous les réseaux WLAN et retirez tous les câbles réseau, où cette interface enverrait-elle du trafic, si vous lui envoyez du trafic? Peut-être que votre question est un peu incertaine. Cela pourrait être très utile si vous la reformuliez. Il est donc clair ce que vous essayez réellement de faire avec cette "interface virtuelle" une fois que vous l'avez.

Comme vous avez mentionné "alias IP" dans votre question, cela signifierait une interface alias. Mais une interface alias est toujours liée à une interface réelle. La différence est sous Linux une telle interface vraimentESTune interface (par exemple, une interface alias pour eth0 pourrait être eth1), tandis que sur Mac, aucune interface real n'est créée, une interface virtuelle est créée , qui peut être configuré et utilisé indépendamment, mais c’est toujours la même interface physiquement et donc aucune nouvelle interface nommée n’est générée (vous avez juste deux interfaces, qui sont toutes les deux en0, mais les deux peuvent être activées/désactivées et configurées indépendamment).

1
Mecki

Regardez ce tutoriel, il concerne FreeBSD mais s'applique également à OS X. http://people.freebsd.org/~arved/vlan/vlan_en.html

1
Ariel Monaco

j'ai eu recours à PFSense, un routeur/pare-feu basé sur BSD pour atteindre cet objectif….

pourquoi? parce que OS X Server devient tellement FREAKY sans une adresse IP statique…

donc après avoir lutté avec elle pour DAYS faire NAT et DHCP et pare-feu et…

J'essaye c'est des parallèles…

vous dira comment ça se passe ...

0
Alex Gray

si vous êtes sur un environnement de développement et souhaitez accéder à certains services déjà en cours d'exécution sur la machine hôte/local. Dans Docker pour Mac, vous avez une autre option. Utilisez docker.for.mac.localhost au lieu de localhost dans le conteneur docker . docker.for.mac.Host.internal doit être utilisé à la place de docker.for.mac.localhost de Docker. Community Edition 17.12.0-ce-mac46 2018-01-09 . Cela vous permet de vous connecter au service s'exécutant sur votre mac à partir d'un conteneur docker.veuillez consulter les liens ci-dessous

comprendre le comportement docker.for.mac.localhost

notes de version

0
arvin_v_s

Allez dans les préférences réseau.

Au bas de la liste des cartes réseau, cliquez sur les icônes +  

Sélectionnez l'interface existante que vous souhaitez définir (par exemple, Ethernet 1) et indiquez le nom du service souhaité pour le nouveau port (par exemple, Ethernet 1.1), puis cliquez sur Créer.

Vous avez maintenant la nouvelle interface virtuelle dans l’interface graphique et pouvez gérer les adresses IP, etc. de la manière habituelle.

ifconfig -a confirmera que vous avez plusieurs adresses IP sur l'interface et celles-ci seront toujours présentes lors du redémarrage.

C'est un Mac. Ne vous battez pas, faites-le facilement. 

0
Henry 3 Dogg