Mumble 1.3.4 配置参数详解

Mumble 服务端 murmur.ini 配置参数详解:ini 全局层与 D-Bus 数据库覆盖层双层模型、端口/访问/带宽/autoban/管理接口/TLS 证书逐节实测默认值、修改重启读回闭环与 # 注释符陷阱排障,基于 Ubuntu 22.04 + mumble-server 1.3.4 实测。

Mumble即时通信Mumble2026/10/21

Mumble 1.3.4 配置参数详解

目标:逐节讲清 Mumble 服务端配置文件 murmur.ini(Ubuntu 22.04 上为 /etc/mumble-server.ini)的核心参数:默认值、修改方法、生效验证与踩坑点,所有参数值与验证输出均在 Ubuntu 22.04 + mumble-server 1.3.4 环境实测取得。已在 Ubuntu 22.04(x86_64)环境实测通过。

一、环境信息

  • 操作系统:Ubuntu 22.04(jammy,x86_64);
  • 软件版本:mumble-server 1.3.4-1ubuntu1(jammy/universe 仓库;上游最新稳定版为 1.5.939,见《Mumble 1.5.939 介绍与选型指南》,两代配置文件键名高度一致,1.5.x 新增键见各节说明);
  • 配置文件:/etc/mumble-server.ini(实测 15895 字节,root:mumble-server 0640);
  • 数据库:/var/lib/mumble-server/mumble-server.sqlite(SQLite,服务专用用户 mumble-server 读写);
  • 服务单元:mumble-server.service(systemd 经 sysv-generator 托管 /usr/sbin/murmurd -ini /etc/mumble-server.ini);
  • 监听端口:64738(TCP+UDP 语音/控制)、6502(ICE 管理接口,本文实测启用后监听 127.0.0.1:6502);
  • 安装与部署过程见《Ubuntu 22.04 安装 Mumble 指南》。

二、前置条件

本篇的参数修改与验证需要一个运行中的 mumble-server 服务。验证服务是否就绪:

systemctl is-active mumble-server
ss -ltn | grep 64738
ss -lun | grep 64738

实测输出:

active
LISTEN 0      50           0.0.0.0:64738      0.0.0.0:*
UNCONN 0      0            0.0.0.0:64738      0.0.0.0:*

三条都符合预期(服务 active、TCP/UDP 均监听)即可继续;若未安装或未启动,先按《Ubuntu 22.04 安装 Mumble 指南》第四章完成部署。

另外,本篇大量使用 D-Bus 管理接口读回配置做「生效验证」,需确认 murmur 已注册到 system bus:

busctl list --no-pager | grep mumble

实测输出:

:1.17                         7646 murmurd         mumble-server   :1.17         mumble-server.service       -       -
:1.18                         7646 murmurd         mumble-server   :1.18         mumble-server.service       -       -
net.sourceforge.mumble.murmur 7646 murmurd         mumble-server   :1.17         mumble-server.service       -       -

💡 说明:net.sourceforge.mumble.murmur 名称由配置项 dbus=system 启用(1.3.4 的 Ubuntu 配置模板默认已开启该行;若被注释,去掉行首 ; 并重启即可)。

三、参数查看与修改方式

Mumble 服务端配置分两层,理解分层是用好管理接口的前提(本层模型经实测确认):

  • ini 文件层(全局默认层):/etc/mumble-server.ini 是 Murmur 进程的全局默认配置,对进程内全部虚拟服务器生效;修改后需 systemctl restart mumble-server 重载;
  • 数据库覆盖层(单服务器层):每个虚拟服务器可在 SQLite 数据库中按「键=值」覆盖全局默认,经 D-Bus 的 setConf/getConf 读写,对运行中的服务立即生效、无需重启。

两层均可在运行期查询:ini 层用 Meta.getDefaultConf(),数据库层用 Meta.getConf(服务器ID, 键)。D-Bus 调用示例(查 ini 层全部默认值,输出为键值字典,节选实测):

dbus-send --system --print-reply \
  --dest=net.sourceforge.mumble.murmur / net.sourceforge.mumble.Meta.getDefaultConf

实测输出(节选):

      dict entry(
         string "port"
         string "64738"
      )
      dict entry(
         string "users"
         string "200"
      )

修改 → 重启 → 读回的完整闭环实例(改欢迎文本、并发数、带宽三项):

