Моя цель состоит в том, чтобы все гостевые виртуальные машины KVM отправляли и получали трафик на em2
с адресами на подсеть 192.168.2.0/24
.
У меня есть хост Linux (CentOS 7) с несколькими сетевыми адаптерами, 2 из которых используются в этом сценарии, em1
и em2
.
Интерфейс em1 имеет IP-адрес 192.168.0.131
. Интерфейс em2
был подключен к br0
, поэтому у него нет самого IP-адреса, но br0
был назначен IP-адрес 192.168 .2.1
.
Я создал маршрут на моем брандмауэре Netgear для направления трафика 192.168.2.0/24
на 192.168.2.1
, но этот адрес не отображается как подключенное устройство, как 192.168.0.131
, возможно, потому, что это виртуальный мост Linux.
С хост-виртуальной машины я могу пинговать как «мост-шлюз», так и гостевую виртуальную машину, и шлюз межсетевого экрана в Интернет:
[root@boss ~]# ping -c1 192.168.2.1
64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=0.085 ms
[root@boss ~]# ping -c1 192.168.2.10
64 bytes from 192.168.2.10: icmp_seq=1 ttl=64 time=0.476 ms
[root@boss ~]# ping -c1 192.168.0.254
64 bytes from 192.168.0.254: icmp_seq=1 ttl=64 time=4.17 ms
И с гостевой виртуальной машины я могу пинговать em1
, но не интернет-шлюз, 192.168.0.254
:
[root@localhost ~]# ping -c1 192.168.0.131
64 bytes from 192.168.0.131: icmp_seq=1 ttl=64 time=0.282 ms
[root@localhost ~]# ping -c1 192.168.0.254
PING 192.168.0.254 (192.168.0.254) 56(84) bytes of data.
--- 192.168.0.254 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
Это моя конфигурация для em2
:
DEVICE=em2
TYPE=Ethernet
ONBOOT=yes
BRIDGE=br0
И br0
:
DEVICE=br0
BOOTPROTO=none
ONBOOT=yes
TYPE=Bridge
IPADDR=192.168.2.1
PREFIX=24
GATEWAY=192.168.0.254
ZONE=public
STP=no
Моя таблица маршрутизации на хосте ВМ:
[root@boss ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.254 0.0.0.0 UG 0 0 0 em1
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 em1
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
Гостевая ВМ была запущена с помощью virt-install
:
virt-install \
--name vm-guest-1 \
--network bridge=br0 \
--virt-type kvm \
Гостевая ВМ eth0
:
DEVICE="eth0"
BOOTPROTO="none"
ONBOOT="yes"
TYPE="Ethernet"
IPADDR="192.168.2.10"
NETMASK=255.255.255.0
И догадки t Таблица маршрутизации ВМ:
[root@localhost ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.2.1 0.0.0.0 UG 0 0 0 eth0
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
В соответствии с запросом, вывод моего моста хоста:
[root@boss ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.d4ae529de039 no em2
vnet0
Вопрос / Проблема:
Как я / почему я не могу выполнить маршрутизацию в мою гостевую ВМ, или, скорее, почему не может моя гостевая ВМ выйти в интернет?
У Вас есть в основном две опции:
vnet0
и em2
соединяются мостом, таким образом, VM может достигнуть устройства Netgear без маршрутизации. Просто необходимо присвоить VM адрес в 192.168.0.0/24
или использовать DHCP. , Если необходимо направить, удалите эти em2
интерфейс от моста и присвойте ему адрес в 192.168.0.0/24
. Затем добавьте новую таблицу маршрутизации к /etc/iproute2/rt_tables
:
100 vms
Теперь добавляют правило выбора таблицы маршрутизации и маршрут по умолчанию для Вашего VMs:
ip route add default dev em2 via 192.168.0.254 table vms
ip rule add iif br0 table vms
, Кроме того, необходимо изменить статический маршрут на устройстве Netgear для указания на em2
адрес.
Редактирование : Во вторых кадрах Ethernet конфигурации от VMs не протекают в физической сети. Дополнительная таблица маршрутизации выбрана только, когда она должна направить что-то от моста br0
(т.е. виртуальные гости) и отправляет трафик до [1 111] вместо [1 112] (маршрут по умолчанию в основной таблице). Вы видите все таблицы маршрутизации сразу с:
ip route show table all
можно читать больше о таблицах маршрутизации на эти Руководство по уровню IP Администрирование сети с Linux.