BungeeCord Nedir ve Neden Kullanılır?

BungeeCord, birden fazla Minecraft sunucusunu tek bir IP altında birleştiren bir proxy yazılımıdır. Oyuncular tek bir adrese bağlanır ve lobby, survival, skyblock gibi farklı sunucular arasında sorunsuz geçiş yapabilir. Network yapısı, büyük sunucuların yük dağılımını kolaylaştırır ve modüler bir mimari sunar.

BungeeCord vs Velocity Karşılaştırması

Proxy seçimi yaparken iki ana alternatif vardır: BungeeCord (md_5 tarafından geliştirilen klasik çözüm) ve Velocity (PaperMC ekibinin modern alternatifi). Aşağıdaki tablo temel farkları özetler:

ÖzellikBungeeCordVelocity
Geliştiricimd_5 / SpigotMCPaperMC
Protokol Desteği1.8 - 1.21+1.7.2 - 1.21+
Modern ForwardingHayır (legacy IP forwarding)Evet (modern forwarding)
Plugin APIBungeeCord APIVelocity API (event-driven)
PerformansİyiÇok iyi (daha düşük bellek)
Plugin EkosistemiÇok genişBüyüyen, ancak daha küçük
GüvenlikIPForwarding ileModern forwarding + secret key
Forge DesteğiSınırlıDaha iyi

Gereksinimler ve Ön Hazırlık

BungeeCord network kurmak için aşağıdaki minimum gereksinimlere ihtiyacınız vardır:

  • Java 17+ — BungeeCord ve Paper 1.20+ için zorunlu
  • En az 512 MB RAM — yalnızca proxy için (backend sunucular ayrı)
  • Aynı makinede veya aynı ağda birden fazla Minecraft sunucusu
  • Farklı portlar — her backend sunucu benzersiz bir portta çalışmalı
  • Root/sudo erişimi — firewall ayarları için gerekli

BungeeCord İndirme ve Kurulum

BungeeCord'u resmi Jenkins CI sayfasından indirebilirsiniz. Her zaman en güncel sürümü kullanmanız önerilir.

Proxy için dizin oluşturma

mkdir -p /opt/network/proxy && cd /opt/network/proxy

BungeeCord JAR dosyasını indir

wget -O BungeeCord.jar "https://ci.md-5.net/job/BungeeCord/lastSuccessfulBuild/artifact/bootstrap/target/BungeeCord.jar"

İndirdikten sonra ilk çalıştırma ile config dosyalarını oluşturun:

BungeeCord'u başlat (config dosyaları oluşturulur)

java -Xms256M -Xmx512M -jar BungeeCord.jar

İlk çalıştırmadan sonra config.yml, locations.yml ve modules klasörü oluşturulacaktır. Sunucuyu durdurmak için konsolda end yazın.

config.yml Detaylı Yapılandırma

BungeeCord'un ana yapılandırma dosyası config.yml dosyasıdır. Her ayarı ayrıntılı olarak inceleyelim:

yaml
server_connect_timeout: 5000
remote_ping_cache: -1
forge_support: true
player_limit: -1
permissions:
  default:
    - bungeecord.command.server
    - bungeecord.command.list
  admin:
    - bungeecord.command.alert
    - bungeecord.command.end
    - bungeecord.command.ip
    - bungeecord.command.reload
timeout: 30000
log_commands: false
network_compression_threshold: 256
online_mode: true
disabled_commands:
  - disabledcommandhere
listeners:
  - query_port: 25577
    motd: '&6KEYDAL Network &7- &aOnline'
    tab_list: GLOBAL_PING
    query_enabled: false
    proxy_protocol: false
    forced_hosts:
      lobby.example.com: lobby
      survival.example.com: survival
    ping_passthrough: false
    priorities:
      - lobby
    bind_local_address: true
    host: 0.0.0.0:25565
    max_players: 500
    tab_size: 60
    force_default_server: true
ip_forward: true
groups:
  admin:
    - egemen
servers:
  lobby:
    motd: '&aLobby Server'
    address: 127.0.0.1:25566
    restricted: false
  survival:
    motd: '&2Survival Server'
    address: 127.0.0.1:25567
    restricted: false
  skyblock:
    motd: '&bSkyblock Server'
    address: 127.0.0.1:25568
    restricted: false

Önemli Ayarların Açıklaması

AyarVarsayılanAçıklama
online_modetrueMojang doğrulaması. Premium sunucu için true olmalı.
ip_forwardfalseBackend sunuculara gerçek IP iletimi. Mutlaka true yapın.
player_limit-1Maksimum oyuncu. -1 = sınırsız.
timeout30000Bağlantı zaman aşımı (ms). Yavaş bağlantılar için artırın.
network_compression_threshold256Paket sıkıştırma eşiği (byte). 256 optimal.
force_default_serverfalsetrue yaparsanız oyuncular her zaman lobby'ye düşer.
forge_supporttrueForge istemci desteği.
tab_listGLOBAL_PINGTab listesi modu: GLOBAL, GLOBAL_PING, SERVER.
log_commandsfalseKomut loglaması. Debug için true yapılabilir.

Backend Sunucu Ekleme ve IP Forwarding

Her backend sunucu (lobby, survival, skyblock vb.) ayrı bir Minecraft sunucusu olarak çalışır. Bu sunucuların BungeeCord ile doğru iletişim kurabilmesi için IP forwarding ayarı yapılmalıdır.

