Mumble - это приложение для организации голосового чата. Проект является свободным, исходный код официальных клиентов и серверов открыты. Поддерживаются все основные операционные системы: Linux, MacOS и Windows, а также iOS и Android. Хорошую популярность имеет веб-клиент Mumble, который позволяет пользоваться голосовым чатом через веб-браузер.
Mumble имеет отличные характеристики передачи звука и от года к году набирает клиентскую базу, которая уходит от проприетарных проектов в пользу легковесного и эффективного аналога с полностью открытой экосистемой.
В этой статье рассмотрим конфигурацию собственного Mumble-сервера, работающего через скрытую сеть I2P. На сервере будет использован Debian в качестве операционной системы и i2pd в качестве I2P-роутера. Клиентское подключение также будет продемонстрировано на компьютере под управлением Debian. На практике различия в операционных системах клиентов или сервера не меняют сути, потому что используемые приложения являются кроссплатформенными и их конфиг везде выглядит одинаково (в том числе на любимой всеми Windows).
![](https://habrastorage.org/getpro/habr/upload_files/b7b/025/319/b7b02531959100949e0ffcf1930f5c33.png)
Сервер
Серверное приложение голосового чата распространяется через стандартные репозитории 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
, вы попадете на удаленный сервер и можете открывать его локальные адреса.
![](https://habrastorage.org/getpro/habr/upload_files/a3f/132/a3c/a3f132a3c67c712e0d8278db16506aeb.png)
Во вкладке "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". У сервера и клиента туннели состоят всего лишь из одного транзитного узла. Итого при соединении между сервером и клиентом оказывается всего два транзитных сервера против обычных шести (по три с каждой стороны). Этот компромисс является необходимым для обеспечения приемлемого качества голосовой связи.
![](https://habrastorage.org/getpro/habr/upload_files/f3b/7eb/b20/f3b7ebb2031e7423c549be9b04b65cb5.png)
При подключении к серверу указываем локальный адрес и порт, заданные в клиентском туннеле (127.0.0.1
, 64738
). После старта I2P-роутера требуется немного времени для создания туннелей, поэтому будьте готовы подождать минуту.
Если всё сделано правильно, в списке серверов напротив нового сервера вы увидите пинг. На скриншоте приведено два подключения к одному серверу: одно через Yggdrasil, другое через I2P. Разница в несколько раз, но даже при задержке в 300-600 миллисекунд Mumble обеспечивает комфортный диалог.
Самое главное в этой конфигурации, конечно, это голосовое общение, в рамках которого физическое месторасположение всех собеседников и сервера остается в тайне. Для тестового подключения можете воспользоваться приведенным выше клиентским конфигом.