当前位置:  开发笔记 > 编程语言 > 正文

Mac OS X中的虚拟网络接口

如何解决《MacOSX中的虚拟网络接口》经验,为你挑选了5个好方法。

我知道你可以在Windows中创建一个虚拟网络接口(见这里),在Linux中使用ip-aliases也很容易,但Mac OS X有类似的东西吗?我一直在寻找环回适配器,虚拟接口,但找不到一个好的解决方案.

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

在完全断开连接的情况下工作时需要此方案.即便如此,在VMWare安装中运行服务器时具有网络功能也是有意义的.这些虚拟机可以通过其IP地址访问,但不能通过其DNS名称访问,即使我在其中一个虚拟机中运行DNS服务器也是如此.通过配置接口以使用虚拟DNS服务器,我想我可以测试一些DNS场景.不幸的是,如果DNS名称都不是非活动的,那么没有接口可以解析DNS名称......



1> 小智..:

环回适配器始终处于启用状态.

ifconfig lo0别名172.16.123.1将别名IP 172.16.123.1添加到环回适配器

ifconfig lo0 -alias 172.16.123.1将删除它


这不是真正的虚拟网络接口.

2> 小智..:

特别回复:

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

这可以使用psv141建议的Tun/Tap设备来实现,并且/Library/Preferences/SystemConfiguration/preferences.plist可以根据tun或tap接口操作文件以添加NetworkService.Mac OS X将不允许基于虚拟网络接口创建NetworkService,但可以直接操作该preferences.plist文件以手动添加NetworkService.基本上你会preferences.plist在Xcode中打开文件(或直接编辑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(以其他接口为例).

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

作为参考,这用于做特殊的路由魔术.

如果你到目前为止遇到麻烦,你必须通过打开/ dev /下的一个设备来创建tun/tap设备.你可以使用任何程序来做到这一点,但我自己也是老式C的粉丝:

#include 
#include 
#include 
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;
}


我测试了它,是的,确实如此.我可以使用这种方法通过我的WiFi共享我的OpenVPN tun0设备(来自我的以太网连接).

3> Alex Gray..:

关于@bmasterswizzle' BRILLIANT的答案 - 更具体地说 - @DanRamos关于如何强制新界面的链接状态为"向上"的问题.我使用这个脚本,我的记忆起源我不记得,但是它的工作非常有效(与@bmasterswizzles"蒙娜丽莎"的答案)...

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

但是无所谓.有用.链接灯:绿色 ✅. 喜欢它.

在此输入图像描述


它给我以下错误:第5行:/ dev / tap0:不允许操作

4> 小智..:

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



5> 小智..:

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

$ 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

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有