关于macos:Mac OS X中的虚拟网络接口

Virtual network interface in Mac OS X

我知道您可以在Windows中创建虚拟网络接口(请参阅此处),在Linux中使用ip别名也很容易,但是Mac OS X是否存在类似的功能?我一直在寻找回送适配器,虚拟接口,但找不到一个好的解决方案。

您可以基于现有接口在网络面板中创建一个新接口,但它不会充当真正的功能齐全的接口(如果原始接口处于非活动状态,则派生的接口也处于非活动状态)。

在完全断开连接的情况下工作时,需要这种情况。即使这样,在VMWare安装中运行服务器时,具有联网功能也是有意义的。即使我在这些虚拟机之一中运行DNS服务器,也可以通过其IP地址访问这些虚拟机,但不能通过其DNS名称访问。通过配置使用虚拟DNS服务器的接口,我认为我可以测试某些DNS方案。不幸的是,如果没有一个接口处于非活动状态,则没有接口会解析DNS名称...


回送适配器始终打开。

ifconfig lo0别名172.16.123.1将向回送适配器添加别名IP 172.16.123.1

ifconfig lo0 -alias 172.16.123.1将其删除


特别回复:

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).

这可以通过使用psv141建议的Tun / Tap设备并基于Tun或Tap接口操纵/Library/Preferences/SystemConfiguration/preferences.plist文件以添加NetworkService来实现。 Mac OS X不允许基于虚拟网络接口创建NetworkService,但可以直接操作preferences.plist文件以手动添加NetworkService。基本上,您将在Xcode中打开preferences.plist文件(或直接编辑XML,但是Xcode可能更简单),然后从现有的以太网接口复制配置。创建新NetworkService的位置位于" NetworkServices"下,如果您的Mac具有以太网设备,则NetworkService配置文件也将位于此属性条目下。可以逐字复制以太网条目,实际上您将要更改的唯一字段是:

  • UUID
  • UserDefinedName
  • IPv4配置并将接口设置为您的Tun或Tap设备(即tun0或tap0)。
  • DNS服务器(如果需要)。

然后,您还将操纵该NetworkService想要用于的特定位置(请记住,Mac OS X可以根据"位置"配置所有网络接口)。可以在PropertyList的根中获取默认位置UUID作为键" CurrentSet"。在确定所需的位置(或设置)之后,展开Set属性,并使用新NetworkService的UUID在Global / IPv4 / ServiceOrder下添加条目。同样,在Set属性下,您需要扩展Service属性,并在此处将UUID作为字典添加,其中包含一个带有键__LINK__且值为UUID的String条目(使用其他接口作为示例)。

修改preferences.plist文件后,只需重新启动,NetworkService将在SystemPreferences-> Network下可用。请注意,我们已经模仿了以太网设备,因此Mac OS X网络层会注意到"电缆已拔出",并且不允许您通过GUI激活接口。但是,由于基础设备是tun / tap设备,并且具有IP地址,因此该接口将变为活动状态,并且将在BSD级别添加正确的路由。

作为参考,它用于执行特殊的路由魔术。

如果您走得太远并且遇到麻烦,则必须通过打开/ dev /下的设备之一来创建tun / tap设备。您可以使用任何程序来执行此操作,但我本人是老式C的粉丝:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#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?\
");
      return -1;
   }
   while (1)
   {
      sleep(100000);
   }
   return 0;
}

关于@bmasterswizzle的BRILLIANT答案-更具体地说-关于@DanRamos的问题,该问题关于如何强制将新接口的链接状态设置为" up"。.我使用此脚本,该脚本的起源我不记得了,但是出色地工作(与@bmasterswizzles的答案" Mona Lisa"配合使用)...

1
2
3
4
5
6
7
8
9
10
11
#!/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

我不太确定我是否理解结尾处提示的更改,或者...

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

但是无所谓。有用。链接指示灯?:绿色?。喜欢它?

enter image description here


其他一些似乎暗示了这一点,但是以下示例演示了如何使用ifconfig创建vlan并在OS X 10.9.5的虚拟接口上(使用minidns)测试DNS:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ 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

可以使用TUN / TAP设备。
http://tuntaposx.sourceforge.net/


如果您在开发环境中,并且想要访问已在localhost /主机上运行的某些服务。 在Mac的docker中,您还有另一个选择。在docker容器中使用docker.for.mac.localhost而不是localhost。
应该使用docker.for.mac.host.internal代替Docker Community Edition 17.12.0-ce-mac46 2018-01-09中的docker.for.mac.localhost。
这允许您从Docker容器中连接到Mac上运行的服务。请参考以下链接

了解docker.for.mac.localhost行为

发行说明


看一下本教程,它适用于FreeBSD,但也适用于OSX。http://people.freebsd.org/~arved/vlan/vlan_en.html


你是什??么意思

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

我可以创建一个新接口,将其建立在现有接口的基础上,然后禁用现有接口,新接口仍然可以使用。但是,创建第二个接口并不会创建真实的接口(当您使用ifconfig进行检查时),只会将第二个IP分配给已经存在的IP(但是,该IP可以是DHCP,而第一个IP是硬编码的)。

