Rehber

Kendi TeamSpeak sunucunu kurmak

Bu sunucuyu sıfırdan kurarken yaptığımız her adım, takıldığımız her yer ve nasıl çözdüğümüz. Rehberlerde yazmayan kısımlar dahil.

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"
Burada takıldık

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
Burada da takıldık

İ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:

Mutlaka kaydet

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
Dikkat

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.

Önce deneyip görmek istersen

Kurulum işine girişmeden önce TeamSpeak'in nasıl bir şey olduğunu görmek istersen, bu sunucu açık.

Sunucuya bağlan

Diğer yazılar