Episode ini membangun networking VM: menyiapkan TAP dan bridge di host, menghubungkan NIC ke guest dengan --net tap=...,mac=...,ip=..., meng-offload data plane ke daemon vhost-user untuk performa tinggi, dan mengenal vDPA yang masih eksperimental. Kalian juga belajar menyusun multiple NIC.

Setelah storage beres di episode 6, tibalah saatnya menghubungkan VM ke dunia luar. Networking di Cloud Hypervisor dibangun di atas konsep Linux yang sudah kalian kenal — TAP device — dan diperluas dengan vhost-user untuk offload data plane serta vDPA untuk hardware virtio.
Bayangkan TAP seperti kabel virtual yang menjulur dari dalam VM ke host. Di ujung host, kabel itu bisa disambungkan ke bridge (seperti switch fisik) sehingga VM bisa bicara dengan VM lain dan dunia luar. Memahami model ini sejak awal mencegah kebingungan saat traffic VM tidak mengalir seperti yang diharapkan.
TAP adalah antarmuka L2 virtual: paket yang dikirim dari VM muncul di antarmuka ini, dan apa yang ditulis host ke TAP masuk ke VM. Cloud Hypervisor membuat TAP sendiri jika diberi nama, asalkan binary punya CAP_NET_ADMIN (episode 3):
ip link show type tapJika tidak ingin Cloud Hypervisor membuat TAP otomatis, buat manual lalu serahkan ke VMM:
sudo ip tuntap add dev ch0 mode tap user "$USER"
sudo ip link set ch0 upuser "$USER" menyerahkan kepemilikan TAP ke user kalian sehingga Cloud Hypervisor bisa memakainya tanpa root.
TAP sendiri tidak berguna tanpa rute keluar. Buat bridge, masukkan TAP dan NIC host ke dalamnya:
sudo ip link add name br0 type bridge
sudo ip link set ch0 master br0
sudo ip link set br0 upSekarang VM yang terhubung ke ch0 bisa saling bicara (melalui br0) dan ke luar (jika NIC host ikut dimasukkan dan routing diatur). Pastikan ip_forward aktif untuk lalu lintas antar-VM:
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forwardBentuk paling umum menghubungkan TAP yang sudah ada ke VM:
cloud-hypervisor \
--kernel kernel-vmlinux \
--disk path=os.raw \
--net tap=ch0,ip=192.168.100.1,mac=a8:21:95:80:35:e6 \
--cpus boot=2 \
--memory size=2Gtap=ch0: pakai TAP yang sudah dibuat.ip=192.168.100.1: alamat yang di-assign ke antarmuka TAP di sisi host.mac=a8:21:95:80:35:e6: MAC address untuk NIC guest — selalu set eksplisit agar stabil (beberapa lisensi dan DHCP mengandalkan MAC yang tetap).Jika tap tidak disebut, Cloud Hypervisor membuat TAP baru dengan nama yang ditentukan — syaratnya binary punya CAP_NET_ADMIN.
Skenario umum: satu NIC untuk manajemen, satu untuk data. Sajikan beberapa antarmuka:
cloud-hypervisor \
--kernel kernel-vmlinux \
--disk path=os.raw \
--net tap=mgmt,ip=192.168.1.1,mac=a8:21:95:80:00:01 \
--net tap=data,ip=10.0.0.1,mac=a8:21:95:80:00:02 \
--cpus boot=4 \
--memory size=4GDi dalam guest, NIC pertama muncul sebagai enp0s2, kedua sebagai enp0s3 (urutan bisa berbeda — jangan mengandalkan nama saja; gunakan MAC untuk identifikasi).
Setelah VM boot, konfigurasi IP di dalam guest (contoh dengan iproute2):
ip addr add 192.168.100.10/24 dev enp0s2
ip link set enp0s2 up
ip route add default via 192.168.100.1Untuk performa puncak, data plane bisa diserahkan ke daemon eksternal lewat vhost-user. Daemon memegang fd yang memungkinkan akses langsung ke memory guest (via shared memory), sehingga paket tidak perlu bolak-balik ke proses VMM.
vhost-user-net --socket-path /tmp/vhost-net.sock \
--netdev type=tap,id=net0,ifname=ch0 \
--socket-mem=1024Lalu sambungkan ke VM:
cloud-hypervisor \
--kernel kernel-vmlinux \
--disk path=os.raw \
--net vhost_user=true,socket=/tmp/vhost-net.sock,mac=a8:21:95:80:35:e6 \
--cpus boot=2 \
--memory size=2GKeuntungannya: paket ditangani di daemon yang bisa dijalankan di CPU core terpisah, menurunkan latency dan memaksimalkan throughput. Biayanya: satu proses tambahan yang harus dijaga tetap hidup — jika daemon mati, NIC guest putus.
Note
vhost-user memerlukan guest memory dengan shared=on (episode 5), karena daemon perlu memetakan memory guest untuk mengakses ring buffer dan buffer packet. Tanpa itu, VM gagal start dengan error terkait memory sharing.
vDPA (vhost Data Path Acceleration) adalah teknologi yang menghubungkan hardware virtio ke VM: perangkat network fisik (seperti SmartNIC) yang mendukung virtio disajikan langsung ke guest tanpa emulasi software. Hasilnya: performa near-native dengan driver virtio standar.
Di Cloud Hypervisor, dukungan vDPA masih eksperimental. Ide kerjanya: alih-alih daemon userspace, data plane ditangani oleh perangkat keras; VMM cukup menghubungkan guest ke device vDPA host.
vdpa dev add name vdpa0 mgmtdev pci/0000:01:00.0Karena sifatnya eksperimental dan bergantung hardware spesifik, gunakan vDPA hanya setelah memverifikasi kompatibilitas di lingkungan kalian. Untuk sebagian besar kasus, TAP biasa atau vhost-user sudah cukup.
Saat traffic tidak mengalir, periksa berurutan:
ip addr show br0
ip addr show ch0
ping -c 3 192.168.100.10Jika host bisa ping guest tapi guest tidak bisa internet, periksa routing dan forwarding di host. Jika tidak ada lalu lintas sama sekali, cek status NIC di dalam guest:
ip addr show
ip link show
ethtool -k enp0s2 | headethtool -k menampilkan offload features — fitur seperti TSO/GSO yang tidak didukung bisa menyebabkan paket besar gagal melewati TAP yang tidak cocok.
Warning
Jangan pernah berbagi satu TAP untuk dua VM — setiap VM butuh antarmuka sendiri; menggabungkannya menyebabkan MAC conflict dan traffic chaos. Gunakan bridge untuk menghubungkan banyak VM, bukan berbagi TAP yang sama.
Inti yang harus dibawa pulang:
--net tap=...,mac=...,ip=... menghubungkan NIC guest ke TAP host.shared=on.Di episode 8 selanjutnya kita akan membahas hotplug: CPU, memory, dan device — menambah vCPU dan RAM secara live dengan --cpus hotplug dan ACPI, refleksinya di guest, serta device passthrough dengan VFIO untuk GPU dan perangkat lain, termasuk vfio-user yang masih eksperimental. VM kalian mulai bisa "tumbuh" tanpa restart.