TeamSpeak sunucusu kurmak, ilk bakışta "dosyayı indir çalıştır" kadar basit görünüyor. Büyük ölçüde öyle de. Ama arada birkaç yerde takılıyorsun ve o noktalar çoğu rehberde geçmiyor. Bu yazı, bu sunucuyu kurarken gerçekten yaşadıklarımızın kaydı.
Neye ihtiyacın var
Bir Linux sunucusu. Ev bilgisayarında da barındırabilirsin ama o zaman bilgisayarın hep açık kalmalı, ayrıca çoğu ev internetinde dışarıdan erişim sorunlu oluyor. Kiralık bir sunucu (VPS/VDS) daha pratik.
Kaynak ihtiyacı çok düşük. Bu sunucu çalışırken 30 MB civarı bellek kullanıyor. En küçük paketler bile fazlasıyla yeter.
İşletim sistemi olarak Ubuntu Server LTS öneriyoruz. Arayüz olmadığı için kaynak harcamaz, TeamSpeak tarafında da en çok test edilmiş ortam bu.
Kurulum
1. Sistemi hazırla
apt update && apt upgrade -y
apt install wget tar curl jq -y
2. Dosyayı indir
TS6 sunucusu GitHub üzerinden dağıtılıyor. Sürüm numarasıyla uğraşmamak için en günceli otomatik çeken bir yöntem:
mkdir /root/ts6 && cd /root/ts6
DL=$(curl -s https://api.github.com/repos/teamspeak/teamspeak6-server/releases/latest \
| jq -r '.assets[] | select(.name | contains("linux-amd64")) | .browser_download_url')
wget "$DL"
Dosya adı ve sıkıştırma formatı sürümler arasında değişiyor. Eski rehberlerde .tar.bz2 geçiyor ama güncel sürüm .tar.xz kullanıyor. Elle link yazarsan 404 alma ihtimalin yüksek, o yüzden yukarıdaki gibi API'den çekmek daha güvenli.
3. Arşivi aç
tar -xJf teamspeak6-server-linux-amd64.tar.xz
İnternetteki örneklerde sık geçen --strip-components=1 parametresini kullanma. Arşivin yapısına göre çalıştırılabilir dosyayı kaybediyorsun ve klasörde yüzlerce dokümantasyon dosyası arasında ne olduğunu anlamıyorsun. Parametresiz açmak doğru sonucu veriyor.
4. Lisansı kabul et
touch .tsserver_license_accepted
Dosya adının tam olarak bu olması gerekiyor. Farklı bir isim yazarsan sunucu açılmaz ve sebebini söylemez.
5. İlk çalıştırma
./tsserver
İlk açılışta ekrana iki önemli bilgi basılır:
- ServerQuery hesabı, kullanıcı adı, şifre ve API anahtarı
- Privilege key, istemciden bağlanıp yönetici yetkisi almak için kullanacağın anahtar
Bu bilgiler bir daha gösterilmez. Özellikle API anahtarını güvenli bir yere yaz, ileride istemci tarafında bir sorun yaşarsan sunucuya müdahale etmenin en garantili yolu o oluyor.
Kalıcı çalıştırma
Yukarıdaki gibi çalıştırdığında, terminali kapattığın anda sunucu da kapanır. Bunu ilk denemede fark etmeyip "neden bağlanamıyorum" diye uğraşmak çok yaygın.
Doğru çözüm bir systemd servisi tanımlamak. Böylece sunucu yeniden başlasa da, program çökse de kendiliğinden geri gelir:
cat > /etc/systemd/system/teamspeak.service << 'EOF'
[Unit]
Description=TeamSpeak 6 Server
After=network.target
[Service]
Type=simple
WorkingDirectory=/root/ts6
ExecStart=/root/ts6/tsserver
Restart=always
RestartSec=5
User=root
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable teamspeak
systemctl start teamspeak
Durumu kontrol etmek için:
systemctl status teamspeak
Güvenlik duvarı
Portları açmayı unutursan sunucu çalışır ama kimse bağlanamaz.
ufw allow 22/tcp # SSH, bunu unutma, yoksa kendini kilitlersin
ufw allow 9987/udp # ses
ufw allow 30033/tcp # dosya transferi
ufw enable
UFW'yi etkinleştirmeden önce mutlaka SSH portunu (22) izin listesine ekle. Aksi halde bağlantın kopar ve sunucuya giremezsin.
Yedekleme
Kanal yapısı, kullanıcılar ve yetkiler bir veritabanı dosyasında tutuluyor. Bunu düzenli yedeklemek iyi bir alışkanlık:
mkdir -p /root/backups
crontab -e
Açılan dosyanın en altına, her gece 03:00'te yedek alacak şekilde:
0 3 * * * cp /root/ts6/*.sqlitedb /root/backups/ts6_$(date +\%F).sqlitedb
Beklenmedik sorunlar
Bağlantı kurulmuyor ama sunucu çalışıyor
Bizde en çok uğraştıran sorun buydu. Sunucu ayakta, portlar açık, log temiz, ama istemci bağlanamıyor, hem de düzensiz aralıklarla.
Sebep şuydu: birçok barındırma firması UDP trafiğine karşı otomatik bir DDoS koruma sistemi çalıştırıyor. 9987, kötüye kullanımı çok yaygın bir port olduğu için saldırı şüphesinde toptan engelleniyor, meşru trafik dahil.
Bunu şöyle teşhis edebilirsin:
tcpdump -i any -n udp port 9987
Bu açıkken bağlanmayı dene. Ekranda hiçbir paket görünmüyorsa, trafik sunucuya hiç ulaşmıyor demektir, sorun sende değil, ağ tarafında.
Çözüm: varsayılan port yerine daha az bilinen bir port kullanmak. Sağlayıcının filtresi genelde bilinen portları hedef aldığı için bu, sorunu büyük ölçüde ortadan kaldırıyor.
Port değiştirince adres uzuyor
Varsayılan porttan çıkınca kullanıcıların adresi sunucu.com:63636 gibi yazması gerekiyor. Bunu bir DNS SRV kaydı ile çözebilirsin, kullanıcı sadece alan adını yazar, port arka planda hallolur.
_ts3._udp.alanadin.tr. 3600 IN SRV 0 5 63636 alanadin.tr.
Alan adı sağlayıcının panelinde SRV kaydı olarak eklersin. Bu sitede kullandığımız yöntem bu, sorunsuz çalışıyor.
ServerQuery bağlantısı reddediliyor
TS6'da eski telnet tabanlı ServerQuery (10011 portu) tamamen kaldırılmış. Yerine iki seçenek var: SSH tabanlı query, ya da HTTP üzerinden çalışan WebQuery. İkisi de varsayılan olarak kapalı geliyor, servis dosyasına ortam değişkeni ekleyerek açman gerekiyor.
Eski Python kütüphaneleri (telnet üzerine kurulu olanlar) bu yüzden TS6 ile çalışmıyor. Otomasyon yazacaksan WebQuery üzerinden gitmek en pratiği.
Sonuç
Kurulumun kendisi yarım saatlik iş. Zamanın çoğu, dokümantasyonda geçmeyen ayrıntılarda gidiyor, dosya adları, kaldırılmış özellikler, ağ tarafındaki filtreler. Bu yazıdaki tuzakları bilerek başlarsan çok daha hızlı bitirirsin.