ti-enxame.com

Interface de rede virtual no Mac OS X

Eu sei que você pode fazer uma interface de rede virtual no Windows (veja aqui ), e no Linux também é bem fácil com ip-aliases, mas existe algo semelhante para o Mac OS X? Eu tenho procurado por adaptadores de loopback, interfaces virtuais e não encontrei uma boa solução. 

Você pode criar uma nova interface no painel de rede, com base em uma interface existente, mas ela não funcionará como uma interface totalmente funcional real (se a interface original estiver inativa, a derivada também ficará inativa).

Esse cenário é necessário ao trabalhar em uma situação completamente desconectada. Mesmo assim, faz sentido ter recursos de rede ao executar servidores em uma instalação VMWare. Essas máquinas virtuais podem ser acessadas pelo endereço IP, mas não pelo nome DNS, mesmo se eu executar um servidor DNS em uma dessas máquinas virtuais. Ao configurar uma interface para usar o servidor DNS virtual, achei que poderia testar alguns cenários de DNS. Infelizmente, nenhuma interface está resolvendo nomes DNS se nenhum deles estiver inativo ...

42
Hans Doggen

O adaptador de loopback está sempre ativo.

ifconfig lo0 alias 172.16.123.1 irá adicionar um alias IP 172.16.123.1 ao adaptador de loopback

ifconfig lo0 -alias 172.16.123.1 irá removê-lo

53
Dave Whitla

Respondendo em particular a:

Você pode criar uma nova interface no painel de rede, com base em uma interface existente, mas ela não funcionará como uma interface totalmente funcional real (se a interface original estiver inativa, a derivada também ficará inativa).

Isso pode ser feito usando um dispositivo Tun/Tap como sugerido por psv141 e manipulando o arquivo /Library/Preferences/SystemConfiguration/preferences.plist para adicionar um NetworkService baseado em uma interface tun ou tap. O Mac OS X não permitirá a criação de um NetworkService baseado em uma interface de rede virtual, mas é possível manipular diretamente o arquivo preferences.plist para adicionar o NetworkService manualmente. Basicamente, você abriria o arquivo preferences.plist no Xcode (ou editaria o XML diretamente, mas o Xcode provavelmente seria mais infalível), e copiaria a configuração de uma interface Ethernet existente. O local para criar o novo NetworkService está em "NetworkServices" e, se o seu Mac tiver um dispositivo Ethernet, o perfil NetworkService também estará nessa entrada de propriedade. A entrada Ethernet pode ser copiada quase que literalmente, os únicos campos que você realmente estaria mudando são:

  • UUID
  • UserDefinedName
  • Configuração IPv4 e defina a interface para o seu tun ou dispositivo de toque (ou seja, tun0 ou tap0).
  • Servidor DNS, se necessário.

Em seguida, você também deve manipular o local específico para o qual deseja este NetworkService (lembre-se de que o Mac OS X pode configurar todas as interfaces de rede, dependendo de sua "Localização"). O UUID de localização padrão pode ser obtido na raiz da PropertyList como a chave "CurrentSet". Depois de descobrir qual local (ou conjunto) você deseja, expanda a propriedade Set e adicione entradas em Global/IPv4/ServiceOrder com o UUID do novo NetworkService. Também sob a propriedade Set você precisa expandir a propriedade Service e adicionar o UUID aqui como um dicionário com uma entrada String com a chave __LINK__ e valor como o UUID (use as outras interfaces como um exemplo).

Depois de ter modificado o arquivo preferences.plist, basta reinicializar e o NetworkService estará disponível em SystemPreferences-> Network. Observe que imitamos um dispositivo Ethernet para que a camada de rede do Mac OS X observe que "um cabo está desconectado" e não permitirá que você ative a interface por meio da GUI. No entanto, como o dispositivo subjacente é um dispositivo tun/tap e possui um endereço IP, a interface se tornará ativa e o roteamento adequado será adicionado no nível do BSD.

Como referência, isso é usado para fazer mágica de roteamento especial.

Caso você tenha chegado até aqui e esteja tendo problemas, você deve criar o dispositivo tun/tap abrindo um dos dispositivos em/dev /. Você pode usar qualquer programa para fazer isso, mas eu sou um fã de C-old-fashioned C eu mesmo:

