2008-09-17 32 views
37

Sé que puede hacer una interfaz de red virtual en Windows (consulte here), y en Linux también es bastante fácil con alias de IP, pero ¿existe algo similar para Mac OS X? He estado buscando adaptadores de bucle invertido, interfaces virtuales y no pude encontrar una buena solución.Interfaz de red virtual en Mac OS X

Puede crear una nueva interfaz en el panel de red, basada en una interfaz existente, pero no actuará como una interfaz real completamente funcional (si la interfaz original está inactiva, entonces la derivada también está inactiva).

Este escenario es necesario cuando se trabaja en una situación completamente desconectada. Incluso entonces, tiene sentido tener capacidades de red cuando se ejecutan servidores en una instalación de VMWare. Esas máquinas virtuales pueden ser alcanzadas por su dirección IP, pero no por su nombre DNS, incluso si ejecuto un servidor DNS en una de esas máquinas virtuales. Al configurar una interfaz para usar el servidor DNS virtual, pensé que podría probar algunos escenarios DNS. Por desgracia, ninguna interfaz es resolver nombres DNS si ninguno de ellos son inactivos ...

+0

en el mismo tema, más o menos http://compileyouidontevenknowyou.blogspot.com/2009/03/virtual-networking-with-virtualbox-on.html –

+0

"Yo sé que se puede hacer una interfaz de red virtual en Windows (ver aquí), y en Linux también es bastante fácil con alias de IP "- ¿WUT? creación de interfaz con ip-aliases? Usted no sabe nada, de hecho. – poige

Respuesta

1

¿Qué quiere decir por

"but it will not act as a real fully functional interface (if the original interface is inactive, then the derived one is also inactive"

?

Puedo hacer una nueva interfaz, basarla en una ya existente, luego desactivar la existente y la nueva sigue funcionando. Sin embargo, hacer una segunda interfaz no crea una interfaz real (cuando se comprueba con ifconfig), simplemente asignará una segunda IP a la ya existente (sin embargo, esta puede ser DHCP mientras la primera está codificada, por ejemplo).

Entonces, ¿entiendo bien que desea crear una interfaz, no vinculada a ninguna interfaz real? ¿Cómo se usaría esta interfaz? P.ej. Si desconecta todas las redes WLAN y extrae todos los cables de red, ¿a dónde enviaría esta interfaz el tráfico si le envía tráfico? Tal vez su pregunta no esté clara, podría ser útil redactarla de nuevo, por lo que está claro qué intenta hacer con esta "interfaz virtual" una vez que la tiene.

Como mencionó "alias IP" en su pregunta, esto significaría una interfaz de alias. Pero una interfaz de alias siempre está vinculada a una interfaz real. La diferencia es en Linux una interfaz como esta IS una interfaz (por ejemplo, una interfaz de alias para eth0 podría ser eth1), mientras que en Mac, no se creó interfaz real, sino que se creó una interfaz virtual que puede configurarse y usarse de forma independiente, pero sigue siendo la misma interfaz físicamente y, por lo tanto, no se genera ninguna nueva interfaz con nombre (solo tiene dos interfaces, que en realidad son en0, pero ambas pueden habilitarse/deshabilitarse y configurarse de forma independiente).

-1

ifconfig interfacename crear creará una interfaz virtual,

+0

¿Podría darnos un ejemplo para eso? Si intento eso, no funciona y nunca funcionó por lo que yo sé. – Mecki

+2

Puedo confirmar que no funcionará –

+0

ifconfig vlan0 create como se documentó en la página de manual de ifconfig "create Crea el pseudo-dispositivo de red especificado. Si la interfaz se proporciona sin un número de unidad, intente crear un nuevo dispositivo con número de unidad arbitraria ". –

46

El adaptador de bucle de retorno es siempre hacia arriba.

ifconfig alias lo0 172.16.123.1 añadirá un alias IP 172.16.123.1 al adaptador de bucle invertido

ifconfig lo0 -alias 172.16.123.1 lo eliminará

+0

Esto es correcto para crear un alias, pero que yo sepa, no puede definir un servidor DNS vinculado al adaptador de bucle invertido, por lo que no funcionará en mi escenario como se describe anteriormente. –

+4

Esta no es una verdadera interfaz de red virtual. – AdamIerymenko

5

Es posible utilizar TUN/Dispositivo TAP. http://tuntaposx.sourceforge.net/

+0

Usuario yar hizo una sugerencia similar a través de una publicación de blog. Lo he visto, pero no lo probé, por falta de tiempo y ya no tengo la necesidad. Sin embargo, gracias. –

0

He recurrido a ejecutar PFSense, un enrutador/firewall basado en BSD para lograr este objetivo ....

¿por qué? porque OS X Server se pone tan EXTRAÑO sin una dirección IP estática ...

así que después de luchar con él durante días para hacer NAT y DHCP y servidor de seguridad y ...

Estoy tratando esto es paralelos ...

le permitirá ya sabe cómo va ...

0

Ir a las preferencias de red.

En la parte inferior de la lista de adaptadores de red, haga clic en los iconos +

Seleccione la interfaz existente que desea arp (por ejemplo Ethernet 1), y darle el nombre del servicio que desea para el nuevo puerto (digamos Ethernet 1.1) luego presione crear.

Ahora tiene la nueva interfaz virtual en la interfaz gráfica de usuario y puede administrar las direcciones IP, etc. de la manera normal.

ifconfig -a confirmará que tiene varias direcciones IP en la interfaz y que seguirán allí cuando reinicie.

Es una Mac. No luches, hazlo de la manera más fácil.

+3

