๐ Latar Belakang
Saat menggunakan Docker dengan driver
ipvlan, sering muncul masalah:โ Host tidak bisa mengakses container
Padahal:
- Container bisa akses jaringan luar โ
- Device lain bisa akses container โ
- Tapi host sendiri tidak bisa โ
Ini bukan bug, tapi memang behavior default dari
ipvlan.๐ง Penyebab Masalah
ipvlan bekerja di level kernel dengan isolasi network:- Container langsung attach ke parent interface (misalnya
ens192)
- Host tidak dianggap bagian dari network tersebut
- Tidak ada route internal host โ container
๐ฏ Solusi
Solusinya adalah:
โ Tambahkan interfaceipvlandi host
โ๏ธ Studi Kasus
- Interface:
ens192
- IP host:
10.21.2.50/16
- Network Docker:
10.21.0.0/16
- IP tambahan host:
10.21.2.60/16
๐ง Step 1 โ Konfigurasi Netplan (Optional)
Jika network sudah dikonfigurasi, bisa skip step ini.
Edit file: /etc/netplan/01-netcfg.yaml
network: version: 2 renderer: networkd ethernets: ens192: addresses: - 10.21.2.50/16 gateway4: 10.21.0.1 nameservers: addresses: [8.8.8.8, 1.1.1.1]
Apply:
netplan apply
โ ๏ธ Catatan Penting
Netplan tidak mendukung ipvlan secara native, jadi kita perlu workaround menggunakan script + systemd.
๐ง Step 2 โ Buat Script IPVLAN
Buat file:
nano /usr/local/bin/ipvlan-setup.sh
Isi:
#!/bin/bash ip link add ipvlan0 link ens192 type ipvlan mode l2 ip addr add 10.21.2.60/16 dev ipvlan0 ip link set ipvlan0 up
Berikan permission:
chmod +x /usr/local/bin/ipvlan-setup.sh
๐ง Step 3 โ Buat Systemd Service
Buat file:
nano /etc/systemd/system/ipvlan.service
Isi:
[Unit] Description=Setup IPVLAN interface After=network.target [Service] Type=oneshot ExecStart=/usr/local/bin/ipvlan-setup.sh RemainAfterExit=yes [Install] WantedBy=multi-user.target
๐ง Step 4 โ Enable Service
systemctl daemon-reexec systemctl daemon-reload systemctl enable ipvlan systemctl start ipvlan
๐ Verifikasi
ip addr show ipvlan0
Output yang diharapkan:
ipvlan0: ... inet 10.21.2.60/16
๐งช Testing
Misalnya container:
docker run -d \ --network myipvlan \ --ip 10.21.2.100 \ nginx
Test dari host:
ping 10.21.2.100 curl 10.21.2.100
๐ฅ Tips Tambahan
โ Hindari duplicate interface
Update script:
ip link show ipvlan0 || ip link add ipvlan0 link ens192 type ipvlan mode l2
โ Disable rp_filter (jika perlu)
sysctl -w net.ipv4.conf.all.rp_filter=0 sysctl -w net.ipv4.conf.ens192.rp_filter=0
๐ Kesimpulan
ipvlantidak mengizinkan host akses container secara default
- Solusinya adalah menambahkan interface
ipvlandi host
- Karena netplan tidak support, gunakan systemd untuk persistence
- Setup ini stabil dan cocok untuk production
๐งฉ Bonus Insight
Gunakan
ipvlan jika:- Ingin container punya IP sendiri
- Tidak ingin NAT
- Butuh performa tinggi (low overhead)
Hindari jika:
- Banyak komunikasi host โ container
- Infrastruktur kompleks (overlay, Kubernetes, dll)
โ๏ธ Penutup
Dengan setup ini, kamu bisa:
โ
Akses container dari host
โ
Tetap menggunakan ipvlan
โ
Konfigurasi tetap setelah reboot
Happy hacking ๐
