У меня есть хост-компьютер с Debian 10 и QEMU-KVM. Я установил пакеты и перезагрузил:
sudo apt install qemu-kvm virt-manager
sudo reboot
Итак, теперь я хочу создать мост, который позволит моим виртуальным серверам (а) подключаться к сети и (б) быть видимым на хост-машине и другие компьютеры в сети.
Я прочитал десятки учебных пособий о том, как это сделать, и каждый раз терпел неудачу. У меня был некоторый успех при настройке моста с (а) пакетом iproute2
и (б) пакетом virt-manager
(запускался как суперпользователь) .
Попытка как root:
Следуя указаниям archwiki Я установил свой мост с помощью этих команд:
sudo ip link add virtual_bridge type bridge
sudo ip link set dev virtual_bridge up
Затем я сбросил карту ethe rnet и подключил ее к мосту как ведомый:
sudo ip link set dev enx24f5a2f17b27 down
sudo ip addr flush dev enx24f5a2f17b27
sudo ip link set dev enx24f5a2f17b27 up
sudo ip link set dev enx24f5a2f17b27 master virtual_bridge
А затем я открываю приложение GUI:
sudo virt-manager
Я щелкаю правой кнопкой мыши по сеансу QEMU / KVM (qemu:///system
) и выбираю подключение:
Когда сеанс подключен, я начинаю создавать новую виртуальную машину. При его создании я захожу в окно с просьбой выбрать тип виртуальной сети. Есть два варианта. Первый имеет подопции, а второй включает ручной ввод устройства:
Я попытался выбрать подопции, предлагаемые первым вариантом, но при выборе они выдают предупреждение:
В большинстве конфигураций macvtap не работает для связи хост-сеть с гостем
Это не вариант для меня, потому что моим виртуальным серверам потребуется двусторонняя связь. Вот почему я выбираю второй вариант и вручную указываю свой мост virtual_bridge
:
Затем запускаю виртуальную машину, которая может просматривать rnet а также может хост-машина. Оба назначаются IP в одной сети . Но когда я пытаюсь пинговать их, пинг не работает ни в каком направлении. Хост, не может пропинговать виртуальную машину и наоборот.
Я не могу этого объяснить, потому что archwiki утверждает, что Мост должен быть прозрачным, как коммутатор, и поэтому устройства должны иметь возможность пинговать друг друга:
Мост - это часть программного обеспечения, используемая для объединения двух или более сегментов сети. Мост ведет себя как виртуальный сетевой коммутатор, работая прозрачно (другие машины не должны знать или заботиться о его существовании).
Если я проверяю настройки inte rnet на хосте:
ziga@ziga-laptop:~$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: wlp3s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether c4:85:08:3c:1a:59 brd ff:ff:ff:ff:ff:ff
3: enx24f5a2f17b27: <BROADCAST,MULTICAST,DYNAMIC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master virtual_bridge state UP group default qlen 1000
link/ether 24:f5:a2:f1:7b:27 brd ff:ff:ff:ff:ff:ff
inet 192.168.64.100/24 brd 192.168.64.255 scope global enx24f5a2f17b27
valid_lft forever preferred_lft forever
inet6 fe80::26f5:a2ff:fef1:7b27/64 scope link
valid_lft forever preferred_lft forever
32: virtual_bridge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 24:f5:a2:f1:7b:27 brd ff:ff:ff:ff:ff:ff
inet6 fe80::26f5:a2ff:fef1:7b27/64 scope link
valid_lft forever preferred_lft forever
34: vnet0: <BROADCAST,MULTICAST,DYNAMIC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master virtual_bridge state UNKNOWN group default qlen 1000
link/ether fe:54:00:c4:3e:62 brd ff:ff:ff:ff:ff:ff
inet 169.254.82.75/16 brd 169.254.255.255 scope global vnet0
valid_lft forever preferred_lft forever
inet6 fe80::2c93:eff:fea5:c52b/64 scope link
valid_lft forever preferred_lft forever
Исходя из вышеизложенного, я могу подтвердить, что мой интерфейс rnet enx24f5a2f17b27
и vnet0
(который был автоматически создан виртуальной машиной) оба являются подчиненными для virtual_bridge
* (обратите внимание на ключевые слова master virtual_bridge
) *.
Если честно, я ожидал, что приложение GUI также создаст устройство TAP, но оно только создало vnet0
... Это на самом деле устройство TAP?
Как я могу установить двустороннее соединение?
Попытка обычного пользователя (без моста):
Я удалил virtual_bridge
и virtual_tap
, чтобы все вернулось к норме.
ziga@ziga-laptop:~$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: wlp3s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether c4:85:08:3c:1a:59 brd ff:ff:ff:ff:ff:ff
3: enx24f5a2f17b27: <BROADCAST,MULTICAST,DYNAMIC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 24:f5:a2:f1:7b:27 brd ff:ff:ff:ff:ff:ff
inet 192.168.64.100/24 brd 192.168.64.255 scope global enx24f5a2f17b27
valid_lft forever preferred_lft forever
inet6 fe80::26f5:a2ff:fef1:7b27/64 scope link
valid_lft forever preferred_lft forever
Я заметил, что если я начну virt-manager
с sudo
и использую qcow2
image, то это изображение станет принадлежать root
и станет частью группы root
. Это было частью моей проблемы, поэтому я избегал использовать virt-manager
как обычный пользователь. Поэтому я исправил это и запустил virt-manager
как обычный пользователь.
Я создал идентичную виртуальную машину, но при появлении окна сети у нее были другие параметры (!) :
- Работа в сети пользователя
- Укажите имя общего устройства
Мне не удалось вручную указать мой интерфейс enx24f5a2f17b27
со вторым параметром, поэтому я выбрал сеть в пользовательском пространстве.
Затем я запустил виртуальную машину, которая может просматривать inte rnet, а также может хост-машину. Оба назначаются IP , который в целом отличается . Когда я пытаюсь пинговать их, пинг не работает ни в каком направлении. Хост, не может пропинговать виртуальную машину и наоборот.
Попытка обычного пользователя (с мостом)
Так что теперь Сначала я настроил свой мост точно так же, как и в своей первой попытке, как sudo user
:
IP-ссылка sudo добавить мост типа virtual_bridge Набор IP-ссылок sudo dev виртуальный_бридж адрес гриппа sh dev enx24f5a2f17b27 набор ip-ссылок sudo dev enx24f5a2f17b27 up набор ip-ссылок sudo dev enx24f5a2f17b27 master virtual_bridge
, поэтому у меня есть:
ziga@ziga-laptop:~$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: wlp3s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether c4:85:08:3c:1a:59 brd ff:ff:ff:ff:ff:ff
3: enx24f5a2f17b27: <BROADCAST,MULTICAST,DYNAMIC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master virtual_bridge state UP group default qlen 1000
link/ether 24:f5:a2:f1:7b:27 brd ff:ff:ff:ff:ff:ff
inet 192.168.64.100/24 brd 192.168.64.255 scope global enx24f5a2f17b27
valid_lft forever preferred_lft forever
inet6 fe80::26f5:a2ff:fef1:7b27/64 scope link
valid_lft forever preferred_lft forever
11: virtual_bridge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 24:f5:a2:f1:7b:27 brd ff:ff:ff:ff:ff:ff
inet6 fe80::805f:cfff:feb6:ec91/64 scope link
valid_lft forever preferred_lft forever
я запустил virt-manager
как обычный пользователь и создал одинаковую виртуальную машину. Когда появляется окно сети, оно имеет те же опции, что и раньше:
- Сетевое пространство пользователя
- Укажите имя общего устройства
Мне не удалось указать свой мост virtual_bridge
вручную со вторым параметром, поскольку Qemu сообщает о внутреннем ошибке: