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)


  1. Nnnnoooo
    11.09.2021 00:14

    Насколько я помню, то мамбл это просто войс чат, сделать обычный звонок нормально нельзя? Или что-то поменялось?


    1. Maxim_Q
      11.09.2021 03:12

      Ничего пока не поменялось. Это по большей части голосовой чат для геймеров, пока прямых звонков там нет.


      1. Nnnnoooo
        11.09.2021 17:45

        Печально, но спасибо за инфу.


      1. sirocco
        11.09.2021 22:17

        Голосовой чат это как? Как Zello? Давно ищу аналог Zello, чтоб именно на своём сервере поднять.


        1. lagemeet
          11.09.2021 22:21

          Нет, он далеко не похож на Zello.

          Есть опенсоурс аналог называется Jam https://gitlab.com/jam-systems/jam


        1. Stalker_RED
          21.09.2021 12:43

          Mumble ближе к teamspeak или discord, это изначалоьно "болталка" для геймеров.
          Я лет 10 не пользовался, но судя по скринам в UI ничего особо не поменялось
          https://www.mumble.info/client-screenshots/public-server-list.png

          Список каналов, куда подключаются юзеры, и могут разговаривать либо непрерывно, либо зажимая кнопку push-to-talk.
          То есть чтобы с кем-нибудь поговорить нужно либо заранее договариваться типа "встречаемся в пятницу в 19:30 на канале world of tanks" либо по какому-то другому каналу пригласить собеседника в нужный чат.

          Обычный же сценарий использования: по вечерам клан каких-нибудь варкрафтовцев, вов-овцев или контрстрайковцев заходит на сервер, просматривает список каналов чтобы понять где сейчас движуха, и входит в нужный канал.


  1. decomeron
    11.09.2021 05:27

    IOS.

    Not Found

    The requested URL was not found on this server.


  1. 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 не работает


    1. pureacetone Автор
      11.09.2021 11:04

      Про Matrix ходит много разговоров, в сообществе скрытых (и не очень) сетей - тоже. Пока что большой популярности Matrix не имеет по ряду причин: неумение работать без HTTPS, громоздкие и неоптимизированные клиенты, крайне прожорливый сервер. В отличие от описанного, Mumble легко бегает даже на "кофеварке".


      1. tsifra
        11.09.2021 11:09

        Долго про него читал разное, но недавно решился настроить. У меня он через nginx reverse proxy работает с тем самым https. Хотя stand alone он вроде тоже https умеет. Кроме того, они сейчас работают над другими протоколами вроде noise pipes для экономии трафика. Сервер на примере нашей эксплуатации ест очень-очень скромно. Клиенты под android и apple возят хорошо и стабильно. Usability клиентов получше чем telegram будет. И самое главное шифрованые чатики и шифрованые группы можно расшаривать между несколькими устройствами (шах и мат telegram).


        1. Nnnnoooo
          11.09.2021 17:51

          Главный минус матрикса — нет временных сообщений.
          И насчет юзабилити андроид клиентов — это под очень большим вопросом. Но тут на вкус фломастеры разные :)


          1. tsifra
            11.09.2021 22:28

            У нас он для работы используется. Интерфейсы все прямо в масть.


      1. tsifra
        11.09.2021 11:24

        извиняюсь. про https неверно прочитал. без https он как раз тоже работает без проблем


        1. pureacetone Автор
          11.09.2021 16:30

          Спасибо. Значит, будем-с смотреть


        1. sirocco
          11.09.2021 22:23

          Как? Он не только без https не работает, но он ещё и не работает с https, если сертификат самоподписный. Да и в целом я пытался этот матрикс сервер поднять, постоянно все сыпется, то этого нет, то там не верно, то всю память сожрёт... та ещё лажа. Как раз примерно год назад делал. Сейчас что-то поменялось?


          1. tsifra
            11.09.2021 22:27

            У нас 4 человека его уже около 3х недель гоняют в хвост и гриву. Переписка целый день, скриншотики, картиночки. Ни жора памяти ни падений не видели. Реально выглядит как очень-очень качественный софт. И клиент и сервер.


    1. solntsepek
      11.09.2021 21:54

      уместнее упомянуть https://matrix.org/

      https://jitsi.github.io/handbook/docs/devops-guide/turn

      jitsi meet ещё туда же


      1. lagemeet
        11.09.2021 22:09

        для matrix и jitsi, больше подойдет сеть yggdrasil чем i2p


  1. deadMamonth
    11.09.2021 21:41

    Однако, у меня на нем году в 2010 голосовой сервер для клана в wot крутился, прикольно было.

    Думал он умер уже, при таком количестве конкурентов


    1. pureacetone Автор
      11.09.2021 21:44

      Всяческие дискорды и видеозвонки во Вконтакте в рассчет не берем) Свободных проектов подобного характера немного.


  1. kai3341
    13.09.2021 04:17
    +1

    Спасибо за статью! Интересное решение


  1. Dewey
    13.09.2021 06:53

    Mumble всё-таки специфический геймерский софт, я даже не очень понимаю, зачем геймерам i2p. Вот если бы кто-то посоветовал подобный сервер, работающий с железными телефонами, включёнными напрямую в роутер, я был бы признателен.