Adit Rakhman
Adit Rakhman
Published on 2025-09-02 / 369 Visits
4
0

Konfigurasi OVS pada VM Libvirt

ovs flow by isiotak

Akhir-akhir ini banyak sekali tools yang berbentuk fisik diubah menjadi virtual, contohnya adalah switch dan bridge. Lalu bagaimana cara menggunakannya? Tidak usah pusing, kita sudah ada tools opensource yang namanya Open vSwitch.

Saya akan singkat penyebutan Open vSwitch menjadi OVS. Jadi OVS ini, akan saya gunakan untuk mengelola networking yang ada di dalam Server saya. Untuk pembahasan pertama ini, saya hanya akan membahas proses instalasinya saja. Perlu diketahui juga, masih banyak fungsi lainnya dari OVS, tapi akan saya bahas nanti.

Sedikit informasi, di sini saya menggunakan Distro OS Ubuntu 22.04.5 LTS.

Konfigurasi Netplan

1. Tambahkan Konfigurasi Bridge pada Netplan

Langkah pertama saya akan menambahkan konfigurasi bridge pada netplan. Kenapa netplan? Karena netplan adalah utilisasi atau utility yang dipakai sistem Ubuntu untuk mengkonfigurasi network sistem.

# Jalankan dengan user root
vim /etc/netplan/your-network-name.yaml
network:
  version: 2
  renderer: networkd
  bridges:
    vbr0:
      dhcp4: false
      addresses: [ 192.168.20.50/24 ]
      interfaces: [ enp1s0 ]
      openvswitch: {}
      nameservers:
        addresses: [ "8.8.8.8", "1.1.1.1" ]
      routes:
        - to: default
          via: 192.168.20.1

Pada parameter interfaces: [ enp1s0 ], bisa disesuaikan dengan network interface port yang ada di Server kalian. Cek dengan command ip -c a.

Jangan lupa untuk menambahkan parameter openvswitch: {}, karena berfungsi untuk memberitahu netplan jika interface vbr0 sudah dikelola oleh OVS (mencegah race condition saat terjadi reboot).

# Jalankan dengan user root
netplan apply

Perhatikan indentasi ketika menambah konfigurasi diatas. Jika muncul output warning/error setelah menjalankan command netplan apply, berarti ada salah definisi didalam file yaml-nya.

Konfigurasi OVS

1. Install OVS Package

Karena menggunakan Distro OS Ubuntu 22.04.5 LTS, saya akan menginstall package OVS dengan paket menager apt.

# Jalankan dengan user root
apt install openvswitch-common openvswitch-switch -y

2. Buat OVS Bridge

Untuk pembuatan interface bridge bisa jalankan command dibawah ini

# Jalankan dengan user root
ovs-vsctl add-br vbr0 -- add-port vbr0 enp1s0

Command di atas akan membuat interface bridge dengan nama vbr0, dan juga command tersebut akan menambahkan interface enp1s0 ke dalam bridge vbr0.

Kenapa harus menambahkan interface fisik enp1s0 ke dalam bridge vbr0?

Karena bridge vbr0 butuh akses ke jaringan luar. Jadi interfaceenp1s0 akan menghubungkan virtual switch dengan jaringan diluar Server. Sehingga paket-paket data bisa berjalan keluar Server dan juga bisa masuk ke Server atau VM-VM yang ada di dalamnya.

3. Cek Susunan Bridge dan Port

# Jalankan dengan user root
ovs-vsctl show

Output dari command di atas harusnya seperti berikut

591e6963-f420-4681-9845-ca64d069b3ea
    Bridge vbr0
        fail_mode: standalone
        Port enp1s0
            Interface enp1s0
        Port vbr0
            Interface vbr0
                type: internal
    ovs_version: "2.17.9"

Definisikan Bridge Menjadi XML

1. Buat file xml untuk bridge vbr0

Agar bridge vbr0 bisa digunakan oleh VM, saya mendefinisikan bridge tersebut ke dalam file xml. File tersebut bisa disimpan dimana saja.

# Jalankan dengan user root
cat << EOF > vbr0.xml
<network>
  <name>vbr0</name>
  <forward mode='bridge'/>
  <bridge name='vbr0'/>
  <virtualport type='openvswitch'/>
</network>
EOF

Parameter <virtualport type='openvswitch'/>, berfungsi untuk memberitahu libvirt kalau bridge vbr0 dikelola oleh OVS.

2. Define, Start, Autostart

Dalam tahapan ini saya akan mendefine, start, dan autostart interface ovs kedalam network virsh.

# Jalankan dengan user root
virsh net-define vbr0.xml --validate
# Jalankan dengan user root
virsh net-start vbr0 && virsh net-autostart vbr0 && virsh net-list --all

Hubungkan VM dengan Bridge vbr0

1. Install package libvirt yang diperlukan

# Jalakan dengan user root
apt install cpu-checker qemu-system libvirt-daemon-system virtinst libosinfo-bin -y

2. Buat VM dan hubungkan dengan Bridge vbr0

