Mac OS X中的虚拟networking接口
我知道你可以在Windows中创build一个虚拟的networking接口(参见这里 ),而在Linux中,使用ip-aliases也很容易,但是对于Mac OS X有类似的东西吗? 我一直在寻找环回适配器,虚拟接口,并找不到一个好的解决scheme。
您可以在networking面板中根据现有的接口创build一个新的接口,但不能作为真正的全function接口(如果原始接口处于非活动状态,则派生的接口也处于非活动状态)。
在完全断开连接的情况下工作时,需要这种情况。 即使如此,在VMWare安装中运行服务器时,具有networkingfunction也是有意义的。 这些虚拟机可以通过它们的IP地址到达,但不能通过它们的DNS名称,即使我在其中一个虚拟机中运行DNS服务器。 通过configuration接口来使用虚拟DNS服务器,我想我可以testing一些DNSscheme。 不幸的是,没有接口解决DNS名称,如果他们都不是无效的… …
回送适配器始终处于启动状态。
ifconfig lo0别名172.16.123.1将向环回适配器添加一个别名IP 172.16.123.1
ifconfig lo0 -alias 172.16.123.1将会删除它
特别答复:
您可以在networking面板中根据现有的接口创build一个新的接口,但不能作为真正的全function接口(如果原始接口处于非活动状态,则派生的接口也处于非活动状态)。
这可以使用psv141build议的Tun / Tap设备,并操作/Library/Preferences/SystemConfiguration/preferences.plist
文件来添加基于tun或Tap接口的NetworkService。 Mac OS X将不允许创build基于虚拟networking接口的NetworkService,但可以直接操作preferences.plist
文件来手动添加NetworkService。 基本上你可以在Xcode中打开preferences.plist
文件(或直接编辑XML,但是Xcode可能更加傻瓜式),并从现有的以太网接口复制configuration。 创build新NetworkService的地方位于“NetworkServices”下,如果您的Mac具有以太网设备,则NetworkServiceconfiguration文件也将位于此属性条目下。 以太网条目可以被逐字复制,只有你实际上会改变的是:
- UUID
- UserDefinedName
- IPv4configuration并将接口设置为Tun或Tap设备(即tun0或Tap0)。
- DNS服务器如果需要。
然后,您还可以操纵NetworkService所需的特定位置(请记住Mac OS X可以根据您的“位置”configuration所有networking接口)。 默认的位置UUID可以在PropertyList的根中作为关键字“CurrentSet”获得。 在找出想要的位置(或集合)之后,展开Set属性,并在Global / IPv4 / ServiceOrder下添加新的NetworkService的UUID条目。 同样在Set属性下,您需要展开Service属性,并将UUID作为字典添加到字典中,其中键为__LINK__,值为UUID(使用其他接口作为示例)。
修改了您的preferences.plist
文件后,只需重新启动,NetworkService将在SystemPreferences-> Network下可用。 请注意,我们模拟了一个以太网设备,因此Mac OS Xnetworking层将会注意到“一根电缆被拔出”,并且不会让您通过GUI激活该接口。 但是,由于底层设备是tun / tap设备,并且具有IP地址,因此该接口将变为活动状态,并在BSD级别添加正确的路由。
作为参考,这是用来做特殊的路由魔术。
如果你得到这么多,并且遇到了麻烦,你必须打开/ dev /下的一个设备来创buildtun / tap设备。 你可以使用任何程序来做到这一点,但我自己是一个老式的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; }
关于@bmasterswizzle
的BRILLIANT答案 – 更具体地说 – 对@DanRamos
关于如何强制新界面的链接状态为“up”的问题。我使用这个脚本,其起源我不记得,但它的作品惊人(与@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
但是无所谓。 有用。 链接灯光: 绿色 ✅。 爱它 💚。
可以使用TUN / TAP设备。 http://tuntaposx.sourceforge.net/
其他一些人似乎暗示了这一点,但下面的示例演示了如何使用ifconfig在OS X 10.9.5上的虚拟接口(使用minidns )创build一个vlan并testingDNS:
$ 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
你是什么意思
“但它不会作为一个真正的全function接口(如果原始接口是不活动的,那么派生的接口也是不活动的”
?
我可以创build一个新的界面,基于一个已经存在的界面,然后禁用现有界面,新界面仍然可以工作。 然而,创build第二个接口不会创build一个真正的接口(当您检查ifconfig时),它只会为已经存在的接口分配第二个IP(但是,这个接口可以是DHCP,而第一个IP是硬编码的)。
所以我理解你是对的,你想创build一个接口,而不是绑定到任何真正的接口? 这个接口如何被使用? 例如,如果你断开所有的无线局域网,并拉动所有的网线,这个接口发送stream量到哪里,如果你发送stream量到它? 也许你的问题有点不清楚,如果改写它可能会有很大的帮助,所以一旦你有了这个“虚拟接口”,你就会清楚你到底在做什么。
正如你在你的问题中提到“别名IP”,这将意味着一个别名界面。 但是一个别名界面总是绑定到一个真实的界面。 不同的是,在Linux中,这样的接口确实是一个接口(例如,eth0的别名接口可以是eth1),而在Mac上,不会创build真实接口,而是创build一个可以独立configuration和使用的虚拟接口,仍然是物理上相同的接口,因此没有生成新的命名接口(您只有两个接口,实际上都是en0,但都可以启用/禁用和独立configuration)。
看看这个教程,它适用于FreeBSD,但也适用于OS X. http://people.freebsd.org/~arved/vlan/vlan_en.html
我已经使用了基于BSD的路由器/防火墙PFSense来实现这个目标。
为什么? 因为OS X服务器得到如此没有静态IP的FREAKY …
所以在摔跤后,为了DAYS做NAT和DHCP和防火墙和…
我正在尝试这是相似的…
会让你知道如何去…
转到networking首选项。
在networking适配器列表的底部,单击+图标
select您想要arp的现有接口(比如说以太网1),并为新端口指定所需的服务名称(例如Ethernet 1.1),然后按创build。
现在你在gui中有了新的虚拟接口,并且可以正常的方式pipe理IP地址等等。
ifconfig -a会确认你的接口上有多个IP地址,当你重新启动时,这些地址仍然会在那里。
它是一台Mac。 不要战斗,简单的方法。
这是一个很好的指导: http : //gerrydevstory.com/2012/08/20/how-to-create-virtual-network-interface-on-mac-os-x/
基本上,您在系统偏好设置的“networking”面板中select一个networking适配器,然后单击齿轮以“重复服务”。 在服务被复制之后,您可以手动为其中一个专用地址范围分配一个IP。 然后ping它以确保;)
ifconfig interfacename create会创build一个虚拟接口,