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 обеспечивает комфортный диалог.
Самое главное в этой конфигурации, конечно, это голосовое общение, в рамках которого физическое месторасположение всех собеседников и сервера остается в тайне. Для тестового подключения можете воспользоваться приведенным выше клиентским конфигом.
Оригинальная статья опубликована в блоге дата-центра ITSOFT.
Автор: acetone