
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.yamlnetwork:
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.1Pada parameter
interfaces: [ enp1s0 ], bisa disesuaikan dengan network interface port yang ada di Server kalian. Cek dengan commandip -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 applyPerhatikan 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 -y2. Buat OVS Bridge
Untuk pembuatan interface bridge bisa jalankan command dibawah ini
# Jalankan dengan user root
ovs-vsctl add-br vbr0 -- add-port vbr0 enp1s0Command 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 showOutput 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>
EOFParameter
<virtualport type='openvswitch'/>, berfungsi untuk memberitahu libvirt kalau bridgevbr0dikelola 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 --allHubungkan 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 -y2. 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
EOFSelanjutnya 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 show591e6963-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
# Jalankan dengan user root
virsh dumpxml ovs-test | grep -E "8afe6b1c-1c47-4cb7-9be0-43ae13dd443d|c4b900e8-3906-4be8-afd4-8a9665bb76b8" -A 2 -B 2
3. Cek koneksi internet di dalam VM
Coba install package apapun
# Jalankan dengan user root
apt install neofetch -y

Bisa dilihat dari gambar di atas, saya berhasil menginstall package neofetch.
Coba
ping google.com

Untuk pengetesan ping google.com juga berhasil.
Lihat paket-paket yang diterima dan dikirim dengan
ifconfig enp1s0

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.