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.confdosyası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")