У меня есть хост FreeBSD10 с bhyve и следующей IP-конфигурацией в rc.conf:
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"
Устройство крана добавляется через сценарии vmrc. У меня есть еще один IPv4-адрес от моего хостера, который находится в другая подсеть: Y.Y.Y.176
. Хостер дает мне следующее руководство по настройке мостовой сети с этим IP: Мостовая сеть
Согласно этому руководству я настроил гостя (FreeBSD10) следующим образом (хостер предоставляет мне «виртуальный MAC» для IP):
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
является «стороной хоста» сетевого адаптера виртуальных машин.
Это не работает. Я не могу подключиться к шлюзу из виртуальной машины и не могу подключиться к хосту из виртуальной машины. Для меня это имеет смысл, потому что маршрутов нет. Непонятно, как это могло вообще работать.
Вероятно, вам нужно сделать:
ifconfig tap0 up
и / или добавить net.link.tap.up_on_open=1
к /etc/sysctl.conf
сделать его автоподъем.
Обычно интерфейс касания не появляется, пока вы не дадите ему IP.
Это должно заставить мост работать.
Чтобы настроить мост в rc.conf
:
cloned_interfaces="bridge0 tap0"
ifconfig_bridge0="addm igb0 addm tap0 up"
Также вам понадобятся:
if_bridge_load="YES"
if_tap_load="YES"
в /boot/loader.conf
так что кран можно создавать на лету.
См. Официальные инструкции, которые я написал Вот.
Несмотря на то, что этому вопросу больше полугода, так как у меня была такая же проблема
Не настраивайте свой IP-адрес на физических интерфейсах моста, а на самом интерфейсе моста. Об этом говорится в Раздел руководства FreeBSD по мостовому соединению.
Насколько я понимаю, это связано со способом обработки пакетов. if_bridge(4)
некоторые из них рассматриваются в разделе о фильтрации.
Это не решило, а скорее обошло проблему:
Я назначил igb0
на хосте все IP-адреса с /32
network-mask вместо виртуальных машин и назначил bridge0 частный IP 10.0.0.1/24
, то vtnet0
интерфейс в виртуальной машине назначается 10.0.0.2
со шлюзом по умолчанию 10.0.0.1
и я создаю binat, используя pf.
В 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
.