Мостовая сеть для хоста 18.04 NetworkManager и гостя Netplan KVM

Цель состоит в том, чтобы гость находился в той же сети, что и хост (использовать тот же DHCP-сервер, что и хост).

Я дошел до того, что хост настраивается через внешний DHCP, гость настроен со статическим IP, они могут связываться, хост может связываться с остальной частью сети, а гость - нет.

Я следую руководству по созданию моста с помощью NetworkManager и его использованию в KVM (я также удалил все соединения Wi-Fi с хоста и мост по умолчанию с KVM):

$ nmcli con add ifname br0 type bridge con-name br0
$ nmcli con add type bridge-slave ifname enp59s0 master br0
$ nmcli con modify br0 bridge.stp no
$ nmcli con up br0
$ nmcli c
NAME                  UUID                                  TYPE      DEVICE  
br0                   39f90a3b-6090-4b4f-a9c4-76d6b980c8c4  bridge    br0     
bridge-slave-enp59s0  dd58e274-8cfa-4102-b524-fd16d96516b8  ethernet  enp59s0 
docker0               901ac863-2d2b-4351-9b81-fbc2096e398b  bridge    docker0
$ brctl show br0
bridge name  bridge id          STP enabled interfaces
br0          8000.54bf6428c24c  no          enp59s0

В ip a br0 получает IP, enp59s0 является подчиненным интерфейсом, поэтому он не показывает IP.

/tmp/br0.xml:

<network>
  <name>br0</name>
  <forward mode="bridge"/>
  <bridge name="br0" />
</network>

Настройка KVM:

$ virsh net-define /tmp/br0.xml
$ virsh net-start br0
$ virsh net-autostart br0
$ virsh net-list --all
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 br0                  active     yes           yes

Гость /etc/netplan/01-netcfg.yaml:

network:
  version: 2
  renderer: networkd
  ethernets:
    ens3:
      addresses: [192.168.5.100/24]
      gateway4: 192.168.5.254
      dhcp4: no
      dhcp6: no

Когда виртуальная машина работает, появляется vnet0 :

$ nmcli c
NAME                  UUID                                  TYPE      DEVICE  
br0                   39f90a3b-6090-4b4f-a9c4-76d6b980c8c4  bridge    br0     
bridge-slave-enp59s0  dd58e274-8cfa-4102-b524-fd16d96516b8  ethernet  enp59s0 
docker0               901ac863-2d2b-4351-9b81-fbc2096e398b  bridge    docker0 
vnet0                 1e6cdf02-8f57-4670-b6a7-b72e15151137  tun       vnet0  
$ brctl show br0
bridge name  bridge id          STP enabled interfaces
br0          8000.54bf6428c24c  no          enp59s0
                                            vnet0

В Wireshark на хосте на br0 я вижу все пакеты, которые пытаются перейти из гостевой в сеть и из сети в гостевую (я пытаюсь выполнить эхо-запрос / подключиться к внешнему серверу из гостя и / подключиться с этого внешнего сервера к гостю). Но соединения не проходят, гость не может общаться с остальной частью сети.

Похоже, проблема с мостом хоста. Что не так с мостом?

0
задан 8 July 2020 в 10:13

1 ответ

Хорошо, нужно разрешить пересылку в iptables. Сценарий /etc/NetworkManager/dispatcher.d/br0.sh:

#!/bin/bash

if [ "$1" == br0 ]; then
    case "$2" in
        up)
            /sbin/iptables -A FORWARD -i br0 -j ACCEPT
            ;;
        down)
            /sbin/iptables -D FORWARD -i br0 -j ACCEPT
            ;;
    esac
fi

Can также может добавить к нему virsh net-destroy br0 и virsh net-start br0 для повторного запуска KVM. часть.

0
ответ дан 30 July 2020 в 22:12

Другие вопросы по тегам:

Похожие вопросы: