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

Nebula Mesh VPN İnceleme Ve Kurulum

Nebula mesh VPN, Slack tarafından geliştirilen ve açık kaynak olarak sunulan modern bir overlay ağ çözümüdür. Farklı konumlardaki sunucuları, masaüstü sistemleri ve mobil cihazları güvenli bir şekilde birbirine bağlayan Nebula, peer-to-peer mimarisi ile performans avantajı sağlar. Geleneksel hub-and-spoke yapıdaki VPN çözümlerinin aksine, Nebula düğümler arası doğrudan iletişim kurarak merkezi bir şişe boynu oluşmasını engeller. UDP hole-punching teknolojisi sayesinde NAT arkasındaki cihazlar bile birbirine doğrudan bağlanabilir. Sertifika tabanlı kimlik doğrulama ve yerleşik firewall özellikleri ile güvenli bir ağ katmanı oluşturur.

Nebula Avantajları

Nebula'ı diğer VPN çözümlerinden ayıran temel özellikler performans, basitlik ve güvenlik odaklı tasarımıdır. Mesh yapısında her düğüm diğer tüm düğümlerle doğrudan iletişim kurabilir, bu da gecikme süresini en aza indirir. Lighthouse keşif düğümleri sayesinde ağ topolojisi otomatik olarak yönetilir ve yeni düğümler kolayca eklenir. Nebula, UDP tabanlıdır ve düşük overhead ile yüksek performans sağlar. Tüm trafiğin şifrelenmesi ve mTLS sertifika doğrulaması güvenliği garanti eder. Linux, Windows, macOS, FreeBSD ve Docker gibi çoklu platform desteği sunar. Merkezi bir sunucu olmadığı için tek nokta hatası oluşmaz ve ölçeklenebilirlik kolaydır.

Kurulum Öncesi Hazırlık

Nebula ağını kurmak için en az bir lighthouse keşif düğümüne ihtiyacınız vardır. Lighthouse düğümü, diğer düğümlerin birbirini bulmasını sağlayan keşirme noktasıdır. Public IP adresine sahip bir sunucuda lighthouse çalıştırmak önerilir. Ayrıca Nebula overlay ağı için bir özel IP aralığı seçmelisiniz. Örneğin 10.100.100.0/24 aralığı yaygın kullanılır. Bu aralık fiziksel ağlarınızla çakışmamalıdır.

Sistem Gereksinimleri

Nebula herhangi bir modern Linux dağıtımında çalışır. amd64, arm64, arm ve 32-bit mimariler desteklenir. minimum gereksinimler düşüktür, ancak lighthouse düğümü için 1 GB RAM ve tek çekirdek işlemci yeterlidir. Root erişimi veya sudo yetkisi gerekir.

Binary Kurulumu

Nebula'nın en son sürümünü GitHub releases sayfasından indirebilirsiniz. Linux amd64 için kurulum şu adımlarla yapılır:

curl -LO https://github.com/slackhq/nebula/releases/download/v1.9.5/nebula-linux-amd64.tar.gz
tar xzf nebula-linux-amd64.tar.gz
sudo mv nebula nebula-cert /usr/local/bin/
chmod +x /usr/local/bin/nebula /usr/local/bin/nebula-cert
nebula --version

Paket Yöneticisi ile Kurulum

Bazı dağıtımlarda Nebula paket yöneticilerinden yüklenebilir. Debian ve Ubuntu için:

sudo apt update
sudo apt install nebula

Fedora için:

sudo dnf install nebula

Arch Linux için:

sudo pacman -S nebula

Certificate Authority Oluşturma

Nebula sertifika tabanlı kimlik doğrulama kullanır. Öncelikle bir Certificate Authority (CA) oluşturulmalıdır. Bu işlem güvenli bir ortamda yapılmalı ve CA özel anahtarı (ca.key) dikkatli korunmalıdır.

mkdir -p /etc/nebula/pki
cd /etc/nebula/pki
nebula-cert ca -name "RootOps Mesh"
ls -la

Bu adım ca.crt ve ca.key dosyalarını oluşturur. ca.crt tüm düğümlere kopyalanır, ancak ca.key asla paylaşılmamalıdır.

Lighthouse Yapılandırması

Lighthouse düğümü için sertifika ve config dosyası oluşturulur. Örnek olarak lighthouse sunucu için 10.100.100.1/24 IP adresi atanır:

nebula-cert sign -name "lighthouse" -ip "10.100.100.1/24"