Como se indicó en la pregunta original, esto no logra el efecto deseado de una interfaz virtual aislada de una interfaz física. El comando que describió simplemente alias la misma interfaz física con una segunda configuración de IP. – bleater

20

En respuesta, en particular:

You can create a new interface in the networking panel, based on an existing interface, but it will not act as a real fully functional interface (if the original interface is inactive, then the derived one is also inactive).

Esto se puede lograr usando un dispositivo/Tap Tun como sugiere psv141, y manipular el archivo /Library/Preferences/SystemConfiguration/preferences.plist para añadir un NetworkService basado en ya sea un tonel o interfaz del grifo. Mac OS X no permitirá la creación de un NetworkService basado en una interfaz de red virtual, pero se puede manipular directamente el archivo preferences.plist para agregar el NetworkService a mano. Básicamente, abriría el archivo preferences.plist en Xcode (o edita el XML directamente, pero es probable que Xcode sea más infalible) y copiará la configuración desde una interfaz Ethernet existente. El lugar para crear el nuevo NetworkService se encuentra en "NetworkServices", y si su Mac tiene un dispositivo Ethernet, el perfil NetworkService también estará bajo esta entrada de propiedad. La entrada de Ethernet puede ser copiado casi textualmente, los únicos campos que en realidad sería cambiantes son:

  • UUID
  • UserDefinedName
  • configuración
  • IPv4 y establecer el interfaz a la cuba o del grifo del dispositivo (es decir tun0 o tap0).
  • Servidor DNS si es necesario.

Luego, también podría manipular la ubicación particular para la que desea este NetworkService (recuerde que Mac OS X puede configurar todas las interfaces de red según su "Ubicación"). El UUID de ubicación predeterminado se puede obtener en la raíz de PropertyList como la clave "CurrentSet". Después de averiguar qué ubicación (o conjunto) desea, expanda la propiedad Establecer y agregue entradas en Global/IPv4/ServiceOrder con el UUID del nuevo NetworkService. También en la propiedad Establecer, necesita expandir la propiedad del Servicio y agregar el UUID aquí como un diccionario con una entrada de Serie con la clave __LINK__ y valor como el UUID (use las otras interfaces como ejemplo).

Después de haber modificado su archivo preferences.plist, simplemente reinicie y NetworkService estará disponible en SystemPreferences-> Network. Tenga en cuenta que hemos imitado un dispositivo Ethernet para que la capa de redes de Mac OS X tenga en cuenta que "un cable está desenchufado" y no le permitirá activar la interfaz a través de la GUI. Sin embargo, dado que el dispositivo subyacente es un dispositivo tun/tap y tiene una dirección IP, la interfaz se activará y se agregará el ruteo adecuado en el nivel BSD.

Como referencia, se utiliza para hacer magia de enrutamiento especial.

En caso de que llegue hasta aquí y tenga problemas, debe crear el dispositivo tun/tap abriendo uno de los dispositivos en/dev /. Se puede utilizar cualquier programa para hacer esto, pero yo soy un fan de la buena pasada de moda C a mí mismo:

#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; 
} 
+0

¿Esta solución le permitirá activar "Compartir en Internet" para unir la interfaz de toque a la interfaz de ethernet o aeropuerto? – Sukima

+2

Lo he probado y sí, lo hace. Pude compartir mi dispositivo tun0 OpenVPN (desde mi conexión Ethernet) a través de mi WiFi usando este método. – thenickdude

+0

Nota: Intenté esto con un vmnet (adaptador de red virtual VMware) y no puedo activarlo con una IP. (Para usos con dispositivos tun/tap como se discutió, esta solución realmente funciona) – TCB13

0

He aquí una buena guía: http://gerrydevstory.com/2012/08/20/how-to-create-virtual-network-interface-on-mac-os-x/

Básicamente se selecciona un adaptador de red en las redes panel de preferencias del sistema, luego haz clic en el engranaje para "Duplicar servicio". Después de duplicar el servicio, usted asigna manualmente una IP en uno de los rangos de direcciones privadas. A continuación, un ping para asegurarse;)

+0

La publicación original solicita ayuda para crear una ** NUEVA ** ** interfaz ** de red virtual, sin solicitar la adición de una nueva dirección IP para una interfaz de red ** existente **. – mxi1

+0

Acepto que la pregunta especifica claramente una interfaz virtual, y mi respuesta y el enlace que proporcioné no delinean entre una interfaz virtual y una interfaz física. Sin embargo, la pregunta realmente no pide nada de esto en particular. Pide "algo similar" a hacer un dispositivo de red virtual en Windows. –

5

Algunos otros parecían insinuar esto, pero la siguiente se muestra el uso de ifconfig para crear una VLAN y la prueba de DNS en la interfaz virtual (mediante minidns) en 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 
8

En lo que respecta a @bmasterswizzle 's BRILLIANT answer - más específicamente - a @DanRamos' pregunta acerca de cómo forzar estado de enlace de la nueva interfaz de "arriba" .. yo uso este script, de cuyo origen no puedo recordar, pero que funciona fabulosamente (en coordinación con @bmasterswizzles "Mona Lisa" of answers) ...

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

no estoy muy seguro de entender la alteración al indicador al final, o ...

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

pero lo que sea. funciona. luz de enlace: verde ✅. le encanta.

enter image description here

+0

¿Cómo se puede destruir el adaptador de tap (mediante script)? –

+0

Si desea realizar una implementación de Python, es posible que desee utilizar http://stackoverflow.com/a/15139727/1097104 como base. –

+0

Me da el siguiente error: línea 5:/dev/tap0: Operación no permitida –