A / Host (Fedora 33) с Ethernet if eth0
. ip 192.168.18.11 (/ 24)
и
B1 / Kvm-гость с if vnet0
порабощен virbr101
. ip 192.168.101.88 (/ 24) (ручная маршрутизация, статический IP-адрес)
или
B2 / Kvm-гость с if vnet1
, порабощенным для virbr102
. ip 192.168.102.210 (/ 24) (маршрутизация virt-manager, DHCP)
С конфигурацией, показанной ниже, мне кажется, что мне не хватает шага, чтобы она работала. Не знаю, как отлаживать мою настройку.
Что происходит:
Разница между B1 и B2 заключается в том, что если я пингую именованный сервер, например google.com, с B1 он говорит, что нет маршрута к хосту, с B2 он находит IP-адрес, но нет ответов ping.
nmcli
+ brctl
+ nft
На хосте, virbr101
:
ip link add virbr101-mac address 52:54:41:0b:00:01 type dummy
brctl addif virbr101 virbr101-mac
файл ifcfg- virbr101
:
DEVICE=virbr101
NAME=virbr101
# Change to 'no' to disable NetworkManager for this interface.
NM_CONTROLLED=yes
ONBOOT=yes
TYPE=Bridge
DELAY=2
STP=on
IPADDR=192.168.101.1
NETMASK=255.255.255.0
Активировать этот интерфейс:
nmcli connection load /etc/sysconfig/network-scripts/ifcfg-virbr101
nmcli connection up virbr101
Включить переадресацию IP:
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.forwarding=1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding=1" >> /etc/sysctl.conf
sysctl -p
Маршрутизировать интерфейс с помощью следующих команд nft
:
delete table ip filter
add table ip filter
add chain ip filter INPUT
add chain ip filter FORWARD
add chain ip filter OUTPUT
add rule ip filter FORWARD oifname "virbr101" ip daddr 192.168.101.0/24 counter accept
add rule ip filter FORWARD iifname "virbr101" ip saddr 192.168.101.0/24 counter accept
add rule ip filter FORWARD iifname "virbr101" oifname "virbr101" counter accept
add rule ip filter FORWARD iifname "virbr101" counter reject
add rule ip filter FORWARD oifname "virbr101" counter reject
virt-manager
Сеть:
<network>
<name>bridged102</name>
<uuid>2e8d6e42-b70e-43c8-8523-02008070f03c</uuid>
<forward dev="ens3" mode="route">
<interface dev="ens3"/>
</forward>
<bridge name="virbr0" stp="on" delay="0"/>
<mac address="52:54:00:42:1d:e4"/>
<domain name="bridged102"/>
<ip address="192.168.102.1" netmask="255.255.255.0">
<dhcp>
<range start="192.168.102.128" end="192.168.102.254"/>
</dhcp>
</ip>
</network>
Гостевой интерфейс:
<interface type="network">
<mac address="52:54:00:ee:a6:67"/>
<source network="bridged102" portid="238df934-14ac-422e-bfbd-a4047a9444fb" bridge="virbr0"/>
<target dev="vnet1"/>
<model type="virtio"/>
<link state="up"/>
<alias name="net1"/>
<address type="pci" domain="0x0000" bus="0x00" slot="0x08" function="0x0"/>
</interface>
Для решения virt-manager
я следовал этому примеру: libvirt docs // Сетевой формат XML // Конфигурация маршрутизируемой сети
Чего не хватало, так это маршрутов
от различных устройств в моей локальной сети обратно к СЗ моей виртуальной машины.
Как в:
route add -net 192.168.102.0/24 gw 192.168.18.11
# Or other gateway as appropriate for the device and nw distance