Velocity Nedir?

Velocity, PaperMC ekibi tarafından geliştirilen modern bir Minecraft proxy yazılımıdır. Birden fazla Minecraft sunucusunu tek bir IP altında birleştirerek oyuncuların sunucular arasında sorunsuz geçiş yapmasını sağlar. BungeeCord'un modern, güvenli ve performanslı alternatifidir.

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

ÖzellikBungeeCordVelocity
GeliştiriciSpigotMC (md_5)PaperMC
PerformansOrta — eski mimarisi nedeniyle daha fazla CPU/RAM kullanırYüksek — %50'ye kadar daha az kaynak tüketimi
ForwardingBungeeGuard veya legacy IP forwardingModern forwarding (HMAC tabanlı, güvenli)
GüvenlikIP spoofing açığı (ek eklenti gerektirir)Yerleşik güvenlik, UUID spoofing koruması
Plugin APIEski, callback tabanlıModern, event-driven, CompletableFuture desteği
Backend DesteğiSpigot, PaperPaper, Purpur, Fabric, Forge
DDoS KorumasıYok (eklenti gerekir)Yerleşik rate limiting
1.21+ UyumlulukVarVar — öncelikli destek
Aktif GeliştirmeYavaşÇok aktif
ToplulukGeniş (eski)Büyüyen (modern)

Velocity Kurulumu

Velocity için ayrı bir kullanıcı ve dizin oluşturun. Proxy, backend sunuculardan bağımsız çalışır.

Gereksinimler

  • Java 17 veya üzeri
  • Minimum 512 MB RAM (proxy için)
  • Ayrı port (varsayılan: 25577)
  • Backend sunucular için ek RAM ve portlar

İndirme ve İlk Başlatma

# Velocity dizini oluştur
mkdir -p ~/velocity && cd ~/velocity

# Son sürümü indir (3.4.0 örnek — güncel sürümü kontrol edin)
wget https://api.papermc.io/v2/projects/velocity/versions/3.4.0/builds/latest/downloads/velocity-3.4.0.jar

# İlk başlatma — config dosyaları oluşsun
java -Xms512M -Xmx512M -jar velocity-3.4.0.jar

# Ctrl+C ile durdurun

İlk başlatmadan sonra aşağıdaki dosyalar oluşur:

Dizin Yapısı

text
~/velocity/
├── velocity-3.4.0.jar        # Ana proxy dosyası
├── velocity.toml              # Ana yapılandırma
├── forwarding.secret          # Modern forwarding anahtarı
├── server-icon.png            # Sunucu listesi ikonu (64x64)
├── plugins/                   # Velocity eklentileri
└── logs/                      # Log dosyaları

velocity.toml Yapılandırması

velocity.toml, proxy'nin tüm davranışını belirleyen ana config dosyasıdır. Her ayarı detaylı inceliyoruz:

Genel Ayarlar

AyarVarsayılanÖnerilenAçıklama
<code>bind</code>0.0.0.0:255770.0.0.0:25577Proxy'nin dinleyeceği IP ve port
<code>motd</code>A Velocity ServerÖzel MOTDSunucu listesinde görünen açıklama (renk kodu destekler)
<code>show-max-players</code>500500Sunucu listesinde gösterilen maks oyuncu
<code>online-mode</code>truetrueMojang doğrulaması (premium kontrol)
<code>force-key-presence</code>truetrueChat imzalama anahtarı zorunluluğu (1.19.1+)
<code>player-info-forwarding-mode</code>NONEmodernIP/UUID iletim modu (modern = en güvenli)
<code>announce-forge</code>falsefalseForge istemcilerine mod listesi gönder
toml
# velocity.toml — Genel ayarlar
bind = "0.0.0.0:25577"
motd = "&b&lKEYDAL &fNetwork &7| &aSunucumuza hoş geldiniz!"
show-max-players = 500
online-mode = true
force-key-presence = true
player-info-forwarding-mode = "modern"

Sunucu Tanımları

[servers] bölümünde backend sunucuları tanımlarsınız. Her sunucu bir isim ve IP:port çiftinden oluşur.

toml
[servers]
lobby = "127.0.0.1:25565"
survival = "127.0.0.1:25566"
skyblock = "127.0.0.1:25567"
creative = "127.0.0.1:25568"

# Oyuncu ilk bağlandığında sırayla denenecek sunucular
try = ["lobby"]

Forced Hosts

Farklı alan adları ile farklı sunuculara doğrudan yönlendirme yapabilirsiniz:

toml
[forced-hosts]
"play.example.com" = ["lobby"]
"survival.example.com" = ["survival"]
"skyblock.example.com" = ["skyblock"]
"creative.example.com" = ["creative"]

