Episode ini membedah jaringan LXC: bridge default lxcbr0 dengan NAT, pasangan veth yang menghubungkan container ke bridge, konfigurasi di /etc/lxc/default.conf dan lxc-usernet, mode network none/veth/macvlan/ phys, serta pengaturan IP statis atau DHCP.

Container bisa saja hidup tanpa jaringan, tapi container yang berguna hampir selalu butuh bicara dengan dunia luar. Di episode 6 kita membedah stack networking LXC: bridge lxcbr0 dengan NAT, pasangan veth yang menghubungkan container ke bridge, mode-mode network, dan cara memberi IP statis maupun DHCP. Ini adalah episode yang paling sering jadi sumber kebingungan di homelab — jadi kita bahas sampai tuntas.
Secara default, LXC membuat bridge lxcbr0 di host — biasanya di jaringan 10.0.3.0/24. Bridge adalah "switch virtual": semua container yang menempel padanya bisa saling bicara, dan lalu lintas ke luar diteruskan oleh host.
ip addr show lxcbr0Setiap container mendapat satu veth pair: sepasang antarmuka virtual yang saling terhubung seperti ujung kabel. Satu ujung berada di dalam container (eth0), ujung lainnya menempel di bridge (vethXYZ). Ini cara LXC memberi container network namespace-nya sendiri (ingat konsep episode 2).
Lalu lintas keluar dari lxcbr0 ke jaringan luar di-NAT oleh host lewat iptables/nftables. Ini berarti container bisa keluar ke internet, tetapi dari luar, container tidak bisa diakses langsung — kecuali kalian menambahkan port forwarding (misal DNAT dari port host ke IP container).
File /etc/lxc/default.conf menentukan pengaturan network yang dipakai setiap container baru. Isi tipikal pada instalasi Ubuntu:
lxc.net.0.type = veth
lxc.net.0.link = lxcbr0
lxc.net.0.flags = up
lxc.net.0.hwaddr = 00:16:3e:xx:xx:xxtype = veth — memakai pasangan veth.link = lxcbr0 — ujung host menempel ke bridge lxcbr0.flags = up — antarmuka langsung diaktifkan saat container start.hwaddr — MAC address (bisa diisi per-container untuk stabilitas DHCP lease).Untuk container unprivileged (yang tidak berhak membuat bridge di host), file /etc/lxc/lxc-usernet memberi izin kepada user biasa untuk membuat antarmuka jaringan:
# <user> <type> <link> <parent bridge> <count>
devnull veth lxcbr0 10Baris di atas mengizinkan user devnull membuat hingga 10 veth yang menempel ke lxcbr0. Tanpa entri ini, user non-root tidak bisa menjalankan container unprivileged dengan jaringan veth.
Warning
Gejala klasik: lxc-start gagal dengan error "Permission denied" atau "lxc-usernet: Operation not permitted". Penyebab paling umum adalah lxc-usernet tidak memiliki entri untuk user kalian. Perbaiki file tersebut lalu retry start.
LXC mendukung empat mode dasar:
none — container tanpa antarmuka sama sekali. Cocok untuk workload offline yang benar-benar terisolasi.veth — pasangan veth ke bridge; mode paling fleksibel dan paling umum.macvlan — antarmuka dengan MAC sendiri yang menempel langsung ke interface fisik (misal eth0). Container terlihat seperti device fisik di jaringan LAN. Perlu diingat: macvlan tidak bisa berkomunikasi dua arah dengan host pemiliknya secara langsung.phys — antarmuka fisik host diserahkan penuh ke container (passthrough). Hanya satu container yang bisa memakai satu NIC fisik pada satu waktu.Mode dipilih lewat lxc.net.0.type di config container:
lxc.net.0.type = macvlan
lxc.net.0.link = eth0
lxc.net.0.flags = upCara paling mudah: biarkan container mengambil IP dari bridge. Pada container Ubuntu dengan systemd-networkd:
network:
version: 2
ethernets:
eth0:
dhcp4: trueUntuk IP yang stabil (dibutuhkan oleh port forwarding atau DNS), set IP statis di dalam container. Di host, config LXC bisa mendeklarasikan jaringan lewat lxc.net.0.ipv4.address:
lxc.net.0.type = veth
lxc.net.0.link = lxcbr0
lxc.net.0.flags = up
lxc.net.0.ipv4.address = 10.0.3.10
lxc.net.0.ipv4.gateway = 10.0.3.1Selalu jaga konsistensi: deklarasi di config LXC dan konfigurasi di dalam container (netplan/NetworkManager) harus menunjuk IP yang sama.
Agar container bisa diakses dari luar NAT, tambahkan DNAT di host:
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.0.3.10:80
sudo iptables -A FORWARD -p tcp -d 10.0.3.10 --dport 80 -j ACCEPTTip
Untuk unprivileged container, memakai lxc.net.0.ipv4.address dengan lxc.net.0.ipv4.gateway adalah cara paling bersih — LXC mengatur rute dan ARP secara otomatis, tanpa perlu menyentuh netplan secara manual.
ip addr di dalam container dan pastikan lxc.net.0.flags = up ada di config.Inti yang harus dibawa pulang:
lxcbr0 adalah bridge NAT default (10.0.3.0/24) untuk jaringan container.eth0 container ke bridge host./etc/lxc/default.conf menyediakan template network; /etc/lxc/lxc-usernet memberi kuota veth untuk user unprivileged.none, veth, macvlan, dan phys.Di episode 7 selanjutnya kita akan membatasi resource dengan cgroups — lxc.cgroup2.memory.max dan lxc.cgroup2.cpu.max di config container, lalu memverifikasi dengan lxc-cgroup (legacy) dan systemd-cgls di host. Inilah cara memastikan satu container tidak melahap seluruh RAM host.