虚拟机“仅主机网络”接口的 if-up 脚本

Yur*_*uri 5 networking routing

我正在使用 Virtualbox 仅主机网络,并且我有接口 vboxnet0。

在主机(Ubuntu 14)上,我有一些路由人员、几个路由表(主要和两个额外的)、IP 规则集等。

我对主机上 vbonxen0 接口的路由表所做的每一项更改都丢失了重启。

如何为 vboxnet0 接口制作类似 ifup 的脚本?

小智 5

使用 VirtualBox 的仅主机网络模式(至少 V4.3.36)时需要记住一些事情,特别是当桥接没有选项且需要手动配置时,之后需要配置自定义路由:

  • vboxnet0设备节点在启动后不会自动可用(!)
    除非您手动配置它,/etc/network/interfaces这可能会干扰 virtualbox 尝试启动它自己的实例。
  • 加载 vbox(pci|netadp|netflt|drv) 模块时它甚至不可用。
  • 使用vboxmanage hostonlyif create只会添加设备节点,但将其保留为尚未可路由的 DOWN 状态。
  • 即使接口启动,vboxnet0
    4: vboxnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> ... state UNKNOWN ...
    设备状态也将保持未知:任何尝试使用来自/etc/network/interfacesifup的事件的尝试/etc/network/if-up.d/MYSCRIPT都是无用的,因为永远不会达到该状态。
  • 在主机上,只有当您的第一个 VM 来宾计算机启动时,它才变得可用并可供使用。

到目前为止,我发现在virtualbox和 VM 启动之间的唯一方法是通过放置文件来使用udev 规则/etc/udev/rules.d/80-vboxnet,例如:

KERNEL==“vboxnet0”,SUBSYSTEM==“net”,ACTION==“add”,RUN+=“/bin/bash -c '/bin/sleep 1; /sbin/ip 路由添加 xxxx dev vboxnet0'”

这会触发 bash 实例。我已将该ip route ...语句直接放入规则文件中,但也可以在其他地方调出脚本并在其中放置其他路由配置。