Tüm alan adları DNS'te aynı sunucu IP'sine ve Velocity portuna (25577) yönlenmelidir. Velocity, gelen hostname'e göre doğru backend'e yönlendirir.

text
# DNS A kayıtları (hepsi aynı IP'ye)
play.example.com       A    185.x.x.x
survival.example.com   A    185.x.x.x
skyblock.example.com   A    185.x.x.x

# SRV kaydı (port 25577 ise gerekli)
_minecraft._tcp.play.example.com  SRV  0 0 25577 play.example.com

Gelişmiş Ayarlar

AyarVarsayılanAçıklama
<code>login-ratelimit</code>3000Login denemeleri arası minimum süre (ms)
<code>connection-timeout</code>5000Backend bağlantı zaman aşımı (ms)
<code>read-timeout</code>30000Veri okuma zaman aşımı (ms)
<code>haproxy-protocol</code>falseHAProxy PROXY protocol desteği (TCPShield için)
<code>ping-passthrough</code>DISABLEDPing bilgisini backend'den al (ALL, MODS, DESCRIPTION, DISABLED)
toml
[advanced]
compression-threshold = 256
compression-level = -1
login-ratelimit = 3000
connection-timeout = 5000
read-timeout = 30000
haproxy-protocol = false
tcp-fast-open = false
bungee-plugin-message-channel = true
show-ping-requests = false
failover-on-unexpected-server-disconnect = true
announce-proxy-commands = true
log-command-executions = false
log-player-connections = true

Backend Sunucu Ekleme

Her backend sunucu bağımsız bir Paper/Purpur instance'ıdır. Farklı portlarda çalışır ve kendi config dosyaları vardır.

Backend Dizin Yapısı

text
~/servers/
├── lobby/                 # Port 25565
│   ├── paper.jar
│   ├── server.properties
│   └── config/paper-global.yml
├── survival/              # Port 25566
│   ├── paper.jar
│   ├── server.properties
│   └── config/paper-global.yml
└── skyblock/              # Port 25567
    ├── paper.jar
    ├── server.properties
    └── config/paper-global.yml

server.properties Ayarları

Her backend sunucunun server.properties dosyasında şu ayarlar kritiktir:

AyarDeğerAçıklama
<code>server-port</code>25565/25566/25567Her sunucu farklı port
<code>server-ip</code>127.0.0.1Sadece localhost'tan bağlantı kabul et
<code>online-mode</code>falseDoğrulama Velocity'de yapılıyor
<code>prevent-proxy-connections</code>falseProxy bağlantılarını engelleme

Modern Forwarding Yapılandırması

Modern forwarding, Velocity'nin HMAC tabanlı güvenli IP/UUID iletim sistemidir. Backend sunucular oyuncunun gerçek IP'sini, UUID'sini ve skin bilgilerini güvenli şekilde alır.

Adım 1: Velocity Tarafı

toml
# velocity.toml
player-info-forwarding-mode = "modern"

Bu ayar zaten varsayılan olarak mevcuttur. forwarding.secret dosyası ilk başlatmada otomatik oluşur.

Adım 2: Secret'ı Kopyalama

cat ~/velocity/forwarding.secret
# Örnek çıktı: aB3dEf7GhI9jKlMnOpQrStUvWxYz12

Bu anahtarı her backend sunucuya kopyalamanız gerekir.

Adım 3: Paper Backend Yapılandırması

Her backend sunucuda config/paper-global.yml dosyasını düzenleyin:

yaml
# config/paper-global.yml
proxies:
  velocity:
    enabled: true
    online-mode: true
    secret: "aB3dEf7GhI9jKlMnOpQrStUvWxYz12"   # forwarding.secret ile birebir aynı

Forwarding Modları Karşılaştırması

ModGüvenlikAçıklama
<code>none</code>YokIP/UUID iletimi yok — backend gerçek bilgileri alamaz
<code>legacy</code>DüşükBungeeCord uyumlu — IP spoofing'e açık
<code>bungeeguard</code>OrtaBungeeGuard token ile korumalı legacy
<code>modern</code>YüksekHMAC tabanlı — sadece Velocity destekler, Paper/Purpur gerektirir

Sunucular Arası Geçiş

Oyuncuların sunucular arasında geçiş yapması için Velocity yerleşik komutlar sunar:

KomutAçıklamaYetki
<code>/server lobby</code>Belirtilen sunucuya geçvelocity.command.server
<code>/server</code>Sunucu listesini göstervelocity.command.server
<code>/glist</code>Tüm sunuculardaki oyuncuları listelevelocity.command.glist
<code>/send Oyuncu survival</code>Oyuncuyu belirtilen sunucuya göndervelocity.command.send
<code>/send all lobby</code>Tüm oyuncuları lobby'ye göndervelocity.command.send
<code>/velocity plugins</code>Yüklü Velocity eklentilerini listelevelocity.command.plugins
<code>/velocity reload</code>velocity.toml'u yeniden yüklevelocity.command.reload

