Skip to main content
  1. Posts/

Implementasi VLAN Trunking di KVM/Libvirt

·2 mins·
libvirt libvirt kvm
Table of Contents

VLAN Trunking berarti satu interface (fisik atau virtual) membawa banyak VLAN sekaligus. VM kemudian dapat:

  • menerima semua VLAN (trunk)
  • atau hanya satu VLAN tertentu (access VLAN)

Di Linux bridge, ini dilakukan dengan VLAN filtering. Di OVS, VLAN trunking bahkan lebih fleksibel.

Konfigurasi Host (Linux Bridge VLAN Filtering)
#

Misal NIC fisik = enp3s0

Konfigurasi netplan dengan VLAN-filtering.

network:
  version: 2
  ethernets:
    enp3s0:
      dhcp4: no

  bridges:
    br0:
      interfaces: [enp3s0]
      parameters:
        vlan-filtering: true
      dhcp4: no

Terapkan:

netplan apply

Sekarang br0 adalah trunk port.

Tambahkan VLAN yang akan dibawa oleh Bridge
#

Misalnya bridge ingin membawa VLAN:

  • VLAN 10
  • VLAN 20
  • VLAN 30
bridge vlan add dev br0 vid 10
bridge vlan add dev br0 vid 20
bridge vlan add dev br0 vid 30

Tambahkan juga ke interface fisik:

bridge vlan add dev enp3s0 vid 10
bridge vlan add dev enp3s0 vid 20
bridge vlan add dev enp3s0 vid 30

Kini NIC dan bridge adalah full trunk.

Virtual Network Libvirt Mode Bridge (Trunk)
#

File: vlan-trunk.xml

<network>
  <name>vlan-trunk</name>
  <forward mode='bridge'/>
  <bridge name='br0'/>

  <!-- Portgroup ini untuk VM yang ingin menerima banyak VLAN (trunk) -->
  <portgroup name='trunk' default='yes'>
    <vlan trunk='yes'>
      <tag id='10'/>
      <tag id='20'/>
      <tag id='30'/>
    </vlan>
  </portgroup>

  <!-- Portgroup access VLAN -->
  <portgroup name='vlan10'>
    <vlan>
      <tag id='10'/>
    </vlan>
  </portgroup>

  <portgroup name='vlan20'>
    <vlan>
      <tag id='20'/>
    </vlan>
  </portgroup>

  <portgroup name='vlan30'>
    <vlan>
      <tag id='30'/>
    </vlan>
  </portgroup>
</network>

Apply:

virsh net-define vlan-trunk.xml
virsh net-start vlan-trunk
virsh net-autostart vlan-trunk

Menyetel NIC VM (domain XML)
#

Ada dua tipe konfigurasi:

  • Trunk = VM membawa banyak VLAN
  • Access = VM hanya pada 1 VLAN

VM sebagai Trunk (menerima banyak VLAN)
#

VM akan menerima tagged VLAN (802.1Q). Biasanya OS guest perlu membuat interface VLAN sendiri (misal eth0.10, eth0.20).

<interface type='network'>
  <source network='vlan-trunk' portgroup='trunk'/>
  <model type='virtio'/>
</interface>

Di dalam VM (Linux):

ip link add link eth0 name eth0.10 type vlan id 10
ip link add link eth0 name eth0.20 type vlan id 20
ip link add link eth0 name eth0.30 type vlan id 30

VM sebagai Access VLAN (misal VLAN 20)
#

VM mendapat VLAN 20 untagged, seolah-olah terhubung ke port switch biasa.

<interface type='network'>
  <source network='vlan-trunk' portgroup='vlan20'/>
  <model type='virtio'/>
</interface>

Tidak perlu konfigurasi VLAN di guest.

Versi Open vSwitch (Opsional — untuk Data Center)
#

OVS trunk port:
#

ovs-vsctl add-br ovs-br0
ovs-vsctl add-port ovs-br0 enp3s0

Tambahkan trunk ke VM:
#

<interface type='bridge'>
  <source bridge='ovs-br0'/>
  <virtualport type='openvswitch'/>
  <vlan trunk='yes'>
    <tag id='10'/>
    <tag id='20'/>
    <tag id='30'/>
  </vlan>
</interface>

OVS jauh lebih fleksibel untuk SDN atau jaringan besar.

Related

Jenis Storage Pool Libvirt
·2 mins
libvirt libvirt kvm
Memahami Format XML Domain Libvirt
·41 mins
libvirt libvirt kvm
Mengubah Data SMBIOS System Information di libvirt
·2 mins
libvirt libvirt kvm
Menghubungkan USB Host ke KVM Libvirt
·1 min
libvirt kvm libvirt
Using QEMU Guest Agent with libvirt
·1 min
libvirt kvm libvirt
How to Use QEMU to Emulate Storages Devices
·5 mins
libvirt kvm libvirt