1)编辑 /etc/mumble-server.ini(将对应行改为):

welcometext="<br/>Welcome to <b>Quzuo Voice</b> - powered by Murmur 1.3.4<br/>"
users=200
bandwidth=96000

2)重启生效:

sudo systemctl restart mumble-server
systemctl is-active mumble-server

实测输出:

active

3)用 D-Bus 读回验证(ini 层):

dbus-send --system --print-reply --dest=net.sourceforge.mumble.murmur / \
  net.sourceforge.mumble.Meta.getDefaultConf | grep -A1 -E '"(welcometext|users|bandwidth)"'

实测输出:

         string "bandwidth"
         string "96000"
         string "users"
         string "200"
         string "welcometext"
         string "<br/>Welcome to <b>Quzuo Voice</b> - powered by Murmur 1.3.4<br/>"

三项读回值与所改一致,闭环成立。

数据库层的动态修改实例(不重启立即生效):

dbus-send --system --print-reply --dest=net.sourceforge.mumble.murmur / \
  net.sourceforge.mumble.Meta.setConf int32:1 string:"welcometext" string:"per-server-override"
dbus-send --system --print-reply --dest=net.sourceforge.mumble.murmur / \
  net.sourceforge.mumble.Meta.getConf int32:1 string:"welcometext"

实测输出:

method return time=1792582017.381599 sender=:1.43 -> destination=:1.53 serial=12 reply_serial=2
   string "per-server-override"

清除覆盖(传空串即回到 ini 层默认):

dbus-send --system --print-reply --dest=net.sourceforge.mumble.murmur / \
  net.sourceforge.mumble.Meta.setConf int32:1 string:"welcometext" string:""
dbus-send --system --print-reply --dest=net.sourceforge.mumble.murmur / \
  net.sourceforge.mumble.Meta.getConf int32:1 string:"welcometext"

实测输出:

method return time=1792582017.386932 sender=:1.43 -> destination=:1.55 serial=14 reply_serial=2
   string ""

⚠️ 注意:getConf 只查数据库覆盖层,未做覆盖时返回空串(实测首次查询 welcometext/users 等均返回空)——这不是配置丢失,实际生效值要向 getDefaultConf(ini 层)查询。运维排障时先看覆盖层、再看 ini 层。

四、参数总览

murmur.ini 核心参数一览(默认值取自 Ubuntu 22.04 包模板与运行期 getDefaultConf 实测):

