π 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.shIsi:
#!/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 upBerikan permission:
chmod +x /usr/local/bin/ipvlan-setup.shπ§ Step 3 β Buat Systemd Service
Buat file:
nano /etc/systemd/system/ipvlan.serviceIsi:
[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 ipvlan0Output yang diharapkan:
ipvlan0: ...
inet 10.21.2.60/16π§ͺ Testing
Misalnya container:
docker run -d \
--network myipvlan \
--ip 10.21.2.100 \
nginxTest 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, bisa:
β
Akses container dari host
β
Tetap menggunakan ipvlan
β
Konfigurasi tetap setelah reboot
Happy hacking π