Bu adım lighthouse.crt ve lighthouse.key dosyalarını oluşturur. Tüm sertifika dosyaları /etc/nebula/ dizinine kopyalanır:

cp .crt .key /etc/nebula/
cp ca.crt /etc/nebula/

Lighthouse Config Dosyası

/etc/nebula/config.yml dosyası oluşturulur:

listen:
  host: 0.0.0.0
  port: 4242

pki:
ca: /etc/nebula/ca.crt
cert: /etc/nebula/lighthouse.crt
key: /etc/nebula/lighthouse.key

static_host_map:
"10.100.100.1": ["203.0.113.10:4242"]

lighthouse:
am_lighthouse: true
interval: 60

firewall:
outbound:
- port: any
proto: any
host: any
inbound:
- port: any
proto: any
host: any

static_host_map kısmında lighthouse'un public IP adresi (203.0.113.10) yerine gerçek public IP adresiniz olmalıdır. Port 4242 varsayılan Nebula portudur.

İstemci Düğüm Yapılandırması

Her istemci düğüm için CA ile sertifika imzalanmalıdır. İstemci sunucu için 10.100.100.2/24 IP adresi atanır:

nebula-cert sign -name "client1" -ip "10.100.100.2/24"
cp client1.crt client1.key /etc/nebula/
cp ca.crt /etc/nebula/

İstemci Config Dosyası

/etc/nebula/config.yml dosyası:

listen:
  host: 0.0.0.0
  port: 4242

pki:
ca: /etc/nebula/ca.crt
cert: /etc/nebula/client1.crt
key: /etc/nebula/client1.key

static_host_map:
"10.100.100.1": ["203.0.113.10:4242"]

lighthouse:
am_lighthouse: false
interval: 60
hosts:
- "10.100.100.1"

firewall:
outbound:
- port: any
proto: any
host: any
inbound:
- port: any
proto: any
host: any

İstemci config'de static_host_map lighthouse'un public IP adresini içerir ve lighthouse.hosts section'ında lighthouse'un overlay IP adresi (10.100.100.1) belirtilir.

Systemd Servisi

Nebula'yı sistem servisi olarak çalıştırmak için /etc/systemd/system/nebula.service dosyası oluşturulur:

[Unit]
Description=Nebula Overlay Networking
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/usr/local/bin/nebula -config /etc/nebula/config.yml
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Servis başlatılır ve otomatik başlatma aktifleştirilir:

systemctl daemon-reload
systemctl enable nebula
systemctl start nebula
systemctl status nebula

Bağlantı Testi

Servis başladıktan sonra Nebula tünel arayüzü oluşur:

ip addr show nebula1

İstemci düğümden lighthouse ping testi:

ping -c 4 10.100.100.1

Başarılı bağlantıda ping cevapları alınır. Birden fazla istemci eklediğinizde tüm istemciler birbirine doğrudan erişebilir.

Firewall Kuralı

Üretim ortamında daha kısıtlayıcı firewall kuralları kullanılmalıdır. Örneğin sadece belirli portlara izin vermek için:

firewall:
  outbound:
    - port: 22
      proto: tcp
      host: any
    - port: 80
      proto: tcp
      host: any
    - port: 443
      proto: tcp
      host: any
  inbound:
    - port: 22
      proto: tcp
      host: any

Bu yapılandırma sadece SSH, HTTP ve HTTPS trafiğine izin verir. Host spesifik IP adresleri de belirtilebilir.

Unsafe Routes ile Ağ Erişimi

Nebula overlay ağının dışındaki ağlara erişim için unsafe_routes kullanılır. Örneğin, istemci düğüm üzerinden home LAN'a (192.168.1.0/24) erişim sağlamak isterseniz:

nebula-cert sign -name "gateway" -ip "10.100.100.3/24" -groups "gateway"

# config.yml'de:
unsafe_routes:
- route: 192.168.1.0/24
via: 10.100.100.3

Gateway düğümünde IP forwarding aktifleştirilir:

sysctl -w net.ipv4.ip_forward=1
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf

Böylece overlay ağdaki diğer düğümler 192.168.1.0/24 ağına gateway üzerinden erişebilir.

Yönetim ve İzleme

Nebula performans izleme için metrikler sunar. Prometheus exporter kullanılabilir:

listen:
  host: 0.0.0.0
  port: 4242

metrics:
listen: 127.0.0.1:9234

Bu yapılandırma http://127.0.0.1:9234/metrics adresinden metrikler sunar. Prometheus ile entegrasyon yapılabilir.

Log Yönetimi

Nebula logları systemd journal'da görülebilir:

journalctl -u nebula -f

Debug mod için config'e logging section eklenebilir:

logging:
  level: info
  format: text

Güvenlik En İyi Uygulamaları

CA anahtarını güvenli bir ortamda saklayın ve asla paylaşmayın. Düğüm sertifikalarına expiration date ekleyin ve düzenli olarak yenileyin. Lighthouse düğümünü güvenli bir konumda barındırın ve sıkı firewall kuralları uygulayın. overlay IP aralığını private network aralıklarından seçin (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16). Düğüm sertifikalarında grupları (groups) kullanarak erişim kontrolü sağlayın.

Grup Tabanlı Erişim

Sertifika oluştururken gruplar atanabilir:

nebula-cert sign -name "db-server" -ip "10.100.100.10/24" -groups "db,servers"
nebula-cert sign -name "app-server" -ip "10.100.100.20/24" -groups "app,servers"

Firewall kurallarında gruplar kullanılabilir:

firewall:
  inbound:
    - port: 3306
      proto: tcp
      groups: app

Bu kural sadece app grubundaki düğümlerin MySQL portuna erişimine izin verir.

Troubleshooting

Bağlantı sorunlarında ilk kontrol noktası lighthouse erişimidir. Lighthouse düğümünde port 4242 açık olmalıdır:

netstat -tlnp | grep 4242

İstemci düğümden lighthouse'a UDP test:

nc -u -v 203.0.113.10 4242

Sertifika doğrulama sorunları için nebula-cert ile test:

nebula-cert verify -path /etc/nebula/client1.crt

Detailed debug log için config'e logging.level: debug ekleyin ve servisi restart edin.

Yeni Düğüm Ekleme

Yeni bir düğüm eklemek için CA ile sertifika imzalanır, config dosyası oluşturulur ve servisi başlatılır:

nebula-cert sign -name "new-node" -ip "10.100.100.50/24"
cp new-node.* /etc/nebula/
cp ca.crt /etc/nebula/
# config.yml oluştur
systemctl start nebula

Yeni düğüm lighthouse üzerinden ağa otomatik keşfedilir ve diğer düğümlerle iletişim kurabilir.

Performans İpuçları

Nebula UDP tabanlıdır, bu nedenle TCP overhead'i yoktur. Ağ kartı offload özellikleri etkinleştirildiğinde performans artar. MTU boyutunu 1350-1400 aralığında tutun, çünkü UDP overhead'i düşüktür. Lighthouse birden fazla instance çalıştırarak yüksek可用lık sağlayın. İstemci düğümlerde relay kullanımını minimize edin, doğrudan peer-to-peer bağlantı teşvik edin.

Alternatif Çözümler

Nebula'ı benzer mesh VPN çözümleriyle karşılaştırmak gerekirse; Tailscale kolaylık için eklemeler içerir ancak MITM koruması için NAT traversal issue olabilir. WireGuard kernel space'de çalışır ancak overlay yönetimi için ek araçlar gerektirir. ZeroTier merkezi bir bulut servisi kullanır, ancak self-hosted seçeneği de mevcuttur. Nebula tamamen self-hosted çalışabilir ve kendi CA yönetimi sağlar.

Sonuç

Nebula mesh VPN, modern, güvenli ve yüksek performanslı bir overlay ağ çözümüdür. Peer-to-peer mimarisi ile düşük gecikme sağlar ve lighthouse keşimi ile basit ağ yönetimi sunar. Sertifika tabanlı güvenlik ve esnek firewall kuralları ile enterprise seviye güvenlik sağlar. Open source olması ve kolay kurulum süreci ile küçük ölçekten büyük ölçeğe ölçeklenebilir. Dağıtık sistemler, çok konumlu sunucu yönetimi ve uzaktan erişim senaryolarında Nebula güçlü bir çözümdür.

Nebula overlay network mimarisi, modern devOps ve sistem yönetim senaryolarında kritik bir rol oynar. Özellikle mikro servis mimarileri, Kubernetes kümeleri ve çoklu veri merkezi dağıtımlarında Nebula güvenli ağ katmanı sağlar. Cloud provider'lardan (AWS, GCP, Azure) sunucuları birbirine bağlarken veya on-premise veri merkezi ile cloud arasında güvenli tünel oluştururken Nebula ideal çözümdür.

Cloud Entegrasyonu

Bulut ortamlarında Nebula deployment'i oldukça basittir. Örneğin, AWS EC2 instance'larda Nebula kurulumu için user-data script kullanılabilir:

