← Tüm çalışmalar Proje

CERES: Otomatik WireGuard IP ve DNS Broker

14 Temmuz 2026

Flask WireGuard SQLite BIND (DNS) systemd

CERES, büyüyen bir WireGuard tabanlı özel ağı elle yönetmek yerine kendi kendine yöneten hâle getirmek için yazdığım bir broker servisi. systemd altında sürekli çalışan bir Flask uygulaması olarak çalışıyor.

Ne yapıyor

  • Otomatik IP tahsisi: Ağa katılan cihaz türüne göre (saha panelleri, kullanıcı cihazları, admin, sunucunun kendisi) ayrı IP aralıkları tanımlı; yeni bir peer kaydolduğunda uygun aralıktan boşta olan bir IP otomatik seçiliyor.
  • WireGuard peer yönetimi: Yeni peer'ler wg0.conf dosyasına otomatik ekleniyor/çıkarılıyor, elle dosya düzenlemeye gerek kalmıyor.
  • Dinamik DNS: Her peer'e istenirse bir isim atanabiliyor; BIND (named) üzerinde bu isimlere karşılık gelen bir zone dosyası otomatik üretilip yeniden yükleniyor. Böylece cihazlar VPN içinde birbirine IP yerine isimle erişebiliyor.
  • Kayıt geçmişi: Her peer'in seri numarası, genel anahtarı, görünen adı, DNS ismi ve son görülme zamanı SQLite'ta tutuluyor.
  • Basit bir yönetim paneli: Kayıtlı peer'leri görüntülemek/yönetmek için hafif bir web arayüzü sunuluyor.

Sonuç olarak, sahaya yeni bir cihaz (ör. bir aydınlatma paneli) çıkarmak, sunucu tarafında elle bir şey yapmadan sadece kayıt isteği göndermesiyle oluyor — IP, VPN erişimi ve DNS kaydı otomatik tamamlanıyor.

Basit bir örnek

IP havuzundan boşta bir adres seçme fikrini özetleyen, gerçek koddan bağımsız minik bir örnek:

import ipaddress

def allocate_ip(start, end, used_ips):
    for ip in ipaddress.summarize_address_range(
            ipaddress.ip_address(start), ipaddress.ip_address(end)):
        for candidate in ip:
            if str(candidate) not in used_ips:
                return str(candidate)
    raise RuntimeError("IP havuzu doldu")