İçeriğe geç
NetDevOps
5 dk okuma Ağ Yönetimi

NetBox IPAM ve DCIM: Ağ Envanterini Otomasyona Bağlamak

NetBox; IP adres yönetimi ile veri merkezi altyapı envanterini tek veritabanında birleştiren açık kaynak bir uygulama. Proje DigitalOcean bünyesinde iç araç olarak başladı, zamanla netbox-community çatısı altında büyüdü, bakımı bugün NetBox Labs ekibinde. Django üzerinde yazılmış, PostgreSQL ve Redis bağımlılıkları var. Kurulumundan çok kullanım şekli önemli: NetBox ağın tek doğruluk kaynağı olarak konumlanıyor ve her nesne API üzerinden erişilebilir olacak şekilde tasarlanmış.

Tek doğruluk kaynağı fikri

Ansible ile config basıyorsunuz, Terraform ile VLAN tanımlıyorsunuz, monitoring ekibi host listesi bekliyor. Bu zincirin her halkası envanter verisine ihtiyaç duyuyor ve veri bozuksa üretilen çıktı da bozuk oluyor. NetBox bu boşluğu doldurur: panel ile API aynı veriye bakar, arayüzde yaptığınız değişiklik anında endpointten okunabilir durumdadır. Her nesnede değişiklik günlüğü tutulur; kim, ne zaman, hangi alanı değiştirmiş hepsi kayıttadır. Bu yüzden bir adres tablosundan ibaret değil, otomasyonun girdi noktasıdır.

IPAM tarafı: prefix hiyerarşisi ve boş IP tahsisi

Prefixler iç içe tanımlanabiliyor. Bir /16yı container olarak işaretleyip altına /24lük çocuklar açmak mümkün. Prefix durumları arasında active, reserved, deprecated ve container değerleri var; hangi bloğun kullanımda olduğunu bu etiketlerle ayırt ediyorsunuz. Çakışan adres alanları için VRF nesnesi, route distinguisher alanıyla birlikte geliyor. VLAN ve VLAN grupları da aynı model içinde yaşadığı için hangi prefixin hangi VLANa baktığı ilişkiyle tutuluyor.

IP adresleri üzerinde de durum alanı bulunuyor: active, reserved, deprecated, DHCP, IPv6 tarafında SLAAC. Otomasyon açısından en işe yarayan detay şu: bir prefixin altındaki boş IPleri listeleyen hazır bir API yolu var. /api/ipam/prefixes/<id>/available-ips/ adresine POST attığınızda bir sonraki müsait IP tahsis edilmiş olarak dönüyor. Betik içinde boş adres arama mantığı yazmanıza gerek kalmıyor.

DCIM tarafı: raf ünitesinden kablo ucuna

Site, rack, device sıralaması merkezde. Raflarda ünite ızgarası ve rezervasyon desteği var; belirli üniteleri proje için bloke edebiliyorsunuz. Cihaz tanımı iki katmanlı: üretici ve modele bağlı device type şablonu ile o şablondan türeyen somut cihaz. Arayüzler, konsol portları, güç portları gibi bileşenler type seviyesinde tanımlanıp cihazlara yansıtılıyor. Kablo nesnesi iki uç arasında bağ kuruyor ve arayüzdeki Trace fonksiyonu patch panel üzerinden karşı uca kadar tüm yolu gösteriyor.

Bunların yanında cluster ve sanal makina modeli, WAN devreleri için provider ve circuit nesneleri, sahiplik için tenant yapısı mevcut. Bir sanal makinenin arayüzüne IP atamak, fiziksel cihaz arayüzüne atamakla aynı akış.

API iki kapılı

REST API /api/ altında tüm modelleri yansıtıyor: /api/dcim/devices/, /api/ipam/prefixes/ gibi. Kimlik doğrulama token ile; kullanıcı profilinden ürettiğiniz tokenı headera koyuyorsunuz.

curl -H "Authorization: Token <token>" \
  https://netbox.ornek.local/api/dcim/devices/?limit=100

Sayfalama limit ve offset parametreleriyle yapılıyor. Çekmeniz gereken nesne tipi çoksa /graphql/ altındaki GraphQL API tek sorguda birden fazla nesne tipini birleştirmenize izin veriyor. Monitoring ve raporlama işleri için bu ciddi zaman kazandırıyor.

pynetbox ile Python tarafından

import pynetbox

nb = pynetbox.api(
    "https://netbox.ornek.local",
    token="buraya-token"
)

for prefix in nb.ipam.prefixes.filter(status="active"):
    print(prefix.prefix)