spigot.yml Ayarı

Her backend sunucunun spigot.yml dosyasında şu ayarı yapın:

yaml
settings:
  bungeecord: true

server.properties Ayarı

Her backend sunucunun server.properties dosyasında:

properties
online-mode=false
server-port=25566

Forced Hosts ve Sunucu Mesajları

Forced hosts özelliği, farklı alan adlarını farklı sunuculara yönlendirmenizi sağlar. Örneğin lobby.sunucu.com adresine bağlanan oyuncu doğrudan lobby sunucusuna düşer.

yaml
forced_hosts:
  lobby.sunucu.com: lobby
  survival.sunucu.com: survival
  skyblock.sunucu.com: skyblock
  mc.sunucu.com: lobby

Bu özelliği kullanmak için DNS kayıtlarınızda her subdomain için proxy IP adresine yönlendirme (A kaydı veya SRV kaydı) eklemelisiniz.

Güvenlik Ayarları

BungeeCord network güvenliği en kritik konulardan biridir. Backend sunuculara doğrudan erişimi engellemezseniz, oyuncular proxy'yi atlayarak sahte IP ile bağlanabilir.

Firewall ile Port Kapatma

Backend sunucu portlarını (25566, 25567, 25568 vb.) yalnızca localhost'a açık bırakın:

Sadece localhost erişimine izin ver

iptables -A INPUT -p tcp --dport 25566 -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -p tcp --dport 25566 -j DROP

UFW kullananlar için daha basit bir yöntem:

Backend portlarını dışarıya kapat

ufw deny 25566
ufw deny 25567
ufw deny 25568
ufw allow 25565

IPWhitelist Eklentisi

Eğer backend sunucular farklı makinelerde çalışıyorsa, IPWhitelist veya BungeeGuard eklentisi kullanarak yalnızca proxy IP adresinden gelen bağlantılara izin verebilirsiniz.

yaml
# BungeeGuard config.yml (backend sunucuya kur)
enabled: true
allowed-tokens:
  - 'BURAYA-RASTGELE-TOKEN-YAZIN'

OnlyProxyJoin Kontrolü

Backend sunucularda spigot.yml içinde bungeecord: true ayarı, IP forwarding'i aktifleştirir ancak doğrudan bağlantıyı engellemez. Ek olarak firewall veya BungeeGuard kullanmanız zorunludur.

Performans Optimizasyonu

BungeeCord proxy'nin performansı büyük ölçüde doğru yapılandırmaya bağlıdır. Aşağıdaki öneriler yüksek oyuncu sayısı için önemlidir:

  • network_compression_threshold: 256 — Optimal sıkıştırma eşiği. Çok düşük değerler CPU kullanımını artırır.
  • timeout: 30000 — Yavaş ağ bağlantıları için bu değeri 45000'e çıkarabilirsiniz.
  • Java flagları: -XX:+UseG1GC -XX:G1HeapRegionSize=4M -XX:+ParallelRefProcEnabled
  • remote_ping_cache: 10000 — Ping sonuçlarını 10 saniye önbelleğe alır, backend yükünü azaltır.
  • connection_throttle: 4000 — Aynı IP'den art arda bağlantıları sınırlar.
bash
#!/bin/bash
# BungeeCord başlatma scripti
java -Xms512M -Xmx512M \
  -XX:+UseG1GC \
  -XX:G1HeapRegionSize=4M \
  -XX:+UnlockExperimentalVMOptions \
  -XX:+ParallelRefProcEnabled \
  -XX:MaxGCPauseMillis=200 \
  -jar BungeeCord.jar

Plugin Uyumluluğu

BungeeCord pluginleri, Spigot/Paper pluginlerinden farklıdır. Proxy tarafına kurulan eklentiler plugins/ klasörüne yerleştirilir ve tüm network genelinde çalışır.

PluginTürAçıklama
LuckPermsProxy + BackendNetwork genelinde yetki yönetimi
LiteBansProxy + BackendNetwork genelinde ban/mute/kick
PremiumVanishProxy + BackendVanish modu, network genelinde gizlenme
GeyserProxyBedrock oyuncuların Java sunucuya bağlanması
BungeeTabListPlusProxyÖzelleştirilebilir tab listesi
ServerListPlusProxyDinamik MOTD ve sunucu listesi
BungeeGuardProxy + BackendGüvenli bağlantı doğrulama

Sık Karşılaşılan Hatalar

If you wish to use IP forwarding hatası

Bu hata, backend sunucuda spigot.yml içinde bungeecord: true ayarı yapılmadığında ortaya çıkar. Tüm backend sunucularda bu ayarı kontrol edin.

Connection throttled hatası

config.yml içinde connection_throttle değerini düşürün veya -1 yaparak devre dışı bırakın (DDoS riski taşır):

yaml
connection_throttle: 4000  # ms cinsinden, -1 = devre dışı

Oyuncu sunucu değiştirirken kopuyor

Bu sorun genellikle backend sunuculardaki farklı Minecraft sürümlerinden kaynaklanır. Tüm backend sunucuların aynı sürümde olduğundan emin olun. Alternatif olarak ViaVersion eklentisini kullanarak çoklu sürüm desteği ekleyebilirsiniz.