#cloud-config
packages:
  - wget

runcmd:
- wget https://github.com/slackhq/nebula/releases/download/v1.9.5/nebula-linux-amd64.tar.gz
- tar xzf nebula-linux-amd64.tar.gz
- mv nebula nebula-cert /usr/local/bin/
- chmod +x /usr/local/bin/nebula /usr/local/bin/nebula-cert
- systemctl enable nebula
- systemctl start nebula

AWS Security Group'da UDP 4242 portunun açık olması gerekir. Google Cloud Platform ve Azure'da benzer yapılandırma uygulanır.

Kubernetes ile Kullanım

Kubernetes kümeleri içinde Nebula pod'da çalıştırılabilir. Helm chart kullanarak deployment yapılabilir:

helm repo add nebula https://slackhq.github.io/nebula-helm
helm install nebula nebula/nebula --namespace nebula --create-namespace

values.yaml ile config custom edilebilir:

config:
  listen:
    host: 0.0.0.0
    port: 4242
  lighthouse:
    am_lighthouse: false
    hosts:
      - "10.100.100.1"

Service Mesh ile Nebula entegrasyonu sağlanabilir. Istio veya Linkerd ile birlikte kullanarak ek güvenlik katmanı eklenir.

Yüksek Mevcudiyet

Lighthouse düğümü için HA (High Availability) konfigürasyonu önemlidir. En az 3 lighthouse instance'ı farklı availability zone'larda barındırılmalıdır. DNS round-robin veya负载均衡器 kullanarak lighthouse load balancing sağlanabilir:

static_host_map:
  "10.100.100.1": ["203.0.113.10:4242"]
  "10.100.100.2": ["203.0.113.11:4242"]
  "10.100.100.3": ["203.0.113.12:4242"]

lighthouse:
am_lighthouse: false
hosts:
- "10.100.100.1"
- "10.100.100.2"
- "10.100.100.3"

Böylece bir lighthouse fail olduğunda diğerleri devreye girer.

Performans Optimizasyonu

Nebula performansını artırmak için birkaç teknik uygulanabilir. Öncelikle UDP portunu kullanarak low latency sağlanır. Ağ kartı offload özellikleri etkinleştirilir:

ethtool -K eth0 tso off gso off

MTU boyutu optimize edilir:

ip link set dev nebula1 mtu 1400

Multiple nebula instance'ı farklı portlarda çalıştırarak throughput artırılabilir. Relay kullanımını minimize etmek için NAT traversal teşvik edilir.

Monitoring ve Alerting

Nebula metrikleri Prometheus ile scrape edilebilir:

metrics:
  listen: 127.0.0.1:9234

# prometheus.yml
scrape_configs:
- job_name: 'nebula'
static_configs:
- targets: ['localhost:9234']

Grafana dashboard ile Nebula ağ durumu görselleştirilebilir. Alertmanager ile lighthouse down veya node offline durumları için uyarılar oluşturulabilir.

Güvenlik Audit

Nebula sertifikaları düzenli olarak audit edilmelidir. Expired sertifikalar yenilenmeli ve kullanılmayan sertifikalar iptal edilmelidir:

nebula-cert verify -path /etc/nebula/.crt
find /etc/nebula -name ".crt" -mtime +90

CA anahtarı HSM (Hardware Security Module) içinde saklanmalıdır. Düğüm sertifikalarında short expiration (örn. 90 gün) kullanılmalıdır.

Troubleshooting Case Study

Scenario: İstemci düğüm lighthouse'a bağlanamıyor. Adım adım troubleshooting:

1. Lighthouse port açık mı?

netstat -tlnp | grep 4242
telnet 203.0.113.10 4242

2. Sertifika geçerli mi?

nebula-cert verify -path /etc/nebula/client1.crt

3. Config syntax doğru mu?

nebula -config /etc/nebula/config.yml -test

4. Log kontrolü:

journalctl -u nebula -n 50 --no-pager

5. Network path kontrolü:

traceroute -U 203.0.113.10

Bakım Rutini

Aylık bakım checklist:

  • Sertifika expiration kontrolü

  • Node health check

  • Lighthouse redundancy kontrolü

  • Firewall rule audit

  • Metrik analysis

  • Config backup

Yedekleme prosedürü:

tar czf nebula-backup-$(date +%Y%m%d).tar.gz /etc/nebula/
scp nebula-backup-*.tar.gz backup-server:/backups/

Scalability

