我有一台装有 bhyve 的 FreeBSD10 主机,rc.conf 中的 IP 配置如下:
ifconfig_igb0="inet X.X.X.146 netmask 255.255.255.0 broadcast X.X.X.255"
defaultrouter="X.X.X.254"
cloned_interfaces="bridge0"
ifconfig_bridge0="addm igb0 up"
Tap 设备通过 vmrc 脚本添加。我的主机提供商有另一个 IPv4 地址,位于另一个子网:Y.Y.Y.176
。主机提供商为我提供了以下使用此 IP 配置桥接网络的指南:桥接网络
根据该指南,我像这样配置了客户机(FreeBSD10)(主机提供商为我提供了 IP 的“虚拟 MAC”):
ifconfig_vtnet0="inet Y.Y.Y.176 netmask 255.255.255.255 ether 02:00:00:8c:46:32"
static_routes="net1 net2"
route_net1="-net X.X.X.254/32 Y.Y.Y.176"
route_net2="default X.X.X.254"
在启动虚拟机之前,我像这样设置了网桥:
ifconfig bridge0 addm igb0 addm tap0 up
作为tap0
虚拟机网络适配器的“主机端”。
这不起作用。我无法从虚拟机内部访问网关,也无法从虚拟机访问主机。这对我来说很合理,因为没有路由。不清楚这怎么可能起作用。
答案1
您可能需要做:
ifconfig tap0 up
和/或添加net.link.tap.up_on_open=1
以/etc/sysctl.conf
使其自动启动。
通常情况下,只有您指定 IP 地址,Tap 接口才会出现。
这应该能让桥梁正常运转。
要配置桥接器rc.conf
:
cloned_interfaces="bridge0 tap0"
ifconfig_bridge0="addm igb0 addm tap0 up"
您还需要:
if_bridge_load="YES"
if_tap_load="YES"
以便/boot/loader.conf
可以即时创建水龙头。
请参阅我写的官方说明这里。
答案2
虽然这个问题已经存在半年多了,但我也遇到了同样的问题
不要在桥接的物理成员接口上配置 IP 地址,而是在桥接接口本身上配置。这在FreeBSD 手册中有关桥接的部分。
我的理解是,这是由于数据包的处理方式造成的。if_bridge(4)
在有关过滤的部分中涵盖了其中的一些内容。
答案3
这并没有解决问题,而是规避了问题:
我igb0
在主机上分配了所有带有/32
网络掩码的 IP,而不是虚拟机,并为 bridge0 分配了私有 IP 10.0.0.1/24
,vtnet0
虚拟机中的接口分配了10.0.0.2
默认网关,10.0.0.1
然后我使用 pf 创建了一个 binat。
rc.conf
主机上的内容如下所示:
ifconfig_igb0="inet X.X.X.146 netmask 255.255.255.0 broadcast X.X.X.255"
defaultrouter="X.X.X.254"
ifconfig_igb0_alias0="inet Y.Y.Y.176/32"
ifconfig_igb0_alias1="inet Y.Y.Y.177/32"
ifconfig_igb0_alias2="inet Y.Y.Y.178/32"
ifconfig_igb0_alias3="inet Y.Y.Y.179/32"
cloned_interfaces="bridge0"
ifconfig_bridge0="inet 10.0.0.1/24"
在pf.conf
主机上:
vm_if1 = "Y.Y.Y.176"
vm_if2 = "Y.Y.Y.177"
vm_if3 = "Y.Y.Y.178"
vm_if4 = "Y.Y.Y.179"
slave = "10.0.0.4"
binat on igb0 from $slave to any -> $vm_if1
nat on igb0 from bridge0:network to any -> (igb0)
虚拟机rc.conf
非常简单:
ifconfig_vtnet0="10.0.0.2 netmask 255.255.255.0"
defaultrouter="10.0.0.1"
现在,每当我配置一个新的虚拟机时,它都需要一个范围内的 IP 10.0.0.0/24
,并且我需要调整主机pf.conf
。