Mumble - это приложение для организации голосового чата. Проект является свободным, исходный код официальных клиентов и серверов открыты. Поддерживаются все основные операционные системы: Linux, MacOS и Windows, а также iOS и Android. Хорошую популярность имеет веб-клиент Mumble, который позволяет пользоваться голосовым чатом через веб-браузер.
Mumble имеет отличные характеристики передачи звука и от года к году набирает клиентскую базу, которая уходит от проприетарных проектов в пользу легковесного и эффективного аналога с полностью открытой экосистемой.
В этой статье рассмотрим конфигурацию собственного Mumble-сервера, работающего через скрытую сеть I2P. На сервере будет использован Debian в качестве операционной системы и i2pd в качестве I2P-роутера. Клиентское подключение также будет продемонстрировано на компьютере под управлением Debian. На практике различия в операционных системах клиентов или сервера не меняют сути, потому что используемые приложения являются кроссплатформенными и их конфиг везде выглядит одинаково (в том числе на любимой всеми Windows).
Сервер
Серверное приложение голосового чата распространяется через стандартные репозитории Debian, поэтому его установка ограничится единственной командой: sudo apt install mumble-server
. Официальный сервер Mumble называется Murmur, но в репозитория Debian его почему-то решили назвать иначе.
После установки конфигурационный файл находится в /etc/mumble-server.ini
. Открываем его и первым делом указываем в параметре host
локальный адрес: host=127.0.0.1
. К этом адресу будет подключен серверный туннель I2P, а через обычный интернет сервер доступен не будет. Порт по умолчанию можно не менять. Также нам интересен параметр bandwidth
, который определяет максимальную ширину канала, занимаемую одним пользователем. После нескольких опытов, оптимальным значением кажется bandwidth=48000
. Последний значимый параметр это allowping=true
. Если вдруг у вас он в положении false
, поправьте, иначе нельзя будет увидеть задержку от клиента до сервера. Чтобы изменения вступили в силу, перезапустите mumble-server.
Теперь самое интересное - конфигурация туннелей I2P. Mumble использует протокол UDP для передачи потокового звука и TCP для управляющих команд, но в случае неполадок с UDP-соединением умеет работать без него. Правда, такой режим работы ощутимо дискомфортнее из-за задержек. Создадим два серверных туннеля: один для UDP, другой для TCP.
Если вы до сих пор не установили i2pd, сделайте это по официальной инструкции, либо возьмите подходящий deb-пакет из гит-репозитория. Для любителей кино есть хорошее видео с установкой.
Чтобы не засорять основной конфигурационный файл туннелей, создадим новый конфиг в директории /etc/i2pd/tunnels.conf.d/
. Название файла может быть любым, но должно заканчиваться на ".conf". Я создал файл /etc/i2pd/tunnels.conf.d/mumble-server.conf
. Как и договаривались, в конфиге два туннеля:
[mumble-server-tcp]
type = server
host = 127.0.0.1
port = 64738
inport = 64738
inbound.length = 1
outbound.length = 1
i2p.streaming.initialAckDelay = 20
crypto.ratchet.inboundTags = 500
keys = mumble.dat
[mumble-server-udp]
type = udpserver
host = 127.0.0.1
address = 127.0.0.1
port = 64738
inport = 64738
keys = mumble.dat
В целом параметры туннелей тривиальны, но с каждым в отдельности можете ознакомиться в документации. Обратите внимание, что во втором туннеле не указываются некоторые параметры. Это связано с тем, что i2pd применяет параметры туннеля к ключу, поэтому после одной подробной конфигурации следующие туннели с прежним ключом (в примере ключ называется mumble.dat
) неявно имеют те же параметры. Если ключа с указанным именем у вас нет, он будет создан автоматически.
Перезапускаем i2pd и идем в веб-консоль по адресу http://127.0.0.1:7070
. Если вы конфигурируете удаленный сервер, можете легко подключиться к локалхосту сервера, пробросив SOCKS-порт через ssh: $ ssh -D 8888 user@server
, где четыре восьмерки - это номер порта. Прописав в браузере SOCKS-прокси 127.0.0.1:8888
, вы попадете на удаленный сервер и можете открывать его локальные адреса.
Во вкладке "I2P tunnels" видим внутрисетевые адреса созданных туннелей. Они одинаковые, так как используется один ключ.
Клиент
Клиент под нужную операционную систему вы можете найти на официальной странице загрузок, либо в магазине приложений вашего смартфона. В Debian клиент ставится также просто, как и сервер: sudo apt install mumble
. Аналогично серверному решению устанавливается и i2pd.
Время создать клиентские туннели! Открываем на клиентской машине файл /etc/i2pd/tunnels.conf.d/mumble-client.conf
и вносим следующее содержимое (укажите свой адрес):
[mumble-client-tcp]
type = client
address = 127.0.0.1
port = 64738
destination = plpu63ftpi5wdr42ew7thndoyaclrjqmcmngu2az4tahfqtfjoxa.b32.i2p
destinationport = 64738
inbound.length = 1
outbound.length = 1
i2p.streaming.initialAckDelay = 20
crypto.ratchet.inboundTags = 500
keys = transient-mumble
[mumble-client-udp]
type = udpclient
address = 127.0.0.1
port = 64738
destination = plpu63ftpi5wdr42ew7thndoyaclrjqmcmngu2az4tahfqtfjoxa.b32.i2p
destinationport = 64738
keys = transient-mumble
В общем и целом клиентские туннели являются зеркальным отражением серверных. Возможно, вы обратили внимание на параметры со словом "length". У сервера и клиента туннели состоят всего лишь из одного транзитного узла. Итого при соединении между сервером и клиентом оказывается всего два транзитных сервера против обычных шести (по три с каждой стороны). Этот компромисс является необходимым для обеспечения приемлемого качества голосовой связи.
При подключении к серверу указываем локальный адрес и порт, заданные в клиентском туннеле (127.0.0.1
, 64738
). После старта I2P-роутера требуется немного времени для создания туннелей, поэтому будьте готовы подождать минуту.
Если всё сделано правильно, в списке серверов напротив нового сервера вы увидите пинг. На скриншоте приведено два подключения к одному серверу: одно через Yggdrasil, другое через I2P. Разница в несколько раз, но даже при задержке в 300-600 миллисекунд Mumble обеспечивает комфортный диалог.
Самое главное в этой конфигурации, конечно, это голосовое общение, в рамках которого физическое месторасположение всех собеседников и сервера остается в тайне. Для тестового подключения можете воспользоваться приведенным выше клиентским конфигом.
Комментарии (22)
tsifra
11.09.2021 10:33+1Если уж говорить о свободных альтернативах, то уместнее упомянуть https://matrix.org/ + TURN сервер. Настройка простецкая, за 20 минут https://matrix-org.github.io/synapse/latest/setup/installation.html
PS: может быть разработчики habr не в курсе, но он теперь через palemoon не работает
pureacetone Автор
11.09.2021 11:04Про Matrix ходит много разговоров, в сообществе скрытых (и не очень) сетей - тоже. Пока что большой популярности Matrix не имеет по ряду причин: неумение работать без HTTPS, громоздкие и неоптимизированные клиенты, крайне прожорливый сервер. В отличие от описанного, Mumble легко бегает даже на "кофеварке".
tsifra
11.09.2021 11:09Долго про него читал разное, но недавно решился настроить. У меня он через nginx reverse proxy работает с тем самым https. Хотя stand alone он вроде тоже https умеет. Кроме того, они сейчас работают над другими протоколами вроде noise pipes для экономии трафика. Сервер на примере нашей эксплуатации ест очень-очень скромно. Клиенты под android и apple возят хорошо и стабильно. Usability клиентов получше чем telegram будет. И самое главное шифрованые чатики и шифрованые группы можно расшаривать между несколькими устройствами (шах и мат telegram).
tsifra
11.09.2021 11:24извиняюсь. про https неверно прочитал. без https он как раз тоже работает без проблем
sirocco
11.09.2021 22:23Как? Он не только без https не работает, но он ещё и не работает с https, если сертификат самоподписный. Да и в целом я пытался этот матрикс сервер поднять, постоянно все сыпется, то этого нет, то там не верно, то всю память сожрёт... та ещё лажа. Как раз примерно год назад делал. Сейчас что-то поменялось?
tsifra
11.09.2021 22:27У нас 4 человека его уже около 3х недель гоняют в хвост и гриву. Переписка целый день, скриншотики, картиночки. Ни жора памяти ни падений не видели. Реально выглядит как очень-очень качественный софт. И клиент и сервер.
solntsepek
11.09.2021 21:54уместнее упомянуть https://matrix.org/
https://jitsi.github.io/handbook/docs/devops-guide/turn
jitsi meet ещё туда же
deadMamonth
11.09.2021 21:41Однако, у меня на нем году в 2010 голосовой сервер для клана в wot крутился, прикольно было.
Думал он умер уже, при таком количестве конкурентов
pureacetone Автор
11.09.2021 21:44Всяческие дискорды и видеозвонки во Вконтакте в рассчет не берем) Свободных проектов подобного характера немного.
Dewey
13.09.2021 06:53Mumble всё-таки специфический геймерский софт, я даже не очень понимаю, зачем геймерам i2p. Вот если бы кто-то посоветовал подобный сервер, работающий с железными телефонами, включёнными напрямую в роутер, я был бы признателен.
Nnnnoooo
Насколько я помню, то мамбл это просто войс чат, сделать обычный звонок нормально нельзя? Или что-то поменялось?
Maxim_Q
Ничего пока не поменялось. Это по большей части голосовой чат для геймеров, пока прямых звонков там нет.
Nnnnoooo
Печально, но спасибо за инфу.
sirocco
Голосовой чат это как? Как Zello? Давно ищу аналог Zello, чтоб именно на своём сервере поднять.
lagemeet
Нет, он далеко не похож на Zello.
Есть опенсоурс аналог называется Jam https://gitlab.com/jam-systems/jam
Stalker_RED
Mumble ближе к teamspeak или discord, это изначалоьно "болталка" для геймеров.
Я лет 10 не пользовался, но судя по скринам в UI ничего особо не поменялось
https://www.mumble.info/client-screenshots/public-server-list.png
Список каналов, куда подключаются юзеры, и могут разговаривать либо непрерывно, либо зажимая кнопку push-to-talk.
То есть чтобы с кем-нибудь поговорить нужно либо заранее договариваться типа "встречаемся в пятницу в 19:30 на канале world of tanks" либо по какому-то другому каналу пригласить собеседника в нужный чат.
Обычный же сценарий использования: по вечерам клан каких-нибудь варкрафтовцев, вов-овцев или контрстрайковцев заходит на сервер, просматривает список каналов чтобы понять где сейчас движуха, и входит в нужный канал.