Ubuntu 22.04 安装 Kamailio 6.1 指南
Ubuntu 22.04 从零安装 Kamailio 6.1.5 SIP 服务器:官方 apt 仓库与发行版仓库双方案实测、服务托管配置、SIP 注册验证、403 Not relaying 排障实录与完整卸载流程。
Ubuntu 22.04 安装 Kamailio 6.1 指南
目标:在 Ubuntu 22.04 服务器上从零安装 Kamailio 6.1.5 SIP 服务器,覆盖官方 apt 仓库与 Ubuntu 发行版仓库两种安装方案、服务托管配置、SIP 注册验证、403 Not relaying 排障实录与完整卸载流程。已在 Ubuntu 22.04.5 LTS(x86_64)实测通过,Kamailio 版本 6.1.5(官方仓库 kamailio61,2026-10-22 查询时最新稳定版)。
一、环境信息
本文所有命令与回显均在以下真实环境实测采集:
- 操作系统:Ubuntu 22.04.5 LTS(x86_64),
PRETTY_NAME="Ubuntu 22.04.5 LTS" - Kamailio:6.1.5(官方 apt 仓库
deb.kamailio.org/kamailio61,软件包版本6.1.5+ubuntu22.04) - SIP 监听端口:默认
5060(UDP/TCP),第七章演示自定义监听5070 - 服务器 IP:
10.0.0.8(测试环境内网地址,下文所有配置以此为例) - 关键目录:
/etc/kamailio/:主配置目录(kamailio.cfg、kamctlrc)/etc/default/kamailio:开机启动开关与内存参数/lib/systemd/system/kamailio.service:systemd 服务单元/usr/sbin/kamailio:主程序;/usr/sbin/kamctl、/usr/sbin/kamcmd:管理 CLI
二、前置条件
安装前确认以下四项,避免安装后无法启动或无法联机:
- 一台 Ubuntu 22.04 服务器:具备 root 或 sudo 权限,磁盘剩余空间 ≥ 200 MB(主包安装后占用约 52 MB,含依赖)。
- 软件源可达:能访问
archive.ubuntu.com(系统源)与deb.kamailio.org(Kamailio 官方源);内网机器需提前打通代理或自建软件源。 - 防火墙放行 SIP 端口:Kamailio 默认监听 UDP/TCP 5060,公网或跨网段部署需放行:
ufw allow 5060/udp ufw allow 5060/tcp - 时间同步:SIP Digest 认证、TLS 证书校验都依赖系统时间,安装前确认
timedatectl状态正常:实测回显(节选):timedatectl status | head -5Local time: 三 2026-10-22 10:30:00 CST Universal time: 三 2026-10-22 02:30:00 UTC Time zone: Asia/Shanghai (CST, +0800) NTP service: active
三、版本选型说明
Kamailio 官方通过 GitHub Releases(releases.atom)发布版本,2026-10-22 实查当前有三条维护线并行:
| 维护线 | 最新版本 | 说明 |
|---|---|---|
| 6.1.x(最新稳定线) | 6.1.5 | 当前主推版本,新特性与优化集中在此线 |
| 6.0.x(上一稳定线) | 6.0.8 | 6.1 前的稳定分支,仅维护性更新 |
| 5.8.x(长期维护线) | 5.8.8 | 老版本维护分支,存量环境使用 |
💡 说明:实查方式为 Kamailio 官方 GitHub 仓库的
releases.atom订阅源(https://github.com/kamailio/kamailio/releases.atom),条目按发布时间倒序,2026-10-22 查询时最新条目为 6.1.5,其次 6.0.8、5.8.8。查询日期须随实际部署时间更新,选型取所属维护线的最新小版本。
Ubuntu 22.04 上两个可安装渠道的版本对照如下(实测 apt-cache policy 输出):
| 渠道 | 实测可装版本 | 源地址 |
|---|---|---|
| Kamailio 官方仓库(kamailio61) | 6.1.5+ubuntu22.04 | http://deb.kamailio.org/kamailio61 jammy/main |
| Ubuntu 发行版仓库(universe) | 5.5.4-1 | http://archive.ubuntu.com/ubuntu jammy/universe |
关键差异:官方源跟随上游发版节奏,能拿到最新稳定版 6.1.5;发行版仓库随 Ubuntu 22.04 发布冻结,停留在 5.5.4,与最新线相差一个大版本代际。生产环境推荐官方仓库方案(第四章),需要严格使用发行版认证包的场景(如离线合规要求)再选第五章方案。
四、官方 apt 仓库在线安装方案(A:推荐)
本章完成 Kamailio 官方 apt 仓库的从零安装:配置签名密钥与软件源 → 安装主包 → 启用启动开关 → 启动验证。安装完成后得到一个监听 5060 端口、可用 systemd 托管的 Kamailio 服务。
4.1 配置官方软件源
官方仓库使用 GPG 签名,先安装签名密钥再登记源地址。安装基础工具:
apt-get update
apt-get install -y curl gnupg
获取 Kamailio 打包团队的签名公钥并转为 keyring 格式:
curl -s http://pkg.kamailio.org/debian/kamailiodebkey.gpg | gpg --dearmor > /usr/share/keyrings/kamailio.gpg
登记 kamailio61 仓库(Ubuntu 22.04 代号 jammy):
echo "deb [signed-by=/usr/share/keyrings/kamailio.gpg] http://deb.kamailio.org/kamailio61 jammy main" > /etc/apt/sources.list.d/kamailio.list
刷新索引并确认仓库生效,实测回显:
apt-get update
Hit:5 http://archive.ubuntu.com/ubuntu jammy-updates InRelease
Hit:6 http://archive.ubuntu.com/ubuntu jammy-backports InRelease
Fetched 13.5 kB in 1s (11.5 kB/s)
Reading package lists...
无 GPG error / NO_PUBKEY 报错即签名校验通过。
⚠️ 排障实录:若
curl拉取密钥时 HTTPS 不通(实测pkg.kamailio.org的 HTTPS 在部分网络环境握手失败,curl返回HTTP:000 SIZE:0),且apt-get update报NO_PUBKEY FB40D3E6508EA4C8,可改从 Ubuntu 公共密钥服务器直接取公钥(完整指纹E79ACECB87D8DCD23A20AD2FFB40D3E6508EA4C8):apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys FB40D3E6508EA4C8 apt-key export FB40D3E6508EA4C8 > /usr/share/keyrings/kamailio.gpg实测回显:
gpg: Total number processed: 1/gpg: imported: 1。同时把源地址写成http://(而非https://)可避开握手问题;两种取钥方式得到的都是同一把 Kamailio Package Team 签名钥(uid:pkg@kamailio.org)。
4.2 安装 kamailio 主包
主包 kamailio 是核心程序 + 默认模块的元包,MySQL/Lua/TLS 等扩展模块以独立子包形式按需安装。执行安装:
DEBIAN_FRONTEND=noninteractive apt-get install -y kamailio
实测输出(节选,完整 85 行):
Reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed:
libexpat1 libmpdec3 libpython3-stdlib libpython3.10-minimal
libpython3.10-stdlib media-types python3 python3-minimal python3.10
python3.10-minimal
Suggested packages:
kamailio-cpl-modules kamailio-ldap-modules kamailio-lua-modules
kamailio-mysql-modules kamailio-perl-modules kamailio-postgres-modules
kamailio-presence-modules kamailio-python-modules kamailio-radius-modules
kamailio-snmpstats-modules kamailio-tls-modules kamailio-unixodbc-modules
kamailio-xml-modules kamailio-xmpp-modules stun-server | turn-server
python3-doc python3-tk python3-venv python3.10-doc binutils
binfmt-support
The following NEW packages will be installed:
kamailio libexpat1 libmpdec3 libpython3-stdlib libpython3.10-minimal
libpython3.10-stdlib media-types python3 python3-minimal python3.10
python3.10-minimal
0 upgraded, 11 newly installed, 0 to remove and 4 not upgraded.
Need to get 16.5 MB of archives.
After this operation, 51.7 MB of additional disk space will be used.
Get:1 http://deb.kamailio.org/kamailio61 jammy/main amd64 kamailio amd64 6.1.5+ubuntu22.04 [10.8 MB]
...
Preparing to unpack .../kamailio_6.1.5+ubuntu22.04_amd64.deb ...
Unpacking kamailio (6.1.5+ubuntu22.04) ...
Setting up kamailio (6.1.5+ubuntu22.04) ...
invoke-rc.d: could not determine current runlevel
invoke-rc.d: policy-rc.d denied execution of start.
Processing triggers for libc-bin (2.35-0ubuntu3.15) ...
验证安装结果——查软件包版本:
dpkg -l | grep -E "^ii +kamailio" | awk '{print $2, $3}'
kamailio 6.1.5+ubuntu22.04
查主程序版本(编译特性一目了然):
kamailio -V
version: kamailio 6.1.5 (x86_64/Linux)
flags: USE_TCP, USE_TLS, USE_SCTP, TLS_HOOKS, USE_RAW_SOCKS, DISABLE_NAGLE, USE_MCAST, DNS_IP_HACK, SHM_MMAP, PKG_MALLOC, MEM_JOIN_FREE, Q_MALLOC, F_MALLOC, TLSF_MALLOC, DBG_SR_MEMORY, DBG_QM_MALLOC, DBG_F_MALLOC, DBG_TLSF_MALLOC, USE_FUTEX, USE_DNS_CACHE, USE_DNS_FAILOVER, USE_NAPTR, USE_DST_BLOCKLIST, HAVE_RESOLV_RES, TLS_PTHREAD_MUTEX_SHARED
MAX_RECV_BUFFER_SIZE 262144, MAX_SEND_BUFFER_SIZE 262144, MAX_URI_SIZE 1024, BUF_SIZE 65535, DEFAULT PKG_SIZE 8MB
poll method support: poll, epoll_lt, epoll_et, sigio_rt, select.
compiled with gcc 11.4.0
💡 技术拓展:
apt install kamailio只装了核心元包,扩展能力需按需追加子包。常用子包对比——
子包 提供能力 何时安装 kamailio-mysql-modules db_mysql 驱动 + kamdbctl 建库脚本 用户数据/注册位置要落 MySQL kamailio-postgres-modules PostgreSQL 驱动 数据库选 PG 时 kamailio-tls-modules tls 模块(SIP over TLS) 需要 wss/TLS 加密信令 kamailio-presence-modules presence/rls 状态呈现 要做在线状态订阅 kamailio-lua-modules / python-modules KEMI 脚本路由逻辑 用 Lua/Python 写路由 子包版本与主包严格一致(同为 6.1.5+ubuntu22.04),
Suggested packages:列表中的即为可选项;本文先以默认安装跑通注册主线。
4.3 启用启动开关(/etc/default/kamailio)
这是官方 deb 包特有的安全设计:全新安装后服务不会随 systemd/启动脚本拉起,必须先显式确认"已配置完毕"。查看 /etc/default/kamailio(实测默认内容):
#
# Kamailio startup options
#
# Set to yes to enable kamailio, once configured properly.
#RUN_KAMAILIO=yes
# User to run as
#USER=kamailio
# Group to run as
#GROUP=kamailio
# Amount of shared and private memory to allocate
# for the running Kamailio server (in Mb)
#SHM_MEMORY=64
#PKG_MEMORY=8
# Config file
#CFGFILE=/etc/kamailio/kamailio.cfg
把 RUN_KAMAILIO 打开(其余保持默认:共享内存 64MB、私有内存 8MB、配置文件 /etc/kamailio/kamailio.cfg):
sed -i 's/^# *RUN_KAMAILIO=.*/RUN_KAMAILIO=yes/' /etc/default/kamailio
grep -n "RUN_KAMAILIO" /etc/default/kamailio
实测回显:
6:RUN_KAMAILIO=yes
若此时直接启动,服务能正常拉起;不开启则报 Kamailio not yet configured(详见 8.2)。
4.4 启动服务与验证
systemd 机器用 systemctl 启动并设置开机自启:
systemctl start kamailio
systemctl enable kamailio
服务单元(/lib/systemd/system/kamailio.service)关键内容实测如下,可看到启动参数与内存配置的来处:
[Service]
Type=forking
User=kamailio
Group=kamailio
Environment='CFGFILE=/etc/kamailio/kamailio.cfg'
Environment='SHM_MEMORY=64'
Environment='PKG_MEMORY=8'
EnvironmentFile=-/etc/default/kamailio
PIDFile=/run/kamailio/kamailio.pid
ExecStart=/usr/sbin/kamailio -P /run/kamailio/kamailio.pid -f $CFGFILE -m $SHM_MEMORY -M $PKG_MEMORY --atexit=no
Restart=on-failure
RuntimeDirectory=kamailio
无 systemd 的最小环境可用 init 脚本等价启动(本文实测路径):
service kamailio start
实测回显(启动即打印监听套接字清单):
* Starting Kamailio SIP Server: kamailio
Listening on
udp: 127.0.0.1:5060
udp: 10.0.0.8:5060
tcp: 127.0.0.1:5060
tcp: 10.0.0.8:5060
Aliases:
tcp: localhost:5060
udp: localhost:5060
...done.
确认服务状态与端口监听:
service kamailio status
ss -lun | grep 5060
实测回显:
* Status of Kamailio SIP Server:
* kamailio is running
udp UNCONN 0 0 127.0.0.1:5060 0.0.0.0:*
udp UNCONN 0 0 10.0.0.8:5060 0.0.0.0:*
至此默认配置的 Kamailio 已监听 5060(UDP/TCP)并处于运行状态,验证手段为 service kamailio status 返回 running 与端口监听清单。
五、Ubuntu 发行版仓库安装方案(B)
不添加第三方源、直接使用 Ubuntu 自带 universe 仓库也可安装 Kamailio,代价是版本冻结在 5.5.4。先确认候选版本:
apt-cache policy kamailio
实测回显:
kamailio:
Installed: (none)
Candidate: 6.1.5+ubuntu22.04
Version table:
6.1.5+ubuntu22.04 500
500 http://deb.kamailio.org/kamailio61 jammy/main amd64 Packages
5.5.4-1 500
500 http://archive.ubuntu.com/ubuntu jammy/universe amd64 Packages
若已配置第四章官方源,需显式指定版本号安装 universe 版:
DEBIAN_FRONTEND=noninteractive apt-get install -y kamailio=5.5.4-1
实测输出(节选):
Setting up kamailio (5.5.4-1) ...
invoke-rc.d: could not determine current runlevel
invoke-rc.d: policy-rc.d denied execution of start.
Processing triggers for libc-bin (2.35-0ubuntu3.15) ...
版本验证:
kamailio -V | head -2
实测回显:
version: kamailio 5.5.4 (x86_64/linux)
flags: USE_TCP, USE_TLS, USE_SCTP, TLS_HOOKS, USE_RAW_SOCKS, DISABLE_NAGLE, USE_MCAST, DNS_IP_HACK, SHM_MMAP, PKG_MALLOC, Q_MALLOC, F_MALLOC, TLSF_MALLOC, DBG_SR_MEMORY, USE_FUTEX, FAST_LOCK-ADAPTIVE_WAIT, USE_DNS_CACHE, USE_DNS_FAILOVER, USE_NAPTR, USE_DST_BLOCKLIST, HAVE_RESOLV_RES, TLS_PTHREAD_MUTEX_SHARED
对比 6.1.5 的 flags 可见 5.5.4 缺少 MEM_JOIN_FREE、DBG_QM_MALLOC、DBG_F_MALLOC、DBG_TLSF_MALLOC 等内存管理特性——这些是 6.x 线的内存分配器演进。未配置官方源时 apt-cache policy 的 Candidate 直接就是 5.5.4-1,无需指定版本号。
六、方案对比与选择建议
两种安装方案的关键维度对照(均为实测数据):
| 维度 | 方案 A:官方 apt 仓库 | 方案 B:发行版仓库 |
|---|---|---|
| 实测版本 | 6.1.5+ubuntu22.04 | 5.5.4-1 |
| 是否需联网 | 是(deb.kamailio.org) | 是(archive.ubuntu.com) |
| 源登记方式 | 官方 GPG 密钥 + kamailio.list | 系统默认 universe |
| 版本节奏 | 跟随上游发版(2026-10 实查 6.1.5) | 随 Ubuntu 发行版冻结 |
| 服务开关 | 需启用 RUN_KAMAILIO=yes | 同样需要(同源 deb 机制) |
| systemd 服务名 | kamailio | kamailio |
| 适用场景 | 生产部署、新特性、长期维护 | 合规限制只能用发行版认证包 |
选择建议:可联网环境一律选方案 A——SIP 服务器的安全补丁随上游小版本发布,6.1.5 对 5.5.4 有近三年安全与内存管理改进;方案 B 仅作为受限环境兜底。两方案装完的配置文件结构、服务管理方式完全一致,后续章节对两者通用。
七、配置说明
本章介绍安装后必须了解的配置文件体系,并实测完成两件事:把监听端口从默认 5060 改为 5070、用一次真实的 SIP REGISTER 完成注册验证。
7.1 配置文件体系
官方 deb 包的配置分工如下:
| 文件 | 作用 | 典型改动 |
|---|---|---|
/etc/kamailio/kamailio.cfg | 主路由配置(核心脚本) | 启用 #!define WITH_AUTH 等特性开关、路由逻辑 |
/etc/kamailio/kamctlrc | kamctl 管理工具配置 | DBENGINE、SIP_DOMAIN、RPC 通道 |
/etc/default/kamailio | 服务启动开关与内存参数 | RUN_KAMAILIO=yes、SHM_MEMORY |
/etc/kamailio/kamailio-local.cfg | 本地覆盖配置(主 cfg 末尾 import_file 引入) | 监听地址、alias,不污染上游 cfg |
kamailio.cfg 主文件内置了特性开关体系:默认 #!define 注释关闭,通过打开 WITH_MYSQL、WITH_AUTH、WITH_USRLOCDB 等定义逐项启用能力,这正是 6.x 配置脚本的设计——单文件覆盖从最小可用到生产级的全部形态。kamailio-local.cfg 的引入点在主 cfg 顶部(实测主 cfg 第 131 行):
####### Include Local Config If Exists #########
import_file "kamailio-local.cfg"
7.2 自定义监听地址与本地域(kamailio-local.cfg)
默认配置监听全部本机地址的 5060 端口(见 4.4 的 Listening on 清单)。生产上常需要自定义端口或声明本地域。创建 /etc/kamailio/kamailio-local.cfg(实测内容):
listen=udp:0.0.0.0:5070
listen=tcp:0.0.0.0:5070
alias="10.0.0.8"
逐项说明:
listen=udp:0.0.0.0:5070:UDP 通配监听 5070 端口(0.0.0.0表示全部 IPv4 本机地址);listen可多次出现,每条声明一个套接字。listen=tcp:0.0.0.0:5070:TCP 同理;不声明则沿用主 cfg 默认(5060)。alias="10.0.0.8":把 IP10.0.0.8声明为本机域别名,使uri==myself/from_uri==myself判定把发往该地址的请求视作"发给本服务器"——这是避免 403 Not relaying 的关键(详见 8.1)。
重启服务使配置生效并验证:
service kamailio restart
service kamailio status
实测回显:
* Restarting Kamailio SIP Server: kamailio
...done.
* Status of Kamailio SIP Server:
* kamailio is running
监听端口确认(ss -lun 现为 5070):
udp UNCONN 0 0 0.0.0.0:5070 0.0.0.0:*
7.3 SIP 注册验证(REGISTER 实测)
Kamailio 装好后的第一项功能验证通常选 REGISTER——它是无状态依赖、单报文即可闭环的 SIP 方法,还能顺带验证 usrloc 用户位置表。
💡 技术拓展:SIP 服务器按承担角色分几类,Kamailio 默认脚本覆盖前两类——
角色 职责 代表 注册服务器 Registrar 接收 REGISTER,维护「用户 → 联系地址」映射(usrloc) Kamailio(registrar 模块) 代理服务器 Proxy 转发 SIP 请求但不终结对话,不改 From/To Kamailio(tm/sl 模块) 重定向服务器 Redirect 返回 3xx 告知新地址,不参与转发 Kamailio 可配置 B2BUA 两端各维持一段对话,可改写信令与媒体 Asterisk、FreeSWITCH Kamailio 定位前两类(信令面),媒体面(RTP 语音流)需配合 RTPEngine/rtpproxy 或交给 B2BUA 处理。本文验证的是注册服务器角色。
验证需要一个能发送原始 SIP 报文的客户端。以下 Python 脚本(标准库实现,保存为 sip-register.py)向服务器发送 REGISTER 并打印响应:
#!/usr/bin/env python3
"""SIP REGISTER 测试客户端:向指定服务器发送 REGISTER 并打印响应。
用法: sip-register.py <server_ip> <server_port> <ruri_host> <local_ip> [user]
"""
import socket
import sys
server = sys.argv[1]
port = int(sys.argv[2])
ruri_host = sys.argv[3]
local_ip = sys.argv[4] if len(sys.argv) > 4 else server
user = sys.argv[5] if len(sys.argv) > 5 else "1001"
msg = (
"REGISTER sip:%s SIP/2.0\r\n" % ruri_host
+ "Via: SIP/2.0/UDP %s:5060;branch=z9hG4bKdemo001\r\n" % local_ip
+ "From: <sip:%s@%s>;tag=tag1001\r\n" % (user, ruri_host)
+ "To: <sip:%s@%s>\r\n" % (user, ruri_host)
+ "Call-ID: regtest001@%s\r\n" % local_ip
+ "CSeq: 1 REGISTER\r\n"
+ "Contact: <sip:%s@%s:5060>\r\n" % (user, local_ip)
+ "Max-Forwards: 70\r\n"
+ "Expires: 300\r\n"
+ "Content-Length: 0\r\n"
+ "\r\n"
)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.settimeout(5)
s.sendto(msg.encode(), (server, port))
print("--- 发送 REGISTER (R-URI: sip:%s@%s:%d) ---" % (user, ruri_host, port))
try:
data, addr = s.recvfrom(2048)
text = data.decode(errors="replace")
print("首行: %s" % text.splitlines()[0])
print("--- 完整响应 ---")
print(text)
except socket.timeout:
print("5 秒内未收到响应")
向服务器 5070 端口发送 REGISTER,R-URI 主机部分填 10.0.0.8(7.2 已声明为本地域):
python3 sip-register.py 10.0.0.8 5070 10.0.0.8 10.0.0.8 regtest001
实测响应:
--- 发送 REGISTER (R-URI: sip:regtest001@10.0.0.8:5070) ---
首行: SIP/2.0 200 OK
--- 完整响应 ---
SIP/2.0 200 OK
Via: SIP/2.0/UDP 10.0.0.8:5060;branch=z9hG4bKdemo001;rport=48496;received=10.0.0.1
From: <sip:regtest001@10.0.0.8>;tag=tag1001
To: <sip:regtest001@10.0.0.8>;tag=ebcbe56b0c19158ea93b7456cb7ff6eb.af5407df
Call-ID: regtest001@10.0.0.8
CSeq: 1 REGISTER
Contact: <sip:regtest001@10.0.0.8:5060>;expires=300
Server: kamailio (6.1.5 (x86_64/Linux))
Content-Length: 0
200 OK 且响应 Contact 行回带 expires=300,说明注册成功。再用 kamctl 查 usrloc 内存表确认 AOR(Address of Record)已登记:
kamctl ul show
实测输出(节选):
{
"jsonrpc": "2.0",
"result": {
"Domains": [
{
"Domain": {
"Domain": "location",
"Size": 1024,
"AoRs": [
{
"Info": {
"AoR": "regtest001",
"HashID": 3861581678,
"Contacts": [
{
"Contact": {
"Address": "sip:regtest001@10.0.0.8:5060",
"Expires": 296,
"Call-ID": "regtest001@10.0.0.8",
"CSeq": 1,
"State": "CS_NEW",
"Socket": "udp:0.0.0.0:5070"
}
}
]
}
}
]
}
}
]
}
}
AOR regtest001 与联系人地址 sip:regtest001@10.0.0.8:5060 均已入表,注册链路(REGISTER → save("location") → usrloc)闭环。若这一步返回的是 403 Not relaying,按 8.1 排障。
八、常见问题(FAQ)
8.1 REGISTER 返回 403 Not relaying
现象:REGISTER 发出后收到 403 Not relaying。实测复现——把 R-URI 主机部分写成一个未声明的地址 10.0.0.99:
python3 sip-register.py 10.0.0.8 5070 10.0.0.99 10.0.0.8 regtest001
实测响应:
--- 发送 REGISTER (R-URI: sip:regtest001@10.0.99:5070) ---
首行: SIP/2.0 403 Not relaying
--- 完整响应 ---
SIP/2.0 403 Not relaying
Via: SIP/2.0/UDP 10.0.0.8:5060;branch=z9hG4bKdemo001;rport=55488;received=10.0.0.1
From: <sip:regtest001@10.0.0.99>;tag=tag1001
To: <sip:regtest001@10.0.0.99>;tag=ebcbe56b0c19158ea93b7456cb7ff6eb.af5407df
Call-ID: regtest001@10.0.0.8
CSeq: 1 REGISTER
Server: kamailio (6.1.5 (x86_64/Linux))
Content-Length: 0
定位:打开调试跟踪重演。在 kamailio.cfg 顶部增加 #!define WITH_DEBUG(debugger 模块会逐条打印配置语句执行轨迹),重启后从 syslog 读取 cfgtrace,实测关键行:
1(3794) exec: {1 1 REGISTER regtest001@10.0.0.10} *** cfgtrace:dbg_cfg_trace(): request_route=[AUTH] c=[/etc/kamailio/kamailio.cfg] l=872 a=16 n=if
1(3794) exec: {1 1 REGISTER regtest001@10.0.0.10} *** cfgtrace:dbg_cfg_trace(): request_route=[AUTH] c=[/etc/kamailio/kamailio.cfg] l=867 a=26 n=sl_send_reply
1(3794) exec: {1 1 REGISTER regtest001@10.0.0.10} *** cfgtrace:dbg_cfg_trace(): request_route=[AUTH] c=[/etc/kamailio/kamailio.cfg] l=868 a=2 n=exit
轨迹显示请求进入 route[AUTH] 后命中 l=867 的 sl_send_reply——对应主 cfg 中 #!else 分支(认证未启用时):
if(uri!=myself) {
sl_send_reply("403", "Not relaying");
exit;
}
原因:uri!=myself 表示请求 R-URI 的主机部分不是"本机域"。Kamailio 判定 myself 的依据是 listen 绑定的地址 + alias 声明的别名。R-URI 写的是 10.0.0.99,而服务器既没在该地址上监听、也没声明它为别名,出于开放中继防护直接拒绝。
解法一(显式绑定具体 IP):让 listen 精确绑定客户端使用的那个地址(仅适用服务器确实持有该 IP 的场景):
listen=udp:10.0.0.99:5060
解法二(通配监听 + alias 声明,推荐):监听保持通配,把客户端使用的地址声明为本地域别名(即 7.2 的做法):
listen=udp:0.0.0.0:5070
listen=tcp:0.0.0.0:5070
alias="10.0.0.8"
验证:重启后重发 R-URI host 为 alias 声明地址的 REGISTER,实测 200 OK(见 7.3 完整响应),且 kamctl ul show 可见 AOR 入表。两种解法均实测闭环,解法二不依赖具体网卡配置、服务器换 IP 无需改配置,生产优先。
8.2 启动提示 Kamailio not yet configured
现象:执行 service kamailio start(或 systemctl start)报:
* Kamailio not yet configured. Edit /etc/default/kamailio first.
* Kamailio not yet configured. Edit /etc/default/kamailio first.
原因与解决:官方 deb 包为防止"裸配置直接暴露在公网"设置了启动闸门——/etc/default/kamailio 中 RUN_KAMAILIO 默认注释。按 4.3 把 #RUN_KAMAILIO=yes 改为 RUN_KAMAILIO=yes 后再启动即可。systemd 部署同样读取该 EnvironmentFile,机制一致。
8.3 apt 源 GPG 校验失败 NO_PUBKEY
现象:配置官方源后 apt-get update 报:
W: GPG error: https://deb.kamailio.org/kamailio61 jammy InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY FB40D3E6508EA4C8
E: The repository 'https://deb.kamailio.org/kamailio61 jammy InRelease' is not signed.
原因与解决:signed-by 指向的 keyring 中没有仓库签名钥。两条路:① 按第 4.1 节排障实录从 keyserver.ubuntu.com 拉取公钥(密钥 ID FB40D3E6508EA4C8 是完整指纹 E79ACECB87D8DCD23A20AD2FFB40D3E6508EA4C8 的尾 64 位);② 若 https 源握手失败(实测 pkg.kamailio.org HTTPS 返回 HTTP:000),把源地址改为 http://deb.kamailio.org/kamailio61——apt 元数据本身有 GPG 签名保护,http 传输不影响完整性校验。
九、卸载与清理
完整卸载分三步:停服务 → purge 主包 → autoremove 清依赖,最后验证零残留。
停服务(若在运行):
service kamailio stop
purge 主包(连配置文件一起删除):
DEBIAN_FRONTEND=noninteractive apt-get purge -y kamailio
实测输出(节选):
0 upgraded, 0 newly installed, 1 to remove and 4 not upgraded.
After this operation, 30.3 MB disk space will be freed.
(Reading database ... 6360 files and directories currently installed.)
Removing kamailio (6.1.5+ubuntu22.04) ...
invoke-rc.d: could not determine current runlevel
invoke-rc.d: policy-rc.d denied execution of stop.
(Reading database ... 5962 files and directories currently installed.)
Purging configuration files for kamailio (6.1.5+ubuntu22.04) ...
清除随装的孤立依赖:
DEBIAN_FRONTEND=noninteractive apt-get autoremove -y
实测输出(节选):
Removing libpython3.10-minimal:amd64 (3.10.12-1~22.04.18) ...
Removing media-types (7.0.0) ...
Processing triggers for libc-bin (2.35-0ubuntu3.15) ...
逐项验证零残留:
dpkg -l | grep -c kamailio
ls /etc/kamailio
which kamailio kamctl
实测回显:
0
ls: cannot access '/etc/kamailio': No such file or directory
dpkg 计数为 0、/etc/kamailio 目录已删、kamailio/kamctl 命令消失,卸载闭环。若还装过扩展子包(如 kamailio-mysql-modules),purge 时把包名一并列出即可;数据库中由 kamdbctl 创建的 kamailio 库需另行手工删除。
十、参考链接
- Kamailio 官网:https://www.kamailio.org/
- 官方 apt 仓库说明:https://www.kamailio.org/wiki/ 首页 Download 段
- GitHub 仓库(Releases/源码):https://github.com/kamailio/kamailio
- 版本发布订阅源(本文版本实查依据):https://github.com/kamailio/kamailio/releases.atom(查询日期 2026-10-22)
- 核心配置手册(Core Cookbook):https://www.kamailio.org/wikidocs/
- 快速开始指南(6.1.x):https://kamailio.org/docs/tutorials/6.1.x/kamailio-quick-start-guide/