Sunucu seçim menüsü (GUI) için LobbyAPI, HubCommand veya ServerSelectorX gibi eklentiler kullanabilirsiniz.

Güvenlik

Network kurulumunda güvenlik kritiktir. Yanlış yapılandırma UUID spoofing, unauthorized erişim ve DDoS saldırılarına kapı açar.

Firewall: Sadece Proxy Portunu Aç

Kural: Dışarıya sadece Velocity portu (25577) ve SSH (22) açık olmalı. Backend portları (25565-25567) dışarıdan erişilemez olmalı.

# UFW ile firewall ayarları

# SSH erişimi
sudo ufw allow 22/tcp

# Velocity proxy portu (dışarıya açık — tek giriş noktası)
sudo ufw allow 25577/tcp

# Backend portları KAPALI — zaten 127.0.0.1'de dinliyor
# Ama emin olmak için açıkça engelle:
sudo ufw deny 25565/tcp
sudo ufw deny 25566/tcp
sudo ufw deny 25567/tcp

# Firewall'u etkinleştir
sudo ufw enable
sudo ufw status verbose
PortDurumAçıklama
22/tcpALLOWSSH erişimi
25577/tcpALLOWVelocity proxy — oyuncuların bağlandığı port
25565/tcpDENYLobby backend — sadece localhost
25566/tcpDENYSurvival backend — sadece localhost
25567/tcpDENYSkyblock backend — sadece localhost

Backend 25565 Kapat

Backend sunucuların server.properties dosyasında server-ip=127.0.0.1 ayarı ile sadece localhost'tan bağlantı kabul etmelerini sağlayın:

properties
# Her backend sunucunun server.properties dosyasında:
server-ip=127.0.0.1
online-mode=false

IPWhitelist

Backend sunucularda sadece Velocity'nin IP'sinden gelen bağlantıları kabul etmek için IPWhitelist eklentisi kullanabilirsiniz:

  • Backend sunuculara IPWhitelist eklentisini kurun
  • Config'de sadece 127.0.0.1 (veya Velocity'nin IP'si) izin verin
  • Doğrudan bağlanan herkes reddedilir

DDoS Koruması

  • TCPShield — Ücretsiz Minecraft DDoS koruması, reverse proxy
  • Cloudflare Spectrum — Ücretli, enterprise düzey TCP proxy
  • OVH Game DDoS Protection — OVH sunucularda yerleşik
  • Velocity yerleşik rate limitinglogin-ratelimit: 3000 ayarı ile brute force engeli

LuckPerms Network Kurulumu

Network'te yetki yönetimi için LuckPerms'ü tüm sunuculara kurmanız ve ortak bir veritabanı kullanmanız gerekir. Böylece yetkiler tüm sunucularda senkron çalışır.

MySQL Veritabanı Kurulumu

# MySQL kurulumu (Ubuntu/Debian)
sudo apt install mysql-server -y
sudo mysql_secure_installation

# LuckPerms için veritabanı ve kullanıcı oluştur
sudo mysql -u root -p
CREATE DATABASE luckperms;
CREATE USER 'luckperms'@'localhost' IDENTIFIED BY 'guclu_sifre_buraya';
GRANT ALL PRIVILEGES ON luckperms.* TO 'luckperms'@'localhost';
FLUSH PRIVILEGES;
EXIT;

LuckPerms Config (Her Sunucuda)

Velocity, lobby, survival ve tüm backend sunuculardaki LuckPerms config.yml dosyasında:

yaml
# plugins/LuckPerms/config.yml (tüm sunucularda aynı)
storage-method: mysql

data:
  address: localhost:3306
  database: luckperms
  username: luckperms
  password: 'guclu_sifre_buraya'
  pool-settings:
    maximum-pool-size: 10

# Sunucular arası anlık senkronizasyon
messaging-service: sql

Network Bazlı Yetkiler (Context)

LuckPerms context sistemi ile belirli sunuculara özel yetkiler atayabilirsiniz:

text
# Sadece survival sunucusunda fly yetkisi
lp user Oyuncu permission set essentials.fly true server=survival

# Sadece creative sunucusunda gamemode yetkisi
lp group vip permission set essentials.gamemode true server=creative

# Tüm sunucularda geçerli yetki (context belirtilmezse)
lp group default permission set essentials.home true

Başlatma Scripti

Tüm sunucuları tek komutla başlatmak için bir bash script oluşturun:

