İçeriğe geç
Sahadan
Teknikİleri11 dk okuma

MikroTik Container: Router Üzerinde Pi-hole ile Reklam Engelleme

MikroTik container ile router üzerinde Pi-hole kurulumu: RouterOS docker desteği şartları, device-mode, veth ağ yapısı, DNS yönlendirme, RAM ve disk sınırları.

Erdem Özyurt

Kısa cevap: RouterOS 7’nin container özelliği, ARM, ARM64 ve x86 mimarili MikroTik cihazlarda Docker imajlarını doğrudan router üzerinde çalıştırmanıza izin verir. Bu rehberde container paketini etkinleştirip veth ve bridge ile container ağını kuruyor, Pi-hole imajını çekiyor ve tüm ağın DNS trafiğini reklam filtresinden geçiriyoruz. Ayrı bir Raspberry Pi veya sunucuya gerek kalmıyor; bedeli ise RAM, disk ömrü ve güvenlik tarafında bilmeniz gereken birkaç sınır.

Container özelliği nedir, hangi cihazlar kaldırır?

Container, RouterOS 7.4 ile gelen ve router’ın üzerinde Linux container (Docker imajı) çalıştıran ek pakettir. Yalnızca arm, arm64 ve x86 mimarilerinde desteklenir; MIPSBE, MMIPS ve SMIPS cihazlar (klasik hEX, hAP ac lite gibi) tamamen kapsam dışıdır. Cihaz seçiminde mimari kadar iki şey daha belirleyicidir: RAM miktarı ve harici disk takabilme imkânı.

Sahada Pi-hole için önerebileceğim tablo şu:

Cihaz Mimari Container Not
RB5009 ARM64 Evet 1 GB RAM + USB 3.0; ev/ofis için en dengeli seçenek
hAP ax³ ARM64 Evet 1 GB RAM + USB 3.0; Pi-hole’u rahat taşır
hAP ax² ARM64 Evet ama dikkat USB portu yok; imaj dahili flash’a yazılır, önermem
CCR2116 / CCR2216 ARM64 Evet M.2 NVMe yuvası ile container için en güçlü platform
RB4011 ARM Evet ama dikkat USB yok; dahili NAND’a kurulum flash ömrünü yer
CHR (x86) x86_64 Evet Sanal disk ile en esnek ortam; device-mode onayı soğuk reboot ister
hEX Refresh ARM (EN7562CT) Sınırlı Yalnız arm32v5 imajlar çalışır, imaj seçeneği kısıtlı
hEX (RB750Gr3), hAP lite MMIPS / SMIPS Hayır Container desteği yok

Resmi doküman harici disk için 100 MB/s ardışık okuma ve 10K rastgele IOPS öneriyor; pratikte kaliteli bir USB 3.0 flash bellek veya küçük bir SSD Pi-hole için yeterli. Hangi cihaza yatırım yapacağınıza karar veremiyorsanız model seçim rehberim genel çerçeveyi çizer. Hâlâ RouterOS 6’daysanız önce v7 geçişini tamamlamanız gerekir; container v6’da yoktur.

Container paketi nasıl kurulur ve device-mode nasıl açılır?

Container paketi ana RouterOS imajında gelmez; mikrotik.com indirme sayfasındaki “Extra packages” arşivinden cihaz mimarinize uygun container-7.x.npk dosyasını alıp Files’a yükler ve reboot edersiniz. Asıl kritik adım device-mode onayıdır: MikroTik, container’ı güvenlik gerekçesiyle varsayılan kapalı tutar ve açmak için fiziksel erişim ister.

# Paket yüklendikten ve reboot sonrası paketin göründüğünden emin olun
/system/package/print

# Container iznini aç (komut onay bekletir)
/system/device-mode/update container=yes

Komutu verdikten sonra RouterOS sizden onay ister: cihazın üzerindeki reset düğmesine kısa basmanız gerekir; x86/CHR ortamında ise soğuk yeniden başlatma (cold reboot) istenir. Onay sonrası cihaz yeniden başlar, yani bu işi bakım penceresinde yapın. Uzaktaki bir cihazda düğmeye basacak kimse yoksa bu adımı planlamadan kuruluma başlamayın; başlamadan önce export ve binary yedek almak da her zamanki gibi ön şart.

Harici diski de bu aşamada hazırlayın:

# Takılı diskleri ve slot adını gör
/disk/print

# USB diski ext4 biçimlendir (slot adı sizde farklı olabilir)
/disk/format-drive usb1 file-system=ext4

Container ağı: veth ve bridge nasıl kurulur?

Container’lar ağa veth (virtual ethernet) arayüzü üzerinden bağlanır: veth’in bir ucu container’ın içinde, diğer ucu RouterOS tarafında durur. Standart kurgu, veth’i ayrı bir bridge’e alıp bu ağa NAT uygulamaktır; böylece container LAN’dan izole ayrı bir subnet’te yaşar.

# Container'a IP'sini ve gateway'ini taşıyacak veth arayüzü
/interface/veth/add name=veth1 address=172.17.0.2/24 gateway=172.17.0.1

# Container'lara özel bridge
/interface/bridge/add name=containers

