Beberapa waktu lalu sysadmin mengalami kejadian yang cukup menjengkelkan. Di Ubuntu Desktop 24.04 saya sudah berjalan normal sebuah LXD container yang di dalamnya menjalankan AdGuard Home DNS. Semuanya lancar — browsing cepat, DNS filtering bekerja sempurna.

Namun, setelah saya menginstal Docker, tiba-tiba tidak bisa browsing. Setelah ditelusuri, ternyata masalahnya ada pada LXD container AdGuard Home DNS yang tidak lagi bisa terhubung ke internet.

Penyebab Masalah

Docker, saat diinstal dan dijalankan, akan melakukan konfigurasi otomatis pada iptables. Salah satunya adalah mengubah default policy chain FORWARD menjadi DROP.

Cek dengan:

sudo iptables -L -n

Hasilnya:

Chain FORWARD (policy DROP)

Mengapa ini jadi masalah?

Karena LXD container memerlukan kemampuan routing dan packet forwarding agar bisa mengakses internet dan berfungsi sebagai gateway DNS. Jika policy FORWARD di-set ke DROP, semua paket yang perlu diteruskan (forward) ke atau dari container akan diblokir.

Solusi Sementara: Ubah Policy FORWARD Menjadi ACCEPT

Saya coba ubah policy:

sudo iptables -P FORWARD ACCEPT

Hasilnya langsung terasa — LXD container AdGuard Home kembali terhubung ke internet, dan browsing pun lancar lagi. Sayangnya, ini hanya solusi sementara. Begitu server reboot atau Docker restart, policy akan kembali menjadi DROP.

Solusi Permanen: Cegah Docker Mengubah Policy FORWARD

Agar policy tetap ACCEPT meski server restart:

sudo apt install iptables-persistent -y
sudo iptables -P FORWARD ACCEPT
sudo netfilter-persistent save

Dengan ini, setiap boot, iptables akan memuat aturan terakhir yang kita simpan.

LXD dan routing memerlukan pengaturan ini:

echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

Masalahnya, setiap kali Docker start, ia bisa saja menimpa aturan ini lagi. Untuk mengakalinya, kita buat systemd override yang menjalankan perintah mengubah policy sebelum Docker benar-benar aktif.

Buat file override:

sudo systemctl edit docker.service

Isi dengan:

[Service]
ExecStartPre=/usr/sbin/iptables -P FORWARD ACCEPT

Reload dan restart Docker:

sudo systemctl daemon-reexec
sudo systemctl restart docker

Ringkasan

  • Masalah: Setelah instal Docker di Ubuntu 24.04, LXD container (AdGuard Home DNS) kehilangan akses internet karena policy FORWARD iptables berubah menjadi DROP.
  • Penyebab: Docker secara otomatis mengubah konfigurasi iptables untuk keamanan default.
  • Solusi permanen: Gunakan iptables-persistent dan systemd override agar policy FORWARD selalu ACCEPT.

Dengan pengaturan ini, LXD container akan tetap bisa berfungsi sebagai DNS gateway meski Docker diinstal dan dijalankan.