bash
#!/bin/bash
# start-network.sh

echo "=== KEYDAL Network Başlatılıyor ==="

# Backend sunucuları screen ile başlat
echo "[1/4] Lobby başlatılıyor..."
screen -dmS lobby bash -c 'cd ~/servers/lobby && java -Xms1G -Xmx1G -XX:+UseG1GC -jar paper.jar --nogui'
sleep 8

echo "[2/4] Survival başlatılıyor..."
screen -dmS survival bash -c 'cd ~/servers/survival && java -Xms4G -Xmx4G -XX:+UseG1GC -jar paper.jar --nogui'
sleep 8

echo "[3/4] Skyblock başlatılıyor..."
screen -dmS skyblock bash -c 'cd ~/servers/skyblock && java -Xms2G -Xmx2G -XX:+UseG1GC -jar paper.jar --nogui'
sleep 8

# Velocity proxy'yi en son başlat
echo "[4/4] Velocity başlatılıyor..."
screen -dmS velocity bash -c 'cd ~/velocity && java -Xms512M -Xmx512M -XX:+UseG1GC -jar velocity.jar'

echo ""
echo "=== Tüm sunucular başlatıldı! ==="
echo "Bağlanmak için: screen -r <isim>"
echo "  screen -r lobby"
echo "  screen -r survival"
echo "  screen -r skyblock"
echo "  screen -r velocity"
chmod +x start-network.sh
./start-network.sh

Systemd Service

Sunucu yeniden başladığında Velocity'nin otomatik açılması için systemd service oluşturun:

ini
# /etc/systemd/system/velocity.service
[Unit]
Description=Velocity Minecraft Proxy
After=network.target

[Service]
User=minecraft
Group=minecraft
WorkingDirectory=/home/minecraft/velocity
ExecStart=/usr/bin/java -Xms512M -Xmx512M -XX:+UseG1GC -jar velocity.jar
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=velocity

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable velocity.service
sudo systemctl start velocity.service
sudo systemctl status velocity.service

Sık Yapılan Hatalar ve Çözümleri

SorunNedenÇözüm
Oyuncu bağlanamıyorFirewall 25577 portunu engelliyor<code>ufw allow 25577/tcp</code> kontrol et
"Unable to connect to server" hatasıBackend sunucu kapalı veya port yanlışBackend'in çalıştığını ve doğru portta olduğunu kontrol et
"If you wish to use IP forwarding" hatasıModern forwarding yapılandırılmamışpaper-global.yml'de velocity secret'ı gir
Skin'ler görünmüyorForwarding modu yanlış<code>player-info-forwarding-mode = "modern"</code> kontrol et
UUID farklı sunucularda değişiyorBackend'lerde online-mode tutarsızTüm backend'lerde <code>online-mode=false</code> ve paper-global'de <code>online-mode: true</code>
LuckPerms yetkileri senkron değilFarklı storage veya messaging-service eksikTüm sunucularda aynı MySQL bağlantısı ve <code>messaging-service: sql</code>
Oyuncu sunucu değiştirirken bağlantı kopuyorBackend timeout veya network sorunu<code>connection-timeout</code> ve <code>read-timeout</code> değerlerini artır
velocity.toml değişiklikleri uygulanmıyorConfig yeniden yüklenmemiş<code>/velocity reload</code> veya proxy'yi yeniden başlat
Forced hosts çalışmıyorDNS kayıtları yanlış veya port uyumsuzTüm subdomain'lerin aynı IP:25577'ye yönlendiğini kontrol et
Backend'e doğrudan bağlanılabiliyorserver-ip=127.0.0.1 ayarlanmamış veya firewall eksikserver.properties + firewall birlikte kontrol et

Önerilen Velocity Eklentileri

EklentiİşlevZorunlu mu?
<strong>LuckPerms (Velocity)</strong>Network genelinde yetki yönetimiEvet
<strong>SignedVelocity</strong>Chat mesaj imzalama desteği (1.19.1+)Önerilir
<strong>MiniMOTD</strong>Özelleştirilebilir MOTD, sunucu ikonu, oyuncu sayısıİsteğe bağlı
<strong>Geyser (Velocity)</strong>Bedrock oyuncularının Java sunucuya bağlanmasıİsteğe bağlı
<strong>ViaVersion (Velocity)</strong>Farklı MC sürümlerinden bağlanma desteğiÖnerilir
<strong>LimboFilter</strong>Bot saldırılarına karşı antibot filtreÖnerilir
<strong>VelocityTools</strong>Maintenance mode, MOTD yönetimiİsteğe bağlı
<strong>NanoLimbo</strong>Ultra hafif limbo sunucu (queue/maintenance)İsteğe bağlı

Faydalı Kaynaklar