# Router bu subnet'te gateway olur
/ip/address/add address=172.17.0.1/24 interface=containers

# veth'i bridge'e bağla
/interface/bridge/port add bridge=containers interface=veth1

# Container'ın internete çıkışı için masquerade
/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.17.0.0/24

Bu beş satırın sonunda 172.17.0.2 adresi, router üzerinde yaşayan ama kendi IP’sine sahip bir “mini sunucu” gibi davranır. LAN istemcileri, forward zincirinde engelleyen bir kural yoksa bu adrese doğrudan erişebilir.

Pi-hole imajı nasıl çekilir ve başlatılır?

İmaj çekmek için registry adresini ve geçici indirme dizinini tanımlar, ortam değişkenlerini ve kalıcı mount’ları hazırlar, sonra container’ı eklersiniz. Ortam değişkenlerinde dikkat: eski rehberlerdeki WEBPASSWORD değişkeni Pi-hole v6 ile emekli oldu; güncel karşılığı FTLCONF_webserver_api_password.

# Docker Hub'ı registry olarak tanımla, indirme geçici dizini diske al
/container/config/set registry-url=https://registry-1.docker.io tmpdir=disk1/tmp

# Pi-hole ortam değişkenleri
/container/envs/add list=ENV_PIHOLE key=TZ value="Europe/Istanbul"
/container/envs/add list=ENV_PIHOLE key=FTLCONF_webserver_api_password value="GucluBirParola"
/container/envs/add list=ENV_PIHOLE key=DNSMASQ_USER value="root"

# Kalıcı veri için mount'lar (ayar ve listeler reboot'ta kaybolmasın)
/container/mounts/add list=MOUNT_PIHOLE_PIHOLE src=disk1/volumes/pihole/pihole dst=/etc/pihole
/container/mounts/add list=MOUNT_PIHOLE_DNSMASQD src=disk1/volumes/pihole/dnsmasq.d dst=/etc/dnsmasq.d

# Container'ı ekle: imaj çekilir ve diske açılır
/container/add remote-image=pihole/pihole:latest interface=veth1 \
  envlist=ENV_PIHOLE mounts=MOUNT_PIHOLE_PIHOLE,MOUNT_PIHOLE_DNSMASQD \
  root-dir=disk1/images/pihole start-on-boot=yes logging=yes

# Durumu izle: extracting -> stopped olunca hazır
/container/print

# Başlat
/container/start 0

logging=yes container çıktısını RouterOS log’una düşürür; ilk kurulumda açık tutun, sorun çözerken hayat kurtarır. pihole/pihole imajı çok mimarilidir, RouterOS cihazınıza uygun (arm64, arm, amd64) katmanı otomatik çeker. Durum running olduğunda web arayüzüne LAN’dan http://172.17.0.2/admin/ adresiyle ulaşabilirsiniz; parola, yukarıda tanımladığınız ortam değişkenidir.

DNS trafiği Pi-hole’a nasıl yönlendirilir?

En temiz yöntem, istemcilerin DNS sunucusunu değiştirmeden router’ın kendi DNS önbelleğini Pi-hole’un arkasına almaktır. İstemciler router’a sorar, router Pi-hole’a iletir, Pi-hole reklam alan adlarını keser.

# Router'ın upstream DNS'i artık Pi-hole
/ip dns set servers=172.17.0.2 allow-remote-requests=yes

# Önbellekte eski kayıt kalmasın
/ip dns cache flush

İkinci katman, DNS’i elle Google/Cloudflare’e çevirmiş cihazları ve akıllı TV’leri de filtreye sokmaktır: LAN’dan çıkan tüm 53 portu trafiğini Pi-hole’a zorlayın.

# LAN'dan dışarı giden tüm DNS sorgularını Pi-hole'a çevir
/ip firewall nat add chain=dstnat in-interface-list=LAN protocol=udp dst-port=53 \
  action=dst-nat to-addresses=172.17.0.2 comment="DNS zorla -> Pi-hole"
/ip firewall nat add chain=dstnat in-interface-list=LAN protocol=tcp dst-port=53 \
  action=dst-nat to-addresses=172.17.0.2 comment="DNS zorla -> Pi-hole TCP"

Döngü endişesi yersiz: Pi-hole’un kendi upstream sorguları containers bridge’inden çıkar, LAN listesinde olmadığı için bu kurala takılmaz. Test için bir istemcide nslookup doubleclick.net çalıştırın; cevap 0.0.0.0 dönüyorsa filtre devrededir. DoH/DoT kullanan cihazlar (443/853 üzerinden şifreli DNS) bu kuralı doğal olarak atlar; onlar için Pi-hole yeterli değildir, uygulama bazlı engelleme ayrı bir konudur.

Sınırlar: RAM, disk ömrü ve güvenlik

Container özelliği güçlü ama bedava değil; router’ınız artık aynı zamanda bir sunucudur. Üç sınırı baştan kabul ederek kurun: RAM’i sınırlayın, dahili flash’a yazdırmayın ve container’ı güvenlik yüzeyinin parçası sayın.

