Puncte:1

Cum se configurează un hypervisor astfel încât o mașină virtuală KVM/QEMU să poată ajunge la gazde conectate la aceeași punte trunk?

drapel au

1 Problemă

Scopul meu este ca tot traficul LAN să fie direcționat printr-o mașină virtuală (VM) care acționează ca router și firewall. Alte VM de pe același hypervisor ar trebui să fie, de asemenea, direcționate prin firewall-ul VM. Vezi următoarele schiță de rețea. Gazdele fizice conectate la podul trunk se pot ping reciproc cu succes, dar VM-urile nu au putut fi încă contactate.

2 Detalii

Configurarea rețelei pe hypervisor:

# =======
# Poduri
# =======
# ---------------------
# VLAN bridge br-vlan-3
# ---------------------
link ip adăugați nume br-vlan-3 tip pod
ip addr add 10.66.3.11/24 dev br-vlan-3
IP link set dev br-vlan-3 up

# ---------------------
# Trunk bridge Upstream
# ---------------------
link ip adăugare nume br-trunk-up tip punte vlan_filtering 1 vlan_default_pvid 0
IP link set br-trunk-up up

# ---------------
# Trunk bridge VM
# ---------------
link ip adăugați nume br-trunk-vm tip pod vlan_filtering 1 vlan_default_pvid 0
legătura ip setată br-trunk-vm sus

# =====
# Gazde
# =====

# Configurați dispozitivele fizice
link-ul ip a setat enp5s0
link-ul ip a setat enp9s0f0
link-ul ip a setat enp9s0f1
link-ul ip a setat enp9s0f2
link-ul ip a setat enp9s0f3


# ----------------------
# desktop.3 br-vlan-3
# ----------------------
link ip adăugați link enp9s0f1 nume enp9s0f1.3 tip vlan id 3
set link ip dev enp9s0f1.3 master br-vlan-3
legătura ip setată enp9s0f1.3 sus

# --------------------------
# desktop.100 br-trunk-vm
# --------------------------
link ip adăugați link enp9s0f1 nume enp9s0f1.100 tip vlan id 100
set de legături ip enp9s0f1.100 master br-trunk-vm
link ip set enp9s0f1.100 up
bridge vlan add vid 100 dev enp9s0f1.100 master
bridge vlan add vid 100 dev br-trunk-vm self

bridge vlan add vid 100 dev fw.100 pvid 100

Harta rețelei

=======
DESKTOP
=======
localhost:utilizator ~ $ ip a
2: enp34s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP grup implicit qlen 1000
    link/ether 00:d8:61:c4:b1:af brd ff:ff:ff:ff:ff:ff
4: br-vlan-100: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue stare UP grup implicit qlen 1000
    link/ether 1a:b1:36:43:f0:e4 brd ff:ff:ff:ff:ff:ff
    inet 10.66.100.44/24 scope global br-vlan-100
       valid_lft pentru totdeauna preferred_lft pentru totdeauna
7: enp.100@enp34s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-vlan-100 state UP group default qlen 1000
    link/ether 00:d8:61:c4:b1:af brd ff:ff:ff:ff:ff:ff
    
localhost:~ # cat /proc/net/vlan/enp.100 
enp.100 VID: 100 REORDER_HDR: 1 dev->priv_flags: 1221
         total de cadre primite 0
          total de octeți primiți 0
      Broadcast/Multicast Rcvd 0

      total de cadre transmise 287
       total de octeți transmiși 53964
Dispozitiv: enp34s0
Mapări prioritare INGRESS: 0:0 1:0 2:0 3:0 4:0 5:0 6:0 7:0
 Mapări prioritare EGRESS: 


==========
HIPERVIZITOR
==========
numele podului ID pod Interfețe activate STP
br-vlan-100 8000.1ab13643f0e4 nu enp.100

[root@fedora system]# ip a  
4: enp9s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq stare UP grup implicit qlen 1000
    link/ether a0:36:9f:5d:09:19 brd ff:ff:ff:ff:ff:ff
13: br-trunk-vm: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue stare UP grup implicit qlen 1000
    link/ether 56:7e:22:6a:23:2d brd ff:ff:ff:ff:ff:ff
16: enp9s0f1.100@enp9s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-trunk-vm state UP group default qlen 1000
    link/ether a0:36:9f:5d:09:19 brd ff:ff:ff:ff:ff:ff
21: fw.100: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-trunk-vm state UNKNOWN group default qlen 1000
    link/ether fe:54:00:3e:97:72 brd ff:ff:ff:ff:ff:ff
    
    
[root@fedora system]# brctl show dev br-trunk-vm
numele podului ID pod Interfețe activate STP
br-trunk-vm 8000.567e226a232d nu enp9s0f1.100
                                                        fw.100
                                                        fw.103
                                                        fw.3


================
MAȘINĂ VIRTUALĂ 
================                                                                    
[root@fedora system]# bridge vlan show
port vlan-id  
br-trunk-vm 100
enp9s0f1.100 100
virbr0 1 Ieșire PVID Neetichetat
fw.100 100 PVID Ieșire Neetichetat


2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:3e:97:72 brd ff:ff:ff:ff:ff:ff
    inet 10.66.100.10/24 scope global enp1s0
       valid_lft pentru totdeauna preferred_lft pentru totdeauna

Configurarea rețelei XML Libvirt a mașinii virtuale firewall:

<interface type='bridge'>
  <mac address='52:54:00:3e:97:72'/>
  <source bridge='br-trunk-vm'/>
  <target dev='fw.100'/>
  <model type='virtio'/>
  <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>

3 încercări

Am încercat să configurez atât un NIC etichetat, cât și cel neetichetat pe VM-ul firewall. Pentru NIC-ul etichetat am creat o punte VLAN pe VM-ul firewall și am creat un dispozitiv de atingere virtuală din robinetul virtual fw.100 cu VLAN 100: [email protected]. Apoi am setat portul portbagajului [email protected] a stăpânii: bridge vlan add vid 100 dev [email protected] master. Pentru abordarea NIC neetichetat, nu am configurat niciun VLAN pe VM-ul firewall și am setat portul trunk la PVID 100 neetichetat bridge vlan add vid 100 dev fw.100 pvid 100 neetichetat. În ambele cazuri, nu am putut face ping între gazda desktop și VM-ul firewall.

Această problemă se întâmplă numai cu mașina virtuală libvirt KVM/QEMU. Două gazde fizice etichetate VLAN conectate la podul trunk al hipervizorului, deoarece masterul poate ping reciproc.

4 Actualizare

Se pare că libvirt nu acceptă poduri Linux cu VLAN-uri. Conform articolului următor, VLAN-ul VM nu mai funcționează dacă există un al doilea dispozitiv virtual pe hypervisor cu același VLAN: https://alesnosek.com/blog/2015/09/07/bridging-vlan-trunk-to-the-guest/

Alternativ, openvswitch poate fi utilizat, dar utilizarea unei punți pentru fiecare VM și gazdă fizică este o abordare mai bună. Hypervisorul permite apoi redirecționarea punților VM-urilor și gazdelor către puntea VM-ului firewall, iar rutarea rămasă se face apoi în interiorul VM-ului firewall-ului.

Nikita Kipriyanov avatar
drapel za
Da, libvirt nu acceptă setarea vlan-urilor pentru VM-urile cu bridge Linux vlan-aware. Sa le fie rusine. Cel mai bun lucru pe care îl puteți face este să configurați manual VLAN-uri pe porturile de punte virtuale care aparțin mașinilor virtuale cu utilitarul `bridge` după ce VM-ul este pornit.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.