pynetbox, REST APInin resmi Python istemcisi gibi kullanılıyor. filter çağrıları query parametresine çevriliyor, create ile yazma tarafı da aynı kolaylıkta. Betiklerinizi SoTya bağlamanın en kısa yolu bu kütüphane.

Ansible envanterini oradan devşirmek

netbox.netbox koleksiyonu iki yönlü çalışıyor. nb_inventory eklentisi NetBoxu dinamik envanter kaynağına çeviriyor:

plugin: netbox.netbox.nb_inventory
api_endpoint: https://netbox.ornek.local
token: buraya-token
group_by:
  - sites

Aynı koleksiyondaki netbox_device, netbox_prefix, netbox_ip_address gibi modüllerle ters yönde yazma da yapılabiliyor. Yani playbook hem envanteri NetBoxtan okuyup hem çıktıyı NetBoxa yazabiliyor.

Webhook, script, doğrulayıcı

Webhook tanımı Event Rules üzerinden yapılıyor; nesne tipi ve olay türü (create, update, delete) seçilip hedef URLye JSON gövde POST ediliyor. URL, header ve gövde alanlarında Jinja2 şablonu desteklendiği için giden isteğin biçimi alıcı sisteme göre uyarlanabiliyor. Custom script sistemi Python fonksiyonlarını panel içinden ve API üzerinden çalıştırıyor; envanter denetimi yapan kodu cron gibi değil NetBoxın kendisi içinde tutuyorsunuz. Custom validatorlarla kayıt anında isimlendirme kuralı ihlal edilirse kaydı reddedebiliyorsunuz. Jinja2 tabanlı export template, hemen her nesneye eklenebilen custom field ve journal kayıtları da aynı felsefenin parçaları.

Kurulum ve ekosistem

PostgreSQL ve Redis zorunlu bileşenler; Redis hem önbellek hem kuyruk işleri için kullanılıyor. Konteyner tarafını topluluğun netbox-docker deposu götürüyor. Eklenti ekosistemi geniş: netbox-dns ile zone kayıtlarını, netbox-bgp ile ASN ve session verilerini, netbox-topology-views ile cihaz bağlantı grafiklerini aynı panele taşıyabiliyorsunuz. Proje açık kaynak; kod deposu ve resmi dokümantasyonu herkese açık durumda.

NetBoxın getirisi envanteri bir kez düzgün modellemekten geçiyor. Veri disiplinini kurabilen ekipler için otomasyon zincirinin en sağlam halkası haline geliyor; kuramayanlar için ise yalın bir adres defteri olarak kalıyor.

wireguard-server-panel

WireGuard VPN sunucu paneli - İstemci yönetimi, QR kodları ve trafik istatistikleri için kendi sunucunuzda barındırılan web kullanıcı arayüzü (fork, aktif olarak geliştirilmekte)

Go

Laravel-NDFirewall

Rota Kapsamlı Laravel WAF - RCE, SQLi, XSS ve SSRF algılama özelliklerine sahip hafif bir Web Uygulaması Güvenlik Duvarı

PHP

Trustsslroot

Tek komutla çalışan özel PKI oluşturucu - Kendi kendine imzalanmış kök CA ve sertifikaları anında oluşturun

Go

node_exporter

Hafif sistem metrikleri aktarıcısı - Güvenli erişim kontrolüne sahip, Linux için durum bilgisi barındırmayan tek dosya tabanlı izleme hizmeti

Rust

ipReconary

IP keşif ve alt ağ analiz aracı - Hızlı ağ taraması ve IP istihbarat toplama

Rust

Cloudfiltred

Cloudflare IP beyaz liste güvenlik duvarı - 80/443 numaralı bağlantı noktalarını yalnızca Cloudflare IP'leriyle sınırlayarak kaynak sunucunuzu doğrudan saldırılara karşı koruyun

Rust

LoadAlertTracker

Hafif sistem yükü izleme arka plan programı - Eşik değerleri aşıldığında Telegram, Discord ve Mattermost üzerinden gerçek zamanlı uyarılar

Rust

ctCertWatch

Sertifika Şeffaflığı günlüğü izleyicisi - Kimlik avı alan adlarını, marka taklitçiliğini ve yetkisiz SSL sertifikalarını gerçek zamanlı olarak tespit edin

Rust

DDNS-FW

Dinamik DNS Güvenlik Duvarı - DDNS aracılığıyla değişen IP adreslerini takip edin ve güvenli erişim kontrolü için güvenlik duvarı kurallarını otomatik olarak güncelleyin

Rust