Nebula binlerce düğüm ölçeğinde çalışabilir. Large deployment için best practices:

  • Multiple lighthouse cluster'ı

  • Regional grouping

  • Load balancing

  • Monitoring at scale

  • Automated certificate rotation

1000+ node deployment için architecture pattern:

# Regional lighthouse clusters
Region US-EAST:
  - Lighthouse 1: 10.100.1.1
  - Lighthouse 2: 10.100.1.2

Region US-WEST:
- Lighthouse 3: 10.100.2.1
- Lighthouse 4: 10.100.2.2

Integration ile Diğer Araçlar

Nebula diğer security araçlarıyla entegre olabilir:

  • OpenSCAP ile vulnerability scanning

  • AIDE ile file integrity monitoring

  • Lynis ile security audit

  • OSSEC ile intrusion detection

Örneğin, Nebula trafiği için AIDE rule eklenir:

/etc/nebula/ p+i+u+g

Case Study: Multi-Region Deployment

Scenario: 3 region'da (US-EAST, US-WEST, EU-WEST) dağıtık sistem. Nebula overlay ağ design:

US-EAST Lighthouse Cluster: 3 node, AWS, t3.medium, Load Balancer ile. US-WEST Lighthouse Cluster: 3 node, GCP, n1-standard-2. EU-WEST Lighthouse Cluster: 3 node, Azure, Standard_DS2_v2.

Client nodes her region'da regional lighthouse'a connect. Cross-region traffic için optimized path.

Result: 15ms region içi latency, 85ms cross-region latency. 99.9% uptime.

Cost Optimization

Cloud infrastructure cost optimization için:

  • Lighthouse node'larda t3.nano (veya equivalent) yeterli

  • Reserved instance kullanımı

  • Spot instance ile client nodes (non-critical workload)

  • Data transfer optimization (regional clustering)

Yıllık cost analysis: 6 lighthouse node (t3.nano) = $0.0052/hr x 6 x 8760 = $273/year.

Gelecek Yol Haritası

Nebula roadmap özellikleri:

  • E2E encryption improvements

  • Better mobile support

  • Enhanced firewall rules

  • Improved NAT traversal

  • Better metrics integration

Community contributions için roadmap tracking: https://github.com/slackhq/nebula/milestones

Alternatif Senaryolar

Nebula yerine kullanılabilecek senaryolar:

Simple site-to-site VPN için OpenVPN veya WireGuard kullanılabilir. Ancak large-scale mesh için Nebula daha uygun. Full mesh with automatic discovery için Tailscale kullanılabilir, ancak self-hosted requirement'ı varsa Nebula tercih edilir. Enterprise environment ile Active Directory integration gerekirse ZeroTier değerlendirilir.

Deployment Checklist

Production deployment öncesi:

  • Infrastructure plan (number of nodes, regions)

  • IP addressing scheme design

  • CA setup offline, secure environment

  • Lighthouse deployment, HA config

  • Client deployment automation (Ansible, Terraform)

  • Monitoring setup (Prometheus, Grafana)

  • Alerting configuration

  • Backup strategy

  • Disaster recovery plan

  • Documentation update

Automated Deployment

Ansible playbook ile Nebula deployment automation:

# site.yml
---
- hosts: lighthouses
  roles:
    - nebula-lighthouse

- hosts: clients
roles:
- nebula-client

Terraform ile infrastructure provisioning:

resource "aws_instance" "lighthouse" {
  ami           = "ami-12345678"
  instance_type = "t3.nano"
  user_data     = file("lighthouse-userdata.sh")
}

Özet İpuçları

Production deployment için kritik noktalar:

  • CA security priority #1

  • Lighthouse HA mandatory

  • Monitoring ops team için essential

  • Automated certificate rotation operational overhead'i azaltır

  • Regional clustering global latency'i düşürür

Topluluk Kaynakları

Learning resources:

  • Official docs: https://nebula.defined.net/docs

  • GitHub repo: https://github.com/slackhq/nebula

  • Slack community: #nebula channel

  • Blog posts: production deployment case studies

Contribution guidelines: https://github.com/slackhq/nebula/blob/master/CONTRIBUTING.md

Son Kontrol

Deployment sonrası validation checklist:

  • Tüm node'lar lighthouse'a bağlandı mı?

  • Cross-node ping çalışıyor mu?

  • Firewall rules doğru uygulanmış mı?

  • Monitoring data alınıyor mu?

  • Alerts konfigüre edildi mi?

  • Documentation güncel mi?

  • Team trained mi?