VM и хост не могут пинговать друг друга через мост - PullRequest
0 голосов
/ 18 января 2020

У меня есть хост-компьютер с 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) и выбираю подключение:

enter image description here

Когда сеанс подключен, я начинаю создавать новую виртуальную машину. При его создании я захожу в окно с просьбой выбрать тип виртуальной сети. Есть два варианта. Первый имеет подопции, а второй включает ручной ввод устройства:

  • Хост-устройство enx24f5a2f17b27: macvtap

    • Мост
    • VEPA
    • Личное
    • Passthrough
  • Укажите имя общего устройства

Я попытался выбрать подопции, предлагаемые первым вариантом, но при выборе они выдают предупреждение:

В большинстве конфигураций macvtap не работает для связи хост-сеть с гостем

Это не вариант для меня, потому что моим виртуальным серверам потребуется двусторонняя связь. Вот почему я выбираю второй вариант и вручную указываю свой мост virtual_bridge:

enter image description here

Затем запускаю виртуальную машину, которая может просматривать rnet а также может хост-машина. Оба назначаются IP в одной сети . Но когда я пытаюсь пинговать их, пинг не работает ни в каком направлении. Хост, не может пропинговать виртуальную машину и наоборот.

enter image description here

Я не могу этого объяснить, потому что 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 со вторым параметром, поэтому я выбрал сеть в пользовательском пространстве.

enter image description here

Затем я запустил виртуальную машину, которая может просматривать inte rnet, а также может хост-машину. Оба назначаются IP , который в целом отличается . Когда я пытаюсь пинговать их, пинг не работает ни в каком направлении. Хост, не может пропинговать виртуальную машину и наоборот.

enter image description here

Попытка обычного пользователя (с мостом)

Так что теперь Сначала я настроил свой мост точно так же, как и в своей первой попытке, как 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 сообщает о внутреннем ошибке:

enter image description here

...