Membangun jaringan VM dari nol: user-mode networking dengan SLIRP dan port forwarding hostfwd untuk akses keluar, lalu tap device dan Linux bridge agar VM bisa tampil di LAN seperti mesin fisik

VM yang tidak punya jaringan tidak berguna di dunia nyata — kalian tidak bisa ssh, tidak bisa install paket, dan tidak bisa menjalankan layanan. Episode 7 ini membahas dua cara paling dasar menghubungkan VM ke dunia: user-mode networking (cepat, tanpa setup, NAT di dalam QEMU) dan tap + bridge (VM tampil langsung di LAN seperti mesin fisik).
Pahami perbedaan mental modelnya sejak awal: user-mode menempatkan VM di belakang NAT internal QEMU, sedangkan tap/bridge memberi VM antarmuka nyata di bridge Linux. Pemilihan di sini menentukan seluruh strategi jaringan di episode 16.
Cara paling sederhana: QEMU menyediakan jaringan NAT bawaan tanpa konfigurasi host:
qemu-system-x86_64 \
-machine q35 -accel kvm -m 2048 -smp 2 \
-drive file=ubuntu-vm.qcow2,format=qcow2,if=virtio \
-netdev user,id=net0 \
-device virtio-net-pci,netdev=net0Secara default, guest mendapat IP 10.0.2.15, gateway 10.0.2.2, dan DNS 10.0.2.3. Semua keluar lewat NAT ke antarmuka host — VM bisa internet, tapi tidak bisa diakses dari luar (kecuali port forwarding).
Untuk mengakses layanan di dalam VM dari host, forward port:
qemu-system-x86_64 \
-netdev user,id=net0,hostfwd=tcp:127.0.0.1:2222-:22 \
-device virtio-net-pci,netdev=net0Sekarang ssh -p 2222 user@127.0.0.1 di host meneruskan ke SSH guest. Bisa juga forward port web:
-netdev user,id=net0,hostfwd=tcp::8080-:80Kelebihan user-mode: tanpa root, tanpa konfigurasi bridge, aman secara default. Kekurangannya: tidak bisa menerima koneksi masuk (selain yang di-forward), latency lebih tinggi, dan kinerja menurun pada traffic besar.
Untuk VM yang harus tampil sebagai host LAN normal, gunakan tap device yang dihubungkan ke bridge.
Buat bridge br0 dan hubungkan NIC fisik host ke sana (persisten lewat netplan/NetworkManager di produksi; untuk lab pakai perintah langsung):
sudo ip link add name br0 type bridge
sudo ip link set br0 up
sudo ip addr add 192.168.50.1/24 dev br0Jalankan QEMU dengan -netdev tap:
sudo qemu-system-x86_64 \
-machine q35 -accel kvm -m 2048 -smp 2 \
-drive file=ubuntu-vm.qcow2,format=qcow2,if=virtio \
-netdev tap,id=net0,br=br0 \
-device virtio-net-pci,netdev=net0QEMU membuat tap0, menambahkannya ke br0, dan guest terhubung langsung ke bridge. Sekarang guest mendapat IP dari DHCP di jaringan kalian (atau static) dan dapat diakses dari mesin lain — persis seperti mesin fisik.
Warning
Membuat tap dan menambahkannya ke bridge membutuhkan privilege. Tanpa sudo, QEMU gagal dengan permission denied. Di produksi, pakai libvirt yang menangani ini lewat policykit — kita bahas di episode 9.
Di host, periksa bridge:
ip link show br0
brctl show br0 # atau: bridge link showbrctl show harus menampilkan tap0 sebagai anggota br0. Di guest, cek IP dan akses:
ip addr show
ping -c 3 8.8.8.8| Kebutuhan | Mode |
|---|---|
| Lab cepat, VM butuh internet saja | user-mode (-netdev user) |
| VM diakses dari LAN sebagai host nyata | tap + bridge (br0) |
| Isolasi multi-tenant antar VM | bridge per-tenant + VLAN (episode 16) |
| Performa network maksimal | macvtap / vhost-net (episode 12 & 16) |
br0.hostfwd: guest dengan user-mode tidak bisa diakses dari luar tanpa forward.Pada episode 7 ini, kalian telah membangun dua model jaringan VM paling dasar.
Inti yang harus dibawa pulang:
-netdev user) = NAT internal QEMU; cepat setup, keluar bebas, masuk lewat hostfwd.sudo dan bridge Linux (br0).brctl show/ip link show untuk memverifikasi anggota bridge.Di episode 8 selanjutnya, kita akan menguasai QEMU Monitor & Console — HMP (-monitor stdio) dengan perintah info, savevm, system_reset, dan quit, plus mode akses VNC/SPICE, serial console, dan -nographic untuk server tanpa GUI. Sampai jumpa di episode 8!