那么,我是否理解正确,您想创建一个接口,而不是绑定到任何实际接口?那么该接口将如何使用?例如。如果断开所有WLAN的连接并拔出所有网络电缆,那么如果将流量发送到该接口,该接口会将流量发送到哪里?也许您的问题尚不清楚,如果改写它可能会很有帮助,因此很明显,一旦拥有了这个"虚拟接口",您实际上是在尝试做什么。

正如您在问题中提到的"别名IP"一样,这意味着别名接口。但是别名接口始终绑定到真实接口。区别在于,在Linux中,这样的接口实际上是一个接口(例如eth0的别名接口可以是eth1),而在Mac上,没有创建实际接口,而是创建了可以独立配置和使用的虚拟接口,但是在物理上仍然是相同的接口,因此不会生成新的命名接口(您只有两个接口,它们实际上都是en0,但是可以分别启用/禁用和配置)。


转到网络首选项。

在网络适配器列表的底部,单击+图标

选择您想要arp的现有接口(例如,以太网1),并为新端口(例如,以太网1.1)提供所需的服务名称,然后按create。

现在,您在gui中有了新的虚拟接口,可以以常规方式管理IP地址等。

ifconfig -a将确认您在接口上具有多个IP,并且在您重新引导时这些IP仍将存在。

它是Mac。不要打架,做起来很简单。


我采取了运行PFSense(一种基于BSD的路由器/防火墙)来实现此目标的方法。

为什么?因为OS X Server在没有静态IP的情况下变得如此怪异……

因此,在与DAYS搏斗之后,制作了NAT,DHCP和防火墙以及……

我正在尝试这是相似的...

让你知道事情的进展...


这是一个很好的指南:https://web.archive.org/web/20160301104014/http://gerrydevstory.com/2012/08/20/how-to-create-virtual-network-interface-on-mac-os -X/

基本上,您可以在系统偏好设置的"网络"窗格中选择一个网络适配器,然后单击"复制服务"齿轮。复制服务后,您可以在一个专用地址范围中手动分配一个IP。然后对其进行ping操作以确保;)


ifconfig interfacename create将创建一个虚拟接口,


推荐阅读

    linux命令查看接口?

    linux命令查看接口?,系统,设备,地址,网络,信息,电脑,软件,情况,命令,灵活,lin

    linux命令关闭虚拟机?

    linux命令关闭虚拟机?,服务,地址,系统,软件,网络,市场,责任公司,信息,公司,

    linux命令装虚拟机?

    linux命令装虚拟机?,系统,管理,环境,工具,标准,软件,化工,基础,虚拟机,命令,

    linux命令别名的更改?

    linux命令别名的更改?,系统,别名,新增,环境,地方,命令,查询系统,名字,主机

    linux虚拟机su命令?

    linux虚拟机su命令?,密码,系统,位置,工具,软件,命令,环境,工作,生产,设计,Lin

    linux虚拟化的命令?

    linux虚拟化的命令?,技术,信息,工具,系统,产品,平台,第一家,业务,实时,化工,L

    linux虚拟机命令安装?

    linux虚拟机命令安装?,系统,软件,工具,虚拟机,网络,状态,操作系统,命令,文

    linux虚拟机命令安装?

    linux虚拟机命令安装?,系统,软件,工具,虚拟机,网络,状态,操作系统,命令,文

    虚拟机linux系统命令?

    虚拟机linux系统命令?,系统,工具,软件,名字,时间,命令,工作,首次,环境,名称,L

    linux组合命令别名?

    linux组合命令别名?,系统,别名,地方,环境,工作,新增,命令,终端,文件,环境变

    linux虚拟机ls命令?

    linux虚拟机ls命令?,系统,信息,时间,命令,最新,标准,工作,名称,文件,目录,lin

    linux虚拟机扩容命令?

    linux虚拟机扩容命令?,扩大,系统,在线,虚拟机,盘后,工具,硬盘,磁盘,单击,下

    linux查看接口命令?

    linux查看接口命令?,地址,系统,标准,命令,管理,工作,文件,端口,目录,路径,lin

    linux虚拟机系统命令?

    linux虚拟机系统命令?,系统,环境,密码,电脑,软件,工具,信息,位置,设备,虚拟

    linux给命令起别名?

    linux给命令起别名?,系统,别名,环境,命令,新增,地方,代码,档案,文件,用户,lin

    linux命令大全虚拟机?

    linux命令大全虚拟机?,地址,网络,名字,系统,信息,密码,电脑,状态,首次,名称,

    虚拟机linux拷贝命令?

    虚拟机linux拷贝命令?,系统,工具,服务,电脑,软件,项目,虚拟机,异常,命令,文

    使用linux命令调接口?

    使用linux命令调接口?,网络,系统,地址,信息,工具,情况,服务,灵活,电脑,名称,

    linux不使用别名命令?

    linux不使用别名命令?,系统,地址,别名,工作,信息,命令,目录,终端,控制台,定

    linux虚拟机压缩命令?

    linux虚拟机压缩命令?,系统,命令,文件,管理,时间,标准,工具,数字,目录,格式,L