#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

Em relação a @bmasterswizzles BRILLIANT responder - mais especificamente - a @DanRamos 'pergunta sobre como forçar o estado do link da nova interface para "up" .. Eu uso este script, de cuja origem não consigo me lembrar, mas que funciona fabulosamente (em coordenação com @bmasterswizzles "Mona Lisa" de respostas ) ...

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

Eu não tenho certeza se entendi a alteração no prompt no final, ou ...

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

mas de qualquer forma. funciona. luz de ligação ????: verde ✅. Amo isso????.

enter image description here

8
Alex Gray

É possível usar o dispositivo TUN/TAP. http://tuntaposx.sourceforge.net/

5
psv141

Alguns outros pareciam sugerir isso, mas o seguinte demonstra o uso do ifconfig para criar um vlan e testar o DNS na interface virtual (usando minidns ) no 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

O que você quer dizer com 

"mas não funcionará como uma interface totalmente funcional real (se a interface original estiver inativa, então a derivada também estará inativa"

?

Eu posso criar uma nova interface, basear em uma já existente, depois desabilitar a existente e a nova ainda funciona. Fazer uma segunda interface, no entanto, não cria uma interface real (quando você verifica com ifconfig), apenas atribuirá um segundo IP ao já existente (no entanto, este pode ser o DHCP enquanto o primeiro é codificado por exemplo).

Então eu entendi bem, que você quer criar uma interface, não vinculado a qualquer interface real? Como essa interface seria usada? Por exemplo. se você desconectar toda a WLAN e puxar todos os cabos de rede, para onde essa interface enviaria tráfego, se você enviar tráfego para ela? Talvez sua pergunta seja um pouco incerta, pode ajudar muito se reformulá-la, então está claro o que você está realmente tentando fazer com essa "interface virtual" assim que a tiver.

Como você mencionou "alias IP" em sua pergunta, isso significaria uma interface de alias. Mas uma interface de alias está sempre vinculada a uma interface real. A diferença é que no Linux essa interface é realmente&EACUTE;uma interface (por exemplo, uma interface de alias para eth0 pode ser eth1), enquanto no Mac, nenhuma interface real é criada, em vez disso uma interface virtual é criada , que pode ser configurado e usado independentemente, mas ainda é a mesma interface fisicamente e, portanto, nenhuma nova interface nomeada é gerada (você só tem duas interfaces, ambas en0, mas ambas podem ser ativadas/desativadas e configuradas independentemente).

1
Mecki

Dê uma olhada neste tutorial, é para o FreeBSD, mas também se aplica ao OS X. http://people.freebsd.org/~arved/vlan/vlan_en.html

1
Ariel Monaco

eu usei o PFSense, um roteador/firewall baseado em BSD para atingir esse objetivo….

porque? porque o OS X Server fica tão FREAKY sem um IP estático ...

então, depois de lutar com ele por dias para fazer NAT e DHCP e firewall e…

Estou tentando isso é paralelos ...

vai deixar você saber como vai ...

0
Alex Gray

se você estiver em um ambiente de desenvolvimento e quiser acessar algum serviço já em execução no host local/máquina host. no docker para mac você tem outra opção.use docker.for.mac.localhost em vez de localhost no contêiner docker. docker.for.mac.Host.internal deve ser usado em vez de docker.for.mac.localhost do Docker Community Edition 17.12.0-ce-mac46 2018-01-09. isso permite que você se conecte ao serviço em execução no seu mac a partir de um contêiner docker.please referir links abaixo

compreendendo o comportamento docker.for.mac.localhost

notas de lançamento

0
arvin_v_s

Vá para Preferências de Rede.

Na parte inferior da lista de adaptadores de rede, clique nos ícones +  

Selecione a interface existente que você deseja arp (diga Ethernet 1) e forneça o nome do serviço que você deseja para a nova porta (digamos Ethernet 1.1) e, em seguida, pressione create.

Agora você tem a nova interface virtual no gui e pode gerenciar endereços IP, etc, da maneira normal.

ifconfig -a confirmará que você tem vários IPs na interface, e estes ainda estarão lá quando você reiniciar.

É um Mac. Não lute contra isso, faça do jeito mais fácil. 

0
Henry 3 Dogg