Свой голосовой сервер TeamSpeak на VPS работает круглосуточно, и друзья или команда могут заходить в нужный канал в любое время, даже когда ваш компьютер выключен. Вы сами решаете, сколько будет каналов, кто в них может говорить и кому дать права администратора. В этой статье мы установим сервер из официального архива, запустим его отдельным пользователем под управлением systemd, найдём ключ администратора и пароль ServerQuery, откроем порты, проверим их снаружи, подключимся клиентом и настроим резервные копии. В конце есть раздел про бета-версию TeamSpeak 6 Server. Все шаги мы повторили на тестовом сервере с Debian 12, версия сервера на момент проверки TeamSpeak 3 Server 3.13.8.
Как устроен сервер TeamSpeak
Сервер TeamSpeak – это программа, которая принимает голос от говорящего и пересылает его тем, кто сидит в том же канале. Потоки голоса сервер не смешивает, поэтому, когда говорят сразу несколько человек, он получает несколько потоков и каждому слушателю отправляет их все. Отсюда простое следствие для сети. Входящий трафик на сервере небольшой, а исходящий растёт вместе с числом слушателей и числом одновременно говорящих, и именно исходящий канал определяет, сколько людей потянет ваш сервер. Голос идёт по протоколу UDP на порт 9987. UDP не ждёт подтверждения каждого пакета, а в живом разговоре опоздавший пакет всё равно уже не нужен, поэтому задержка получается меньше, чем при TCP. Помимо голоса сервер слушает ещё несколько портов. По 30033/tcp клиенты передают файлы, аватары и иконки каналов. По 10011/tcp работает ServerQuery, текстовая консоль управления, через которую общаются боты, панели и сам администратор. Официальная справка TeamSpeak считает обязательными только 9987/udp и 30033/tcp, а порты ServerQuery необязательными, и в брандмауэре мы поступим так же.
В TeamSpeak нет учётных записей с логином и паролем. Когда клиент запускается впервые, он создаёт пару ключей, а сервер узнаёт человека по уникальному идентификатору, выведенному из открытого ключа. Права привязаны к этому идентификатору, а ник служит только подписью на экране. У такой схемы есть неудобство. Пока на новом сервере нет ни одного человека с правами, назначить первого администратора некому. Эту задачу решает ключ привилегий (privilege key, раньше он назывался token). Сервер создаёт его при самом первом запуске и показывает один раз. Кто введёт ключ в клиенте, попадает в группу Server Admin, а сам ключ после этого перестаёт работать. Второй секрет – это пароль ServerQuery для учётной записи serveradmin. Он тоже выдаётся один раз и открывает управление всеми виртуальными серверами. Поэтому поиск этих двух значений в шаге 4 важнее, чем может показаться.
У TeamSpeak сейчас два поколения сервера. На странице загрузок стабильным релизом остаётся TeamSpeak 3 Server 3.13.8, а TeamSpeak 6 Server выложен как бета для желающих попробовать, и README самого сервера прямо называет его неполным. Для сервера, который должен просто работать, ограничения беты существенны. Встроенная лицензия рассчитана на 32 места и продлевается раз в два месяца с выходом новых сборок, в проверенной нами сборке она действует до 1 декабря 2026 года. Лицензии TeamSpeak 3 к шестой версии не подходят, а переноса данных между версиями пока нет. Поэтому основную часть статьи мы посвятили стабильному TeamSpeak 3, а бете отвели отдельный раздел в конце. Сервер 3.13.8 при запуске сам пишет в журнал, что его встроенная лицензия действует до 1 июля 2027 года, так что к лету 2027 года стоит заглянуть на страницу загрузок за свежей версией.
Для компании нужна другая лицензия
Сервер без лицензионного ключа бесплатен и без ограничения по времени, но допускает один виртуальный сервер и до 32 слотов. Текст лицензии отдаёт такой режим только частным лицам и некоммерческим сообществам. Если сервер нужен компании, TeamSpeak предлагает отдельную коммерческую лицензию, условия узнают у самой TeamSpeak.
Что понадобится
- Сервер с Debian 12 и не меньше 1 ГБ памяти, как рекомендует справка TeamSpeak, например тариф DE-RZ9-1. Сам сервер TeamSpeak в простое занял у нас около 17 МБ. Если сервера ещё нет, закажите его по инструкции.
- Подключение по SSH, например через Termius. Команды выполняются от имени
root. - Клиент TeamSpeak у вас и у тех, кто будет заходить. Его скачивают на странице загрузок TeamSpeak на вкладке TeamSpeak 3, на момент проверки там была версия 3.6.2.
- Второй компьютер с Linux или macOS для проверки портов в шаге 6. Подойдёт и второй VPS.
Шаг 1. Создайте пользователя и скачайте сервер
Запускать сервер от имени root небезопасно, поэтому создадим для него отдельного пользователя teamspeak с домашней папкой /opt/teamspeak. Вход под этим пользователем отключён, сервером будет управлять systemd. Подробнее о пользователях рассказано в статье про пользователей Linux.
useradd -r -m -d /opt/teamspeak -s /usr/sbin/nologin teamspeakДля скачивания и распаковки архива нужны пакеты wget и bzip2. В нашем образе они уже стояли, а команда ниже на случай, если у вас их нет.
apt install -y wget bzip2Скачайте архив сервера. Адрес взят со страницы загрузок TeamSpeak, а если там уже вышла новая версия, замените 3.13.8 на неё в обоих местах.
cd /root
wget https://files.teamspeak-services.com/releases/server/3.13.8/teamspeak3-server_linux_amd64-3.13.8.tar.bz2Архив весит около 10 МБ. Распакуйте его в /opt/teamspeak и передайте файлы пользователю teamspeak.
tar -xjf teamspeak3-server_linux_amd64-3.13.8.tar.bz2 -C /opt/teamspeak --strip-components=1
chown -R teamspeak:teamspeak /opt/teamspeakПараметр --strip-components=1 убирает из путей внешнюю папку архива, поэтому файл ts3server оказывается прямо в /opt/teamspeak. После распаковки там около 22 МБ.
Шаг 2. Прочитайте лицензию и примите её
Сервер не запустится, пока вы явно не согласитесь с лицензией. Убедитесь в этом сами и запустите его вручную от имени teamspeak.
cd /opt/teamspeak
runuser -u teamspeak -- ./ts3serverСервер сразу завершится и объяснит, как принять лицензию.