RAM: Pi-hole FTL motoru tipik kurulumda 100-150 MB civarında yer kaplar. 1 GB RAM’li cihazda sorun değil ama router’ın asıl işi routing; container’ların toplam belleğini sınırlamak için:

/container/config/set memory-high=256M

Bu yumuşak bir limittir, aşımda container yavaşlatılır. Router’da zaten CPU/bellek sıkışıklığı yaşıyorsanız önce kaynak teşhisini yapın; yüklü bir cihaza container bindirmek sorunu büyütür.

Disk ömrü: Pi-hole sorgu günlüğü ve uzun vadeli veritabanıyla sürekli yazar. Dahili NAND flash bu yazma düzeni için tasarlanmadı; resmi doküman container verisini harici diske koymayı açıkça öneriyor. USB flash bellekte bile web arayüzünden sorgu veritabanı saklama süresini kısmak (Settings bölümünden) diskin ömrünü belirgin uzatır.

Güvenlik: MikroTik’in kendi uyarısı net; router’ınız artık container’da çalıştırdığınız şey kadar güvenlidir. Doğrulanmamış üçüncü parti imaj çalıştırmak router’a saldırı yüzeyi eklemek demektir; kötüye kullanım, container silinse bile kalıcı arka kapı bırakabilir. Karar kutusu:

Router’da mı, ayrı cihazda mı?

  • Yalnız resmi/bilinen imaj (pihole/pihole, adguard/adguardhome) + harici disk + 1 GB RAM → router’da çalıştırın, kutu israfından kurtulun.
  • Deneysel imajlar deneyecekseniz, cihaz ISP kenarında kritik görevdeyse veya RAM 512 MB ve altındaysa → ayrı bir mini PC/Pi kullanın, router router kalsın.
  • Her iki durumda da yönetim düzlemini sıkın: container, Winbox/SSH erişim güvenliği ihmalini affetmez.

Pi-hole mu AdGuard Home mu?

İkisi de aynı veth ve bridge kurgusuyla RouterOS üzerinde çalışır; fark tercih meselesidir. AdGuard Home tek binary olarak gelir, DoH/DoT şifreli upstream desteği yerleşiktir ve arayüzü daha moderndir; adguard/adguardhome imajını remote-image olarak göstermeniz yeterli. Pi-hole ise daha büyük topluluğa, daha fazla hazır engel listesine ve yılların dokümantasyonuna sahip. Sahada ilk kurulum için Pi-hole’u anlatmamın sebebi bu olgunluk; AdGuard Home’a geçmek isterseniz bu yazıdaki ağ kurulumunun tamamı aynen geçerlidir, yalnız imaj ve mount yolları değişir.

Router üzerinde container mimarisi kurmak, DNS filtrelemeyi merkezileştirmek veya mevcut MikroTik altyapınızı bu tür ek servislerle genişletmek isterseniz MikroTik destek hizmetim üzerinden ulaşabilirsiniz.

#mikrotik#routeros#container#docker#pihole#dns
Paylaş:𝕏 TwitterLinkedIn

Sıkça Sorulan Sorular

MikroTik container hangi cihazlarda çalışır?

RouterOS 7.4 ve üzeri sürümlerde, ARM, ARM64 ve x86 mimarili cihazlarda çalışır. RB5009, hAP ax serisi, CCR2xxx serisi ve CHR tipik adaylardır. MIPSBE, MMIPS ve SMIPS mimarili cihazlarda (örneğin klasik hEX, hAP lite) container desteği yoktur.

Container için USB disk şart mı?

Şart değil ama şiddetle önerilir. Dahili flash hem küçüktür hem de yazma ömrü sınırlıdır; Pi-hole sorgu günlüğü ve veritabanıyla sürekli yazma yapar. MikroTik resmi dokümanı container verisini harici diske koymayı açıkça tavsiye eder.

Pi-hole router'ın kendi DNS sorgularını da filtreler mi?

Evet, /ip dns altında sunucu olarak container IP'sini gösterirseniz router'ın kendi çözümlemesi de Pi-hole üzerinden geçer. İstemciler DNS olarak router'ı kullanmaya devam ettiği için DHCP tarafında değişiklik gerekmez.

Container çökerse internet kesilir mi?

Bağlantı kesilmez ama isim çözümleme durur, bu da pratikte internet yok demektir. start-on-boot=yes ile yeniden başlatmalarda otomatik açılmasını sağlayın ve kritik ağlarda ikincil bir DNS sunucusu tanımlı tutun.

Pi-hole yerine AdGuard Home kullanabilir miyim?

Evet, adguard/adguardhome imajı aynı veth ve bridge yapısıyla çalışır. AdGuard Home tek binary olarak gelir ve DoH/DoT şifreli upstream desteği yerleşiktir; Pi-hole ise daha büyük topluluğa ve daha köklü dokümantasyona sahiptir.

Yazan: Erdem Özyurt

Bilişim Danışmanı · ISP Altyapı · Siber Güvenlik

Kablo döşemekten kod yazmaya, ağ tasarımından web geliştirmeye; Layer 1'den Layer 7'ye bütünlük içinde çalışıyorum.

Hakkımda daha fazla →