分类键默认值(实测)作用
网络port64738监听端口(TCP+UDP 共用)
网络timeout30客户端无响应判定超时(秒)
网络obfuscatefalse流量混淆(伪装为随机包,抗 DPI)
网络allowping模板注释(默认 false)允许客户端 ICMP 式 ping 探测
访问serverpassword(空)服务器加入口令
访问username[-=\w\[\]\{\}\(\)\@|\.]+用户名正则白名单
访问channelname[ \-=\w\#\[\]\{\}\(\)\@|]+频道名正则白名单
访问rememberchanneltrue记住用户上次所在频道
容量users100(模板)/200(本文已改)最大并发用户数
容量bandwidth72000(模板)/96000(本文已改)单用户语音带宽上限(bps)
体验welcometext模板欢迎语客户端进入时显示的欢迎文本
安全autobanAttempts / autobanTimeframe / autobanTime10 / 120 / 300连接风暴自动封禁三参数
管理dbussystem启用 D-Bus 管理接口(system bus)
管理ice(模板 # 注释态)ZeroC Ice 管理接口端点
管理icesecretread / icesecretwrite(空)Ice 连接读/写口令
存储database/var/lib/mumble-server/mumble-server.sqliteSQLite 库路径
存储logfile/var/log/mumble-server/mumble-server.log日志文件
TLSsslCert / sslKey(空=自动生成自签证书)服务器证书与私钥路径
进程pidfile模板注释守护进程 pid 文件路径

💡 技术拓展:参数名与「运行时键名」并非一一对应,最典型的是 serverpassword——ini 里写 serverpassword=team-voice-2026,而 D-Bus getDefaultConf/setConf 层的键名为 password(实测读回:string "password" / string "team-voice-2026")。经 D-Bus 做数据库层覆盖时应使用运行时键名;直接编辑 ini 则用模板键名。

五、核心参数分类详解

5.1 网络与端口(port / timeout / obfuscate)

这一组决定服务端「在哪里听、怎么听」。默认配置(Ubuntu 模板实测):

port=64738
;timeout=30
;obfuscate=false
  • port:TCP 与 UDP 共用端口;TCP 承载 TLS 加密的控制信令,UDP 承载语音。修改后必须同步放行防火墙两个协议,并用双命令验证(见 5.1.1);
  • timeout:客户端心跳超时秒数,默认 30;弱网客户端频繁掉线时可适当调大;
  • obfuscate:开启后语音包经混淆处理,外观近似随机字节,用于对抗运营商/防火墙的协议识别与 QoS 限速;代价是排障时抓包不可读。实测默认关闭。

5.1.1 端口修改闭环验证(以 64738 为例,改回验证思路相同):

sudo systemctl restart mumble-server
ss -ltn | grep 64738
ss -lun | grep 64738

实测输出:

LISTEN 0      50           0.0.0.0:64738      0.0.0.0:*
UNCONN 0      0            0.0.0.0:64738      0.0.0.0:*

两条都在才代表端口配置生效且双协议就绪。

5.2 认证与访问(serverpassword / username / channelname / rememberchannel)

serverpassword=
;username=[-=\w\[\]\{\}\(\)\@\|\.]+
;channelname=[ \-=\w\#\[\]\{\}\(\)\@\|]+
;rememberchannel=true
  • serverpassword:加入口令。设为非空后客户端连接时需输入口令(实测设为 team-voice-2026 后经 getDefaultConf 读回 password => team-voice-2026,见第四章键名映射说明)。注意:若服务器要在公共服务器列表注册(registername/registerpassword 一节),该值必须保持为空;
  • username / channelname:用户名与频道名的正则白名单,正则不匹配的名字会被服务端拒绝。实测运行期默认值:
username    = [-=\w\[\]\{\}\(\)\@\|\.]+
channelname = [ \-=\w\#\[\]\{\}\(\)\@\|]+

要点解读:channelname 允许空格而 username 不允许;两者都放行了 -\w[]{}()@| 等常见字符。收紧命名规范时改这两个正则即可(如频道只允许字母数字:channelname=[A-Za-z0-9]+),改后重启生效,可经 getDefaultConf 读回确认;

  • rememberchannel:用户重连后自动回到上次频道,默认开启(模板注释态即为默认值 true)。

5.3 容量与带宽(users / bandwidth)

users=200
bandwidth=96000
  • users:虚拟服务器最大并发。Ubuntu 模板默认 100,本文实测改为 200 并经 D-Bus 读回生效(string "users" / string "200");
  • bandwidth:单用户语音带宽上限(bit/s)。模板默认 72000;提升到 96000 可改善 Opus 高码率下的音质。容量规划要点:服务器出口带宽 ≈ bandwidth × 并发用户数(每用户向服务端推流一份、服务端向其余用户各转发一份,实际乘数随拓扑增长),小型团队(≤50 人同时在线)千兆内网无压力,公网部署按上行带宽倒推 users 上限。

修改后验证(与第三章闭环一致):

dbus-send --system --print-reply --dest=net.sourceforge.mumble.murmur / \
  net.sourceforge.mumble.Meta.getDefaultConf | grep -A1 '"bandwidth"'

实测输出:

         string "bandwidth"
         string "96000"

5.4 欢迎文本(welcometext)

welcometext="<br/>Welcome to <b>Quzuo Voice</b> - powered by Murmur 1.3.4<br/>"

客户端连接成功后在文本聊天区显示的欢迎信息,支持有限 HTML(<b/>、<br/> 等)。实测改动后经 getDefaultConf 读回与所写一致(见第三章闭环)。多行文本直接写一行内嵌 <br/> 更易维护。

5.5 自动封禁(autobanAttempts / autobanTimeframe / autobanTime)

Ubuntu 模板中的说明与默认(实测模板注释原文):

; If a client attempts autobanAttempts connections in autobanTimeframe seconds,
; they will be banned for autobanTime seconds. This is a global ban, from all
; virtual servers on the Murmur process.
;
; To disable, set autobanAttempts or autobanTimeframe to 0. Commenting these
; settings out will cause Murmur to use the defaults:
;
;autobanAttempts = 10
;autobanTimeframe = 120
;autobanTime = 300

语义:120 秒内尝试连接 10 次失败,即全局封禁 300 秒(对 Murmur 进程内全部虚拟服务器生效,普通用户无感知、仅针对异常客户端)。互联网暴露部署时保持默认即可;内网受信环境可设 0 关闭,避免网关代理场景误伤。三键取消注释修改后重启生效。

5.6 管理接口(dbus / ice / icesecretread / icesecretwrite)

murmur 提供两套进程外管理通道,模板相关行(实测原文):

dbus=system

;ice="tcp -h 127.0.0.1 -p 6502"
;icesecretread=
;icesecretwrite=
  • dbus=system:启用 D-Bus 管理接口并注册到 system bus(实测 busctl list 可见 net.sourceforge.mumble.murmur 名称,方法清单含 start/stop/newServer/setConf/getConf/setSuperUserPassword/getLog 等 Meta 层与 getPlayers/getChannels/addChannel/kickPlayer/setACL 等 Server 层方法;调用实例见第三章与《Mumble 1.3.4 常用 CLI 命令与工具详解》);
  • ice:ZeroC Ice 端点。实测踩坑(重点):Ubuntu 22.04 模板里该行以 # 开头(#ice="tcp -h 127.0.0.1 -p 6502"),而 murmur.ini 采用 Qt QSettings INI 语法只认 ; 注释——# 开头的行会被解析成键名 #ice,主键 ice 为空,ICE 静默不启用且日志无任何报错。实测对照:保持 # 形态重启,ss -ltn | grep 6502 无输出;改为无注释符的有效行后重启:
ice=tcp -h 127.0.0.1 -p 6502
sudo systemctl restart mumble-server
ss -ltn | grep 6502

实测输出:

LISTEN 0      4096       127.0.0.1:6502       0.0.0.0:*
  • icesecretread / icesecretwrite:Ice 连接的读/写口令。Ice 协议本身无认证(模板注释原文:"Since there is no authentication with ICE, you should only use it if you trust all the users who have shell access to your machine"),生产暴露面建议设置 icesecretwrite 并保持 Ice 端点只绑本机回环地址。

5.7 存储与日志(database / logfile)

database=/var/lib/mumble-server/mumble-server.sqlite
logfile=/var/log/mumble-server/mumble-server.log
;pidfile=
  • database:SQLite 库路径,承载用户注册、频道结构、ACL、封禁与数据库层配置。备份即备份该文件(停服后拷贝一致性最好,运行期拷贝建议连 -wal/-shm 一同处理);
  • logfile:服务端日志路径(包内默认经 init 脚本落到 /var/log/mumble-server/)。排障时最常用的两行——端口监听与启动完成:
grep -E "listening|Murmur" /var/log/mumble-server/mumble-server.log | tail -3

实测输出:

<W>2026-10-21 11:05:09.352 1 => Server listening on 0.0.0.0:64738
<W>2026-10-21 11:13:36.138 Murmur 1.3.4 (1.3.4-1ubuntu1) running on X11: Linux 6.8.0-138-generic: Booting servers
  • pidfile:默认注释。由 systemd/init 脚本托管时无需手工开启。

5.8 TLS 证书(sslCert / sslKey)

;sslCert=
;sslKey=

两键留空时,Murmur 首次启动自动生成自签证书("Murmur Autogenerated Certificate v2"),存入 SQLite 并在控制连接上使用。实测经 OpenSSL 从 64738 端口读回的证书:

timeout 8 openssl s_client -connect 127.0.0.1:64738 </dev/null 2>/dev/null \
  | openssl x509 -noout -subject -issuer -dates -fingerprint -sha256

实测输出:

subject=CN = Murmur Autogenerated Certificate v2
issuer=CN = Murmur Autogenerated Certificate v2
notBefore=Oct 21 11:05:09 2026 GMT
notAfter=Oct 16 11:05:09 2046 GMT
sha256 Fingerprint=BF:A0:24:62:3D:4E:04:A7:1E:D1:F9:BA:C5:39:3B:AD:F8:0F:81:AB:B7:95:FC:A1:5B:6D:47:67:22:B3:A0:02

要点解读:自签证书有效期 20 年,客户端首次连接会提示并记忆该指纹(TOFU 信任模型);需要企业 CA 或 Let's Encrypt 证书时,将证书/私钥路径填入 sslCert/sslKey 并重启,客户端指纹提示会随之更换。生产建议固定证书以避免换机/重装后指纹变化引发全员告警。

六、生产配置模板

适用场景:50 人以内团队/社区的自托管语音服务器,8GB 内存、公网或专线接入。以下为整理后的推荐参数集(键值均经本文实测验证可生效):

; ===== 网络 =====
port=64738
timeout=30
obfuscate=false

; ===== 访问控制 =====
serverpassword=team-voice-2026
channelname=[ \-=\w\#\[\]\{\}\(\)\@\|]+
username=[-=\w\[\]\{\}\(\)\@\|\.]+
rememberchannel=true

; ===== 容量与质量 =====
users=50
bandwidth=96000
welcometext="<br/>Welcome to <b>Quzuo Voice</b><br/>"

; ===== 防滥用 =====
autobanAttempts = 10
autobanTimeframe = 120
autobanTime = 300

; ===== 管理接口 =====
dbus=system
ice=tcp -h 127.0.0.1 -p 6502
icesecretwrite=q1w2e3r4

; ===== 存储与日志 =====
database=/var/lib/mumble-server/mumble-server.sqlite
logfile=/var/log/mumble-server/mumble-server.log

逐项说明:users=50 按团队规模收紧上限防资源失控;bandwidth=96000 在音质与带宽间平衡(50 人并发约需上行 5Mbps 转发量级);serverpassword 挡住陌生连接,配合 SuperUser/ACL 做内部权限;ice 显式启用且只绑 127.0.0.1,并设置 icesecretwrite 口令(示例值按 §测试口令惯例,生产请更换);autoban 三键保持默认防连接风暴。落盘后执行重启与双端口验证:

sudo systemctl restart mumble-server
ss -ltn | grep -E "64738|6502"
ss -lun | grep 64738

实测输出(形态):

LISTEN 0      50           0.0.0.0:64738      0.0.0.0:*
LISTEN 0      4096       127.0.0.1:6502       0.0.0.0:*
UNCONN 0      0            0.0.0.0:64738      0.0.0.0:*

七、常见问题(FAQ)

Q1:改了 ini 重启后行为没变?

按顺序排查两层:先用 Meta.getConf 查数据库覆盖层是否被早前的 setConf 覆盖(覆盖层优先于 ini);再用 Meta.getDefaultConf 确认 ini 值是否真正读入(读不到说明键名写错或行首残留了 #/; 注释符——见 5.6 节 ICE 的 # 坑)。实测中 getConf 未覆盖时返回空串,勿误判为「配置丢失」。

Q2:模板里 ; 和 # 注释混用,删哪个才生效?

murmur.ini 按 Qt QSettings INI 语法解析,注释符是 ;。以 # 开头的行不是注释,会被当作键名(如 #ice)处理。因此:想停用一个键,在行首加 ;;想启用一个键,必须删除行首的 # 或 ;(两者都要删干净),使行首直接是键名。

Q3:serverpassword 设置后客户端仍无需口令即可进入?

确认两点:其一,值已读入——getDefaultConf 应返回 password => 你的口令(注意运行时键名是 password);其二,数据库覆盖层没有 password => 空串 的旧覆盖(有则 getConf 层覆盖了 ini)。排除后重启服务再验证。

Q4:想换更高音质,动哪个参数?

调大 bandwidth(默认 72000,可到 96000 或更高)并同步评估上行带宽(≈ bandwidth × 转发份数),重启后经 getDefaultConf 读回确认。

Q5:证书指纹变了,全员客户端提示「证书不匹配」?

说明服务端证书被更换(重装系统/换了 sslCert)。这是 TOFU 机制的安全提示而非故障:管理员应把新指纹(openssl s_client 取回的 sha256 fingerprint,见 5.8 节实测)通过可靠渠道告知成员,确认一致后客户端接受新指纹。避免频繁变更的做法见 5.8 节要点。

八、参考链接

  • 官方配置文档(murmur.ini 全量键):https://wiki.mumble.info/wiki/Murmur.ini
  • 官方 Server 指南:https://www.mumble.info/documentation/server/
  • v1.5.939 发布公告(1.5 系配置演进):https://www.mumble.info/blog/mumble-1.5.939/
  • Ubuntu 模板文件:/usr/share/doc/mumble-server/examples/mumble-server.ini(与 /etc/mumble-server.ini 同源,查询日期 2026-10-21)
  • 本专栏相关篇目:《Mumble 1.5.939 介绍与选型指南》、《Ubuntu 22.04 安装 Mumble 指南》