Доступны следующие функции:
vmm-firmware
.
Совместимость процессора может быть проверена с помощью следующей команды:
$ dmesg | egrep '(VMX/EPT|SVM/RVI)'Прежде чем продолжить, включите и запустите службу vmd(8).
# rcctl enable vmd # rcctl start vmd
install76.iso
.
# vmctl create -s 50G disk.qcow2 vmctl: qcow2 imagefile created # vmctl start -m 1G -L -i 1 -r install76.iso -d disk.qcow2 example vmctl: started vm 1 successfully, tty /dev/ttyp8 # vmctl show ID PID VCPUS MAXMEM CURMEM TTY OWNER NAME 1 72118 1 1.0G 88.1M ttyp8 root exampleЧтобы просмотреть консоль недавно созданной виртуальной машины, подключите ее к последовательной консоли:
# vmctl console example Connected to /dev/ttyp8 (speed 115200)Escape sequence
~.
необходима, если требуется
выйти из последовательной консоли.
Для получения дополнительной информации см. справочную страницу
cu(1).
При использовании последовательной консоли
vmctl
через SSH, символ ~ (тильда)
должен быть экранирован, чтобы
ssh(1)
не прервал соединение. Чтобы выйти из последовательной
консоли через SSH, используйте ~~..
Остановить виртуальную машину можно при помощи vmctl(8).
# vmctl stop example stopping vm: requested to shutdown vm 1Виртуальные машины могут быть запущены с файлом vm.conf(5) или без него. Следующий пример
/etc/vm.conf
будет дублировать
вышеуказанную конфигурацию:
vm "example" { memory 1G enable disk /home/user/disk.qcow2 local interface }Некоторые свойства конфигурации в vm.conf(5) могут быть перезагружены vmd(8) на лету. Другие изменения, такие как настройка объема RAM или дискового пространства, требуют перезагрузки виртуальной машины.
В приведенных ниже примерах будут указаны различные диапазоны адресов IPv4 для разных вариантов использования:
10.0.0.0/8
, 172.16.0.0/12
и 192.168.0.0/16
, которые не являются глобально
маршрутизируемыми.100.64.0.0/10
.
Использование флага -L
vmctl(8)
создает локальный интерфейс в гостевой системе, который
будет получать адрес от vmd через DHCP.
По сути, это создает два интерфейса: один для хоста,
а другой для виртуальной машины.
Следующая строка в /etc/pf.conf
включит
NAT сетевых адресов и
перенаправит DNS-запросы на указанный сервер:
match out on egress from 100.64.0.0/10 to any nat-to (egress) pass in proto { udp tcp } from 100.64.0.0/10 to any port domain \ rdr-to $dns_server port domainПерезагрузите набор правил pf, и виртуальные машины могут подключаться к Интернету.
Создайте интерфейс vport0
, который будет
иметь частный IPv4-адрес, как определено выше. В этом примере
мы будем использовать подсеть 10.0.0.0/8
.
# cat <<END > /etc/hostname.vport0 inet 10.0.0.1 255.255.255.0 up END # sh /etc/netstart vport0Создайте интерфейс
veb0
при помощи vport0
в качестве порта моста:
# cat <<END > /etc/hostname.veb0 add vport0 up END # sh /etc/netstart veb0Убедитесь, что NAT настроен правильно, если гостям в виртуальной сети нужен доступ за пределами физической машины. Скорректированная строка NAT в
/etc/pf.conf
может выглядеть так:
match out on egress from vport0:network to any nat-to (egress)Следующие строки в vm.conf(5) могут использоваться для определения виртуального коммутатора:
switch "my_switch" { interface veb0 } vm "my_vm" { ... interface { switch "my_switch" } }
my_vm
гостевой системе my_vm теперь можно
назначить vio0
адрес в сети 10.0.0.0/24
и установить маршрут по умолчанию 10.0.0.1
.
Для удобства вы можете настроить DHCP-сервер на
vport0
.
Сеть Ethernet будет переключаться между реальной сетью,
хостом и виртуальной машиной с помощью
veb(4).
Поскольку veb(4) отключает интерфейсы, добавленные как порты,
от стека IP, любая конфигурация IP на реальном интерфейсе должна
быть перемещена на интерфейс
vport(4),
чтобы хост мог участвовать в сети.
В этом примере em0
— это интерфейс, подключенный
к реальной сети.
Скопируйте конфигурацию интерфейса em0
для нового vport0
:
# mv /etc/hostname.em0 /etc/hostname.vport0 # echo up >> /etc/hostname.vport0 # echo up >> /etc/hostname.em0 # sh /etc/netstart em0 vport0
Создайте интерфейс veb0
и добавьте интерфейсы
em0
и vport0
:
# cat <<END > /etc/hostname.veb0 add em0 add vport0 up END # sh /etc/netstart veb0Как и в предыдущем примере, создайте или измените файл vm.conf(5), чтобы определить виртуальный коммутатор:
switch "my_switch" { interface veb0 } vm "my_vm" { ... interface { switch "my_switch" } }Гостевая
my_vm
теперь в real network, как если бы он
был физически подключен.
Примечание:
Если интерфейс хоста (em0
в приведенном выше примере)
использует автоматическую настройку адреса (например, DHCP), он может
полагаться на MAC-адрес интерфейса для назначения определенного
IP-адреса. В этом случае MAC-адрес em0
может быть
назначен vport0
, чтобы он мог использовать его в
реальной сети (real network).
Виртуальные машины могут быть подключены к реальной сети, но изолированы от хоста, путем исключения интерфейса vport в конфигурации выше.