Без согласия с лицензией сервер не стартует
Прочитать лицензию можно прямо в терминале. Она длинная, листайте клавишей Пробел, а выйти можно клавишей Q.
runuser -u teamspeak -- env TS3SERVER_LICENSE=view ./ts3server | lessСогласие с лицензией записывается пустым файлом .ts3server_license_accepted в рабочей папке сервера. TeamSpeak описывает ещё два способа, параметр license_accepted=1 в командной строке и переменную TS3SERVER_LICENSE=accept, но файл удобнее, потому что остаётся на месте после обновлений.
runuser -u teamspeak -- touch /opt/teamspeak/.ts3server_license_acceptedШаг 3. Настройте автозапуск
Чтобы сервер работал в фоне, запускался вместе с VPS и поднимался после сбоя, оформим его как службу systemd. Как устроены службы, подробно рассказано в статье про systemd.
nano /etc/systemd/system/teamspeak.serviceВставьте в файл текст ниже, сохраните сочетанием Ctrl + O, затем Enter, а выйдите из редактора сочетанием Ctrl + X.
[Unit]
Description=TeamSpeak 3 server
After=network-online.target
Wants=network-online.target
[Service]
User=teamspeak
WorkingDirectory=/opt/teamspeak
ExecStart=/opt/teamspeak/ts3server
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.targetПараметр WorkingDirectory важен, ведь именно в рабочей папке сервер ищет файл с согласием на лицензию и хранит базу, файлы и журналы. Сервер работает в обычном режиме, а не в фоновом, поэтому всё, что он пишет на экран, systemd складывает в журнал. Включите автозапуск и запустите службу.
systemctl daemon-reload
systemctl enable --now teamspeak
systemctl status teamspeak
Служба работает и включена в автозапуск
На нашем сервере первый запуск вместе с созданием базы занял около секунды, а в простое служба заняла 16,9 МБ памяти по данным systemd. Мы проверили, что служба переживает сбой. Когда мы принудительно завершили процесс командой kill -9, systemd запустил сервер заново через 10 секунд.
Управлять сервером теперь нужно через systemd.
systemctl stop teamspeakвыключает сервер.systemctl start teamspeakвключает его.systemctl restart teamspeakперезапускает.journalctl -u teamspeak -fпоказывает журнал в реальном времени, выйти можно сочетанием Ctrl + C. Подробнее о журналах рассказано в статье про логи Linux.
Шаг 4. Найдите ключ привилегий и пароль ServerQuery
При первом запуске сервер напечатал два секрета. Поскольку сервер работает под systemd, они лежат в журнале службы. Выведем из него только нужные строки.
journalctl -u teamspeak --no-pager -o cat | grep -E "loginname|apikey|token="
Пароль, ключ API и ключ привилегий (на снимке значения скрыты)
В ответе четыре строки.
- В первой строке имя учётной записи
serveradminи её пароль ServerQuery. - Во второй строке ключ API для управления сервером по HTTP, он пригодится только тем, кто пишет ботов и панели.
- В третьей и четвёртой строках один и тот же ключ привилегий, который понадобится в шаге 7. Сервер печатает его дважды, первый раз в строке журнала, второй раз в рамке.
Скопируйте эти значения в менеджер паролей. Ключ привилегий дополнительно записан в папке logs в файле журнала виртуального сервера, а вот пароль ServerQuery и ключ API в файлах журналов не попадают, их можно найти только в журнале systemd. Если журнал со временем очистится или вы потеряете значения раньше, ничего страшного, в разделе «Частые вопросы» ниже есть способ создать новый ключ и сбросить пароль.
Не отправляйте ключ и пароль никому
Ключ привилегий даёт права администратора на сервере, а пароль ServerQuery даёт полное управление всеми серверами. Не показывайте их на скриншотах и не пересылайте в мессенджерах. Если ключ попал не в те руки до того, как вы им воспользовались, создайте новый, как описано в разделе «Частые вопросы».
Шаг 5. Откройте порты в UFW
Если на VPS включён брандмауэр UFW, откройте порт голоса и порт передачи файлов. Эти два порта нужны всем, кто будет заходить на сервер. Подробнее о брандмауэре рассказано в статье про UFW.
ufw allow 9987/udp
ufw allow 30033/tcpПорт ServerQuery 10011 открывать всему интернету не стоит. Пароль в нём передаётся открытым текстом, а официальное руководство сервера называет этот вариант прежним по умолчанию и настоятельно советует более защищённые протоколы. Если вам нужен доступ к ServerQuery с домашнего компьютера, откройте порт только для своего адреса. Для проверки в шаге 6 мы сделали именно так, вместо IP-вашего-компьютера подставьте свой внешний адрес.
ufw allow from IP-вашего-компьютера to any port 10011 proto tcp
ufw status
Голос и файлы открыты всем, ServerQuery только одному адресу
Сам сервер слушает больше портов, чем мы открыли. Кроме голоса и передачи файлов он принимает подключения ServerQuery по трём вариантам, обычному на 10011, по SSH на 10022 и по HTTP на 10080, причём на всех адресах сразу. Проверить это можно командой ss.
ss -tuln | grep -E "Netid|:(9987|10011|10022|10080|30033) "
Порты, которые слушает сервер TeamSpeak
Порты 10022 и 10080 в брандмауэре мы не открывали, и с другого компьютера они не отвечают. Так лучше всего и оставить.
Шаг 6. Проверьте порты снаружи
Проверять порты нужно с другого компьютера. Если запустить проверку на самом сервере, она пройдёт даже при закрытом брандмауэре, потому что трафик идёт через внутренний интерфейс, который брандмауэр не ограничивает. Мы проверяли с компьютера под macOS, на Linux команды те же.
Сначала проверим порт передачи файлов. Он работает по TCP, поэтому достаточно утилиты nc.
nc -vz IP-адрес-сервера 30033Ответ succeeded означает, что порт открыт и сервер отвечает.
С голосовым портом сложнее, потому что UDP не отвечает на простую проверку соединения. Мы написали короткий скрипт на Python, который отправляет первый пакет рукопожатия, с которого клиент начинает подключение, и ждёт ответа три секунды. Это не официальная утилита, мы сделали её сами, чтобы проверять порт без графического клиента. Создайте файл.
nano ts3-udp-check.pyimport os, socket, struct, sys, time
host = sys.argv[1]
port = int(sys.argv[2]) if len(sys.argv) > 2 else 9987
# Первый пакет рукопожатия TeamSpeak, как его отправляет клиент
data = struct.pack('>IBI', 1566914096, 0, int(time.time())) + os.urandom(4) + bytes(8)
packet = b'TS3INIT1' + struct.pack('>HH', 101, 0) + b'\x88' + data
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.settimeout(3)
s.sendto(packet, (host, port))
try:
reply, addr = s.recvfrom(2048)
print('Сервер ответил, порт доступен')
except socket.timeout:
print('Ответа нет, порт закрыт или сервер не запущен')Запустите его, указав адрес сервера и порт.
python3 ts3-udp-check.py IP-адрес-сервера 9987Наконец, проверим ServerQuery. Подключитесь к порту 10011, сервер приветствует вас строкой TS3. Затем введите команды по одной. Вместо ПАРОЛЬ подставьте пароль ServerQuery из шага 4.
nc IP-адрес-сервера 10011login serveradmin ПАРОЛЬ
version
quit
Все три порта отвечают, сервер сообщает версию 3.13.8
Ответ error id=0 msg=ok на команду login означает, что пароль принят, а в ответ на version сервер называет свою версию и платформу. На нашем сервере до команд ufw allow скрипт молчал и сообщал об отсутствии ответа, а после них ответ приходил примерно за 60 миллисекунд.
После проверки уберите правило для ServerQuery, если оно вам больше не нужно.
ufw delete allow from IP-вашего-компьютера to any port 10011 proto tcpШаг 7. Подключитесь клиентом и станьте администратором
Дальше шаги описаны по официальной справке TeamSpeak 3, потому что графический клиент мы на тестовом сервере не запускали. Названия пунктов меню взяты оттуда.
- Установите клиент TeamSpeak 3 и запустите его.
- В меню Connections выберите Connect.
- В поле адреса введите IP-адрес сервера. Если сервер работает на порту 9987, порт указывать не нужно, а для другого порта используйте запись
IP:ПОРТ. - Введите ник, под которым вас будут видеть другие. Поле пароля сервера оставьте пустым, пока вы его не задали.
- Нажмите кнопку подключения.
Вы попадёте на сервер как обычный пользователь без прав администратора. Чтобы получить их, в меню Permissions выберите Use Token и вставьте ключ привилегий из шага 4. Если всё получилось, рядом с вашим ником появится значок SA. Ключ одноразовый, поэтому после успешного ввода он перестанет работать. Чтобы выдать права ещё кому-нибудь, откройте в меню Permissions пункт Token Manager, нажмите Add Token, выберите тип Server Group и группу Server Admin, а затем нажмите Create. В приложении для iOS пункт для ввода ключа называется Use Privilege Key.
Теперь можно настроить сервер. Щёлкните правой кнопкой мыши по имени сервера над верхним каналом и выберите Edit Virtual Server. Среди прочего там задаётся общий пароль сервера. Он нужен, если вы не хотите, чтобы на сервер заходил любой, кто узнает адрес. Ссылку для друзей можно оформить в виде ts3server://IP-адрес-сервера?port=9987, по клику на неё клиент сам подключится к серверу. Вместо IP-адреса удобно использовать домен, как это сделать, описано в статье про привязку домена.
Клиент TeamSpeak 6 тоже подойдёт
По справке TeamSpeak, клиент шестой версии может подключаться к серверу TeamSpeak 3, но получит только возможности третьей версии. Клиент TeamSpeak 6 на странице загрузок тоже пока бета, и при первом запуске он просит создать аккаунт myTeamSpeak.
Резервные копии
Всё, что TeamSpeak хранит, лежит внутри /opt/teamspeak. По официальной справке для переноса сервера на другую машину нужны следующие файлы.
ts3server.sqlitedbсодержит базу со всеми каналами, группами, правами и пользователями, и это самый важный файл.- Папка
filesхранит загруженные файлы, иконки и аватары. query_ip_allowlist.txtиquery_ip_denylist.txtсодержат списки адресов для ServerQuery. В справке они названыwhitelistиblacklist, в версии 3.13.8 файлы называются именно так, как мы написали.licensekey.datесть только у тех, кто купил лицензию.ssh_host_rsa_keyхранит ключ SSH-варианта ServerQuery, его мы добавили сами, чтобы после восстановления ключ сервера не менялся.
Простое копирование ts3server.sqlitedb на работающем сервере ненадёжно. SQLite пишет изменения сначала в соседний журнальный файл и переносит их в основной файл не сразу. Мы проверили это на нашем сервере. После создания двух каналов копия одного основного файла содержала только один канал вместо трёх, а копия средствами самой SQLite сохранила все три. Поэтому используем утилиту sqlite3 с командой .backup, которая делает согласованную копию без остановки сервера.
apt install -y sqlite3
nano /opt/teamspeak/backup.shСкрипт сохраняет базу и файлы в архив в папке /opt/teamspeak/backups и хранит 7 последних архивов.
#!/bin/sh
# Копия базы и файлов TeamSpeak без остановки сервера, хранит 7 последних архивов
set -e
cd /opt/teamspeak
mkdir -p backups
tmp=$(mktemp -d)
sqlite3 ts3server.sqlitedb ".backup '$tmp/ts3server.sqlitedb'"
cp -a files query_ip_allowlist.txt query_ip_denylist.txt ssh_host_rsa_key "$tmp"/
[ -f licensekey.dat ] && cp -a licensekey.dat "$tmp"/
tar -czf "backups/teamspeak-$(date +%F-%H%M).tar.gz" -C "$tmp" .
rm -rf "$tmp"
ls -1t backups/teamspeak-*.tar.gz | tail -n +8 | xargs -r rm --Сделайте скрипт исполняемым, запустите его вручную и добавьте в расписание пользователя teamspeak, например каждую ночь в 4:00.
chmod +x /opt/teamspeak/backup.sh
chown teamspeak:teamspeak /opt/teamspeak/backup.sh
runuser -u teamspeak -- /opt/teamspeak/backup.sh
echo "0 4 * * * /opt/teamspeak/backup.sh" | crontab -u teamspeak -
В архиве база, список адресов и ключ SSH, а также папка files
Мы проверили скрипт и вручную, и по расписанию, оба раза архив появился. Подробнее о расписании рассказано в статье про cron. Копии на этом же сервере не спасут, если пропадёт сам сервер, поэтому время от времени скачивайте архивы к себе или отправляйте их на другой сервер, например командой rsync.
Чтобы восстановить сервер из копии, остановите службу, удалите текущие базу и файлы, распакуйте нужный архив и запустите службу снова. Вместо имени архива в примере подставьте своё.
systemctl stop teamspeak
rm -rf /opt/teamspeak/ts3server.sqlitedb* /opt/teamspeak/files
tar -xzf /opt/teamspeak/backups/teamspeak-2026-10-21-1503.tar.gz -C /opt/teamspeak
chown -R teamspeak:teamspeak /opt/teamspeak
systemctl start teamspeakМы проверили восстановление на нашем сервере. После него вернулись название сервера, оба канала, прежний пароль ServerQuery и прежний ключ привилегий. Команда rm заодно удаляет временные файлы базы с окончаниями -wal и -shm, чтобы сервер начал работу с чистого состояния.
Сервер без базы стартует как новый
Если запустить сервер без файла ts3server.sqlitedb, он создаст пустую базу и выдаст новые пароль ServerQuery и ключ привилегий. Мы убедились в этом, временно убрав базу, и затем вернули данные из копии. Поэтому не удаляйте базу, не имея свежего архива.
Обновление сервера
Сервер обновляется заменой файлов. В документации к серверу TeamSpeak сказано просто скопировать новые файлы поверх старых. База и настройки при этом не затрагиваются, потому что в архиве их нет. Мы повторили этот порядок на нашем сервере. Новее версии 3.13.8 на тот момент не было, поэтому мы распаковали ту же версию поверх установленной. Каналы, ключи и настройки остались на месте, а в журнале после запуска снова появилась строка с версией. Перед обновлением сервер останавливается и делается резервная копия скриптом из предыдущего раздела.
systemctl stop teamspeak
runuser -u teamspeak -- /opt/teamspeak/backup.sh
cd /root
wget https://files.teamspeak-services.com/releases/server/НОВАЯ-ВЕРСИЯ/teamspeak3-server_linux_amd64-НОВАЯ-ВЕРСИЯ.tar.bz2
tar -xjf teamspeak3-server_linux_amd64-НОВАЯ-ВЕРСИЯ.tar.bz2 -C /opt/teamspeak --strip-components=1
chown -R teamspeak:teamspeak /opt/teamspeak
systemctl start teamspeakПоследняя команда chown обязательна. Мы распаковывали архив от имени root, и после распаковки файл ts3server принадлежал root. Проверить версию после запуска можно по журналу.
journalctl -u teamspeak -n 80 --no-pager -o cat | grep "TeamSpeak 3 Server"Список изменений каждой версии лежит в файле /opt/teamspeak/CHANGELOG.
TeamSpeak 6 как бета-версия сервера в Docker
Если вы хотите попробовать новое поколение, TeamSpeak рекомендует для TeamSpeak 6 Server установку через Docker. Как поставить сам Docker, рассказано в статье про установку Docker. Мы проверили сборку 6.0.0-beta13.1. Образ занимает около 60 МБ, а контейнер в простое занял около 20 МБ памяти. Набор портов у шестой версии почти прежний. Голос идёт на 9987/udp, передача файлов на 30033/tcp, а ServerQuery по умолчанию не включён. Мы проверили это снаружи, на порт 10011 приходит отказ в соединении. Включить его можно параметрами сервера, по документации ему отведены порты 10022 для SSH и 10080 для HTTP.
Запустите команду из официального README сервера. Мы добавили к ней --restart unless-stopped, чтобы контейнер поднимался после перезагрузки VPS. Согласие с лицензией здесь задаётся переменной TSSERVER_LICENSE_ACCEPTED=accept, а данные хранятся в томе teamspeak-data.
docker run -d --name teamspeak-server --restart unless-stopped \
-p 9987:9987/udp -p 30033:30033 \
-e TSSERVER_LICENSE_ACCEPTED=accept \
-v teamspeak-data:/var/tsserver \
teamspeaksystems/teamspeak6-server:latest
Контейнер TeamSpeak 6 запущен
Ключ привилегий и пароль ServerQuery сервер печатает при первом запуске так же, как и третья версия, только искать их нужно в журнале контейнера.
docker logs teamspeak-server 2>&1 | grep -E "loginname|apikey|token="
Ключ и пароль в журнале контейнера (на снимке значения скрыты)
Обновляется контейнер заменой образа. Мы проверили порядок, после него данные остались в томе, а новый ключ и пароль не создавались.
docker pull teamspeaksystems/teamspeak6-server:latest
docker stop teamspeak-server
docker rm teamspeak-serverПосле этого повторите команду docker run из этого раздела. Если вы меняете порт передачи файлов, добавьте переменную TSSERVER_FILE_TRANSFER_PORT с тем же номером и опубликуйте тот же номер порта на хосте, потому что клиенты подключаются к этому порту напрямую. Мы проверили это на порту 30034.
Docker открывает порты в обход UFW
Порты, опубликованные через -p, Docker открывает сам, и правила UFW на них не действуют. Мы запустили контейнер на портах 9988 и 30034 без единого правила в UFW, и с другого компьютера оба порта ответили. Публикуйте только те порты, которые должны быть открыты всем.
Что нужно знать о бете
В README сервера сказано, что это бета и некоторые функции ещё не готовы. Встроенная лицензия на 32 места продлевается новыми сборками, в нашей сборке она действует до 1 декабря 2026 года, так что сервер придётся обновлять. Лицензии TeamSpeak 3 к нему не подходят, а переноса данных между версиями нет. Если третья и шестая версии стоят на одном сервере, им нужны разные порты.
Частые вопросы
Please set the environment variable TS3SERVER_LICENSE to "accept" in order to accept the license agreement
Сервер не нашёл согласия с лицензией и завершился. Мы получили это сообщение при первом ручном запуске. Создайте пустой файл .ts3server_license_accepted в рабочей папке сервера, как показано в шаге 2, и убедитесь, что в службе systemd указан WorkingDirectory=/opt/teamspeak, ведь файл ищется именно в рабочей папке.
local accounting reports an already running instance, instance will shutdown
Без лицензионного ключа TeamSpeak разрешает запустить на одной машине только один сервер. Мы получили эту строку, когда запустили вторую копию, пока работала служба, и вторая копия сразу остановилась. Чаще всего это значит, что вы запускаете сервер вручную, а служба systemd уже работает. Остановите лишнюю копию или управляйте сервером только через systemctl.
error id=520 msg=invalid\sloginname\sor\spassword
Пароль ServerQuery не подошёл. Символы \s в ответе означают пробел, так ServerQuery записывает пробелы. Возьмите пароль из журнала, как в шаге 4. Если пароль потерян, его можно сбросить. Остановите службу и один раз запустите сервер вручную с параметром serveradmin_password, а когда он выведет строки о запуске, остановите его сочетанием Ctrl + C и снова запустите службу.
systemctl stop teamspeak
cd /opt/teamspeak
runuser -u teamspeak -- ./ts3server serveradmin_password=НОВЫЙ-ПАРОЛЬ
systemctl start teamspeakМы проверили этот способ, после него прежний пароль перестал подходить, а новый заработал. Учтите, что пароль останется в истории команд, поэтому справка TeamSpeak советует после входа выполнить команду clientsetserverquerylogin client_login_name=serveradmin. Сервер выведет новый пароль, и его уже не будет в истории.
error id=3329 msg=connection\sfailed,\syou\sare\sbanned extra_msg=you\smay\sretry\sin\s600\sseconds
Сработала защита ServerQuery от подбора пароля. Мы получили этот ответ после трёх неверных паролей подряд, адрес был заблокирован на 600 секунд. Подождите это время или перезапустите службу командой systemctl restart teamspeak, мы проверили, что перезапуск снимает блокировку. Адреса из файла query_ip_allowlist.txt защита не трогает, в нём по умолчанию записаны 127.0.0.1 и ::1. Добавление адреса в этот файл действует сразу, но уже наложенную блокировку не снимает, для этого нужен перезапуск.
No reply from server или Connection Error [0x705]
Клиент не получил ответа от сервера. Справка TeamSpeak называет частые причины, это неверный адрес или порт, незапущенный сервер и брандмауэр, который режет трафик. Проверьте по порядку.
- Служба работает,
systemctl status teamspeakпоказывает active (running). - Порт 9987/udp открыт,
ufw statusсодержит правило для него. - Проверка из шага 6 отвечает. Когда мы нарочно убрали правило для 9987/udp, скрипт сообщил, что ответа нет, а после команды
ufw allow 9987/udpответ вернулся. - Если сервер работает не на порту 9987, адрес в клиенте нужно писать в виде
IP:ПОРТ.
Потерян ключ привилегий или он уже использован
Новый ключ создаётся командой ServerQuery. Зайдите в консоль прямо на сервере, адрес 127.0.0.1 защита от подбора пароля не блокирует, и порт в брандмауэре открывать не нужно.
nc 127.0.0.1 10011Введите по очереди три команды, вместо ПАРОЛЬ подставьте пароль ServerQuery.
login serveradmin ПАРОЛЬ
use 1
servergrouplistВ списке групп найдите строку name=Server\sAdmin с признаком type=1. У строки с type=0 другое назначение, это шаблон для будущих серверов. На нашем сервере нужная группа имела номер 6. Подставьте свой номер в следующую команду.
privilegekeyadd tokentype=0 tokenid1=6 tokenid2=0 tokendescription=new\sadminСервер ответит строкой token=…, это и есть новый ключ. Мы проверили команду, ключ создался и появился в списке команды privilegekeylist. Выйти из консоли можно командой quit.
Unable to open licensekey.dat, falling back to limited functionality
Это не ошибка, а предупреждение о том, что сервер работает без купленной лицензии. В журнале рядом видно, что лицензия называется No License, допускает один виртуальный сервер и 32 слота. Для личного сервера этого достаточно.
Please set the environment variable TSSERVER_LICENSE_ACCEPTED to "accept" in order to accept the license agreement
Так ведёт себя контейнер TeamSpeak 6, если запустить его без переменной с согласием на лицензию, мы получили это сообщение именно так. Добавьте в команду docker run параметр -e TSSERVER_LICENSE_ACCEPTED=accept.
Наши ресурсы
Telegram-канал: https://t.me/f3cloud_news
Официальный сайт: https://f3cloud.com