CS 1.6 sunucusu nasıl kurulur? Tek makinede kaç sunucu?
Yazan: Datafex Teknik EkibiYayın: Güncelleme: 4 dk okuma
Counter-Strike 1.6 sunucusu bu sitedeki en hafif iş yükünü üretir. Bu yüzden doğru soru "hangi paket yeter" değil, "tek sunucuda kaç oyun sunucusu çalıştırabilirim" sorusudur.
Kaynak gerçeği
Tek bir 32 slotluk HLDS süreci 300-600 MB bellek ve bir çekirdeğin küçük bir bölümünü kullanır. Pratikte:
| Paket | Rahat çalışan sunucu sayısı |
|---|---|
| 2 GB / 1 vCPU | 2-3 |
| 8 GB / 4 vCPU | 10-15 |
| 16 GB / 8 vCPU | 25-30 |
Gerçek sınır bellek değil CPU'dur. Her HLDS süreci kendi iş parçacığında çalışır ve tick gecikmesine duyarlıdır; çekirdek başına 3-4 sunucudan fazlasını sıkıştırmak ping tutarlılığını bozar. Oyuncular bunu "sunucu takılıyor" olarak fark eder, hâlbuki bellek boldur. Tablodaki RAM/vCPU eşleşmelerini sanal sunucu paketlerinde tek tek görebilirsiniz; kaç HLDS süreci çalıştıracağınızı biliyorsanız seçimi belirleyen kalem vCPU olur.
CPU maliyetini belirleyen asıl ayar sys_ticrate cvar'ıdır: sunucunun saniyede kaç kez döngü çalıştıracağını söyler. Değeri yükseltmek her sürecin CPU tüketimini doğrudan artırır, yani aynı makineye sığdırabileceğiniz sunucu sayısını düşürür. On beş sunucuyu yüksek bir tick değerinde aynı çekirdeklere sıkıştırmak yerine yedi sunucuyu rahat çalıştırmak, oyuncunun hissettiği kalite açısından her zaman daha iyidir.
Oyuncu başına yük bu oyunda çok küçüktür, yaklaşık 5 MB. Sonuç şu: slot açmak neredeyse bedava, yeni süreç açmak pahalıdır. 24 slotluk bir sunucuyu 32'ye çıkarmak ölçülemeyecek kadar küçük bir fark yaratır; on birinci sunucuyu aynı çekirdeğe koymak hepsinin ping'ini bozar. Aynı hesabın diğer oyunlardaki karşılığı: oyun sunucusunda slot hesabı
ReHLDS kullanın
Orijinal HLDS uzun süredir güncellenmiyor. ReHLDS ve ReGameDLL hem kararlılık hem güvenlik açısından belirgin daha iyidir ve bilinen çökme yollarının çoğunu kapatır. Modern eklenti ekosistemi de ağırlıklı olarak bu derlemeler üzerinde test edilir.
Pratik karşılığı eklenti katmanında görünür: AMX Mod X ve benzeri eklentileri yükleyen Metamod katmanının ReHLDS ile uyumlu sürümünü (Metamod-r) kullanmanız gerekir. Orijinal HLDS için derlenmiş eski bir Metamod ikilisi ReHLDS altında ya hiç yüklenmez ya da ilk harita değişiminde sunucuyu düşürür. Sırayı şöyle izleyin: temiz HLDS → ReHLDS ikilileri → ReGameDLL → Metamod-r → eklentiler. Her adımdan sonra sunucuyu bir kez başlatıp konsolu okuyun; beş bileşeni birlikte kurup sonra hata aramak en uzun yoldur.
32-bit kütüphaneleri
HLDS 32-bit derlenmiştir. Modern dağıtımlar 32-bit kütüphaneleri varsayılan olarak kurmaz ve bu adım atlandığında süreç sessizce başlamaz:
file ./hlds_linux
ldd ./hlds_linuxldd çıktısındaki her not found satırı eksik bir kütüphanedir.
Debian ve Ubuntu'da eksik kütüphaneleri kurmak için önce i386 mimarisini etkinleştirmek gerekir:
dpkg --add-architecture i386
apt update
apt install lib32gcc-s1 lib32stdc++6Aynı sorun SteamCMD'nin kendisinde de çıkar: o da 32-bit çalışır, yani bu paketler kurulmadan dosyaları indirmeye bile başlayamazsınız. Sunucu dosyalarını çekerken kullanılan komut:
./steamcmd.sh +force_install_dir /home/hlds/27015 +login anonymous \
+app_set_config 90 mod cstrike +app_update 90 validate +quitapp_update 90 bilinen şekilde huysuzdur; ilk denemede yarıda kesilirse komutu aynen bir kez daha çalıştırın. validate parametresi eksik kalan dosyaları tamamlar, baştan indirmez.
Çoklu sunucu düzeni
Her sunucu için ayrı çalışma dizini ve ayrı port. 27015'ten başlayıp artırmak yaygın düzendir:
./hlds_run -game cstrike -port 27015 +maxplayers 32 +map de_dust2
./hlds_run -game cstrike -port 27016 +maxplayers 24 +map de_infernoKullandığınız port aralığını UDP olarak açın — 1.6 tamamen UDP üzerinden çalışır.
Sunucuları screen yerine systemd servisi olarak tanımlamak daha iyidir: makine yeniden başladığında hepsi kendiliğinden ayağa kalkar. Port numarasını dizin adı olarak kullanırsanız tek bir şablon servisi bütün sunucuları yönetir — /etc/systemd/system/[email protected]:
[Unit]
Description=CS 1.6 sunucusu (port %i)
After=network-online.target
[Service]
User=hlds
WorkingDirectory=/home/hlds/%i
Environment="LD_LIBRARY_PATH=/home/hlds/%i"
ExecStart=/home/hlds/%i/hlds_linux -game cstrike -port %i +maxplayers 32 +map de_dust2
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.targetSonra her port için ayrı ayrı etkinleştirin:
systemctl enable --now cs16@27015
systemctl enable --now cs16@27016Burada iki ayrıntı önemli. Birincisi, hlds_run kendi içinde yeniden başlatma döngüsü olan bir kabuk betiğidir; systemd altında doğrudan hlds_linux çalıştırmak daha öngörülebilir olur, yoksa iki ayrı yeniden başlatma mekanizması aynı işi yapmaya çalışır. İkincisi, hlds_run kütüphane yolunu kendisi ayarladığı için onu atladığınızda LD_LIBRARY_PATH satırını elle vermeniz gerekir; vermezseniz süreç kütüphaneleri bulamadığı için hemen kapanır.
Restart=always satırı oyuncuların gördüğü kesintinin büyük kısmını tek başına ortadan kaldırır: çöken süreç beş saniye içinde geri gelir. Bunun sağlayıcının taahhüdünden bağımsız, sizin tarafınızdaki bir kazanç olduğunu ayrıca yazdık: uptime ve SLA ne anlama geliyor?
Saldırı yüzeyi
1.6 sunucuları iki ayrı biçimde hedef alınır ve ikisi farklı yerde çözülür.
Sorgu taşması. Sunucu listesinin kullandığı sorgu paketleri oyun portunun kendisine gelir ve yanıt istekten büyüktür; bu yüzden 1.6 sunucuları hem hedef hem de başka bir saldırıda yansıtıcı olarak kullanılır. UDP'de kaynak adresi sahte olabildiği için IP engellemek işe yaramaz — engellediğiniz adres büyük olasılıkla masum bir üçüncü taraftır. Filtrelemenin ağ seviyesinde yapılması gerekir. Ayrıntı: DDoS koruması nedir?
Yetkisiz erişim. 1.6'da RCON ayrı bir port değildir, oyun portunun üzerinden çalışır. Yani rcon_password sunucunuzun tam kontrolüdür ve zayıf bırakıldığında kapı zaten açıktır. Parolayı server.cfg içinde uzun tanımlayın ve bu dosyayı oyunculara dağıttığınız hiçbir arşive koymayın.
Sunucuyu root ile çalıştırmayın; yukarıdaki servis tanımında ayrı bir hlds kullanıcısının olması tam olarak bu yüzden. Sunucuya bağlanma ve ilk gün yapılacak sertleştirme adımları: SSH ile sunucuya bağlanma ve sunucu güvenliği temel adımlar
Sonraki adım
Kaç sunucu için hangi paketin uygun olduğunu tek sayfada topladık: Counter-Strike 1.6 sunucu paketleri. Süreç sayısına göre vCPU ve RAM'i kendiniz belirlemek istiyorsanız kaynakları tek tek seçip aylık tutarı sunucu yapılandırıcıda görebilirsiniz.