Supaya mudah ketika mengakses VM, biasanya saya membuat file user-data terlebih dahulu. Karena file ini bisa kita isi dengan username, password, IP, dan digunakan sebagai konfigurasi data pada VM yang dibuat.

Dibawah ini adalah template file user-data, bisa kalian sesuaikan sesuai kebutuhan.

# Jalankan dengan user root
cat << EOF > ovs-test-user-data
#cloud-config

# Set hostname
hostname: ovs-test

# Configure users, groups, password
users:
  - name: dodo
    hashed_passwd: dodo!@#
    shell: /bin/bash
    lock_passwd: false
    groups: sudo
    sudo: ["ALL=(ALL) NOPASSWD:ALL"]
    ssh_authorized_keys:
      - ssh-ed25519 AAAA-your-pubkey root@laboo

# Load network configuration
write_files:
  - path: /etc/netplan/99-custom-network.yaml
    content: |
      network:
        version: 2
        renderer: networkd
        ethernets:
          enp1s0:
            dhcp4: false
            addresses:
              - Bridge-vbr0-IP-segmen/24
            nameservers:
              addresses: [8.8.8.8, 1.1.1.1]
            routes:
              - to: default
                via: Bridge-vbr0-IP-gateway

# Update, upgrade, and install packages
package_upgrade: true
package_update: true
packages:
- vim
- net-tools
- curl

runcmd:
  - chmod 600 /etc/netplan/99-custom-network.yaml
  - netplan apply
  - echo "AllowUsers ${vm_user}" >> /etc/ssh/sshd_config
  - sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication yes/g' /etc/ssh/sshd_config
  - systemctl restart sshd
  - systemctl restart NetworkManager
  - cloud-init status --wait
EOF

Selanjutnya buat VM, berikut spesifikasi VM yang akan buat

# Jalankan dengan user root
virt-install -q -n ovs-test \
    --memory 2048 \
    --vcpus 1 \
    --import \
    --disk path=focal-server-cloudimg-amd64.img,format=qcow2 \
    --cloud-init user-data=ovs-test-user-data \
    --osinfo detect=on,name=ubuntu20.04 \
    --network bridge=vbr0,virtualport.type=openvswitch \
    --noautoconsole;

Pada bagian network tambahkan parameter virtualport.type=openvswitch, untuk memberitahu libvirt kalau interface network VM di atas akan terhubung dengan bridge OVS

Jika VM berhasil dibuat, jalankan command ovs-vsctl show dan lihat akan ada satu port biasanya bernama vnet0(port pertama dimulai dari 0). Port tersebut terhubung dengan VM yang tadi saya buat.

# Jalankan dengan user root
ovs-vsctl show
591e6963-f420-4681-9845-ca64d069b3ea
    Bridge vbr0
        fail_mode: standalone
        Port enp1s0
            Interface enp1s0
        Port vbr0
            Interface vbr0
                type: internal
        Port vnet0
            Interface vnet0
    ovs_version: "2.17.9"

Untuk memastikan interface terpasang pada network vm, bisa jalankan command berikut.

# Jalankan dengan user root
ovs-vsctl --columns=_uuid,name,admin_state,external_ids list Interface vnet0

ovs plugged in vm

# Jalankan dengan user root
virsh dumpxml ovs-test | grep -E "8afe6b1c-1c47-4cb7-9be0-43ae13dd443d|c4b900e8-3906-4be8-afd4-8a9665bb76b8" -A 2 -B 2

vm connected with ovs

3. Cek koneksi internet di dalam VM

  • Coba install package apapun

# Jalankan dengan user root
apt install neofetch -y

test installing neofetch

neofetch installed

Bisa dilihat dari gambar di atas, saya berhasil menginstall package neofetch.

  • Coba ping google.com

ping test

Untuk pengetesan ping google.com juga berhasil.

  • Lihat paket-paket yang diterima dan dikirim dengan ifconfig enp1s0

tx rx

Dari gambar di atas, terlihat kalau VM yang saya buat berhasil mendapatkan traffic data. Buktinya bisa menerima paket dan mengirim paket.

Kesimpulan

Jika dilihat dari VM yang saya buat, VM sudah bisa mendapatkan traffic data. Berarti konfigurasi switch OVS agar bisa terhubung dengan VM Libvirt berhasil. Selanjutnya saya masih akan membahas lebih dalam tentang tools OVS. Karena masih banyak fungsi OVS yang bisa digunakan.

Tambahan dari saya ketika pembuatan VM, kalian bisa menggunakan script yang saya buat. Karena bisa mempersingkat waktu pembuatan VM. Berikut source code script-nya.

raw.githubusercontent.com/uvewexyz/create-vm-automatically/refs/heads/main/virtui.sh

Jika ada penjelasan yang kurang dari postingan ini, bisa tanyakan dan tambahkan di komentar.

Referensi

  1. Common Configuration Issues — Open vSwitch 3.6.0 documentation

  2. blog.oddbit.com/post/2021-04-17-vm-ovs-vxlan

  3. https://www.redhat.com/en/blog/libvirt-open-vswitch

  4. YAML configuration - Netplan documentation

  5. libvirt: Network XML format


Comment