这是一本全面介绍Kamailio的专业技术书,也会是市面上第1本Kamailio的图书。
第1章介绍Kamailio的基本背景和架构,同时对SIP协议进行了比较深入的介绍。
第2~3章介绍了Kamailio运行环境的搭建和配置。
第4~5章对Kamailio的组件组件和KEMI进行深入解析。
第6章介绍如何使用Kamailio做SIP路由转发。
第7章介绍Kamailio如何与数据库对接并进行相关操作。
第8章介绍了20种路由方法。
第9章和第10章分别从高性能和安全两个维度介绍对Kamailio的使用。
目 录
推荐序一
推荐序二
前言
第1章 Kamailio与SIP1
1.1 什么是Kamailio1
1.2 背景3
1.3 SIP5
1.3.1 SIP基础6
1.3.2 SIP的基本概念和相关元素7
1.3.3 SIP的基本方法和头域9
1.3.4 SIP URI9
1.3.5 SDP和SOA10
1.3.6 SIP承载14
1.3.7 事务、对话和会话14
1.3.8 Stateless与Stateful17
1.3.9 严格路由和松散路由18
1.3.10 Record-Route19
1.4 Kamailio基本架构19
第2章 理解Kamailio配置文件23
2.1 基本配置文件23
2.2 原生脚本27
2.3 Lua脚本32
2.4 Lua脚本的其他写法38
第3章 Kamailio基本概念和组件40
3.1 core详解40
3.1.1 全局参数部分40
3.1.2 模块设置部分41
3.1.3 路由块部分41
3.1.4 通用元素42
3.1.5 核心关键字46
3.1.6 核心值48
3.1.7 核心参数49
3.1.8 DNS相关参数60
3.1.9 TCP相关参数或选项61
3.1.10 TLS相关参数66
3.1.11 SCTP概述66
3.1.12 UDP相关参数66
3.1.13 核心函数67
3.1.14 自定义全局参数73
3.1.15 脚本语句73
3.1.16 脚本操作符75
3.2 其他概念和组件78
3.2.1 伪变量78
3.2.2 htable79
3.2.3 AVP80
3.2.4 模块81
第4章 KEMI详解83
4.1 KEMI Lua入口84
4.2 KEMI函数85
4.2.1 函数整型返回值规则85
4.2.2 函数返回0的情况86
4.2.3 模块函数86
4.3 在C函数中导出KEMI函数86
4.4 KEMI和伪变量89
4.4.1 伪变量静态名称限制89
4.4.2 针对特定伪变量的函数90
4.5 核心和pv模块中的函数91
4.5.1 核心中的常用函数91
4.5.2 pv模块相关函数94
4.5.3 KSR.hdr子模块96
4.5.4 特殊的KEMI函数99
4.6 原生脚本与KEMI对比100
4.6.1 函数名100
4.6.2 函数的参数100
4.6.3 停止当前脚本执行101
4.7 其他101
第5章 Kamailio运行环境与实例104
5.1 运行Kamailio104
5.1.1 环境准备104
5.1.2 在命令行上运行Kamailio105
5.1.3 将配置文件保存到宿主机113
5.1.4 使用Docker Compose管理
容器113
5.2 将SIP呼叫转发到FreeSWITCH115
5.3 从简单的路由脚本开始116
5.4 Kamailio命令行工具117
5.4.1 kamctl117
5.4.2 kamdbctl120
5.4.3 kamcmd121
5.4.4 kamcli122
5.4.5 sipexer124
5.5 Web管理界面127
5.6 调试与排错130
5.6.1 使用sipdump模块跟踪SIP
消息130
5.6.2 其他SIP相关工具简介131
第6章 使用Kamailio做SIP
路由转发132
6.1 什么是路由132
6.2 基本路由转发134
6.2.1 简单、安全的路由转发134
6.2.2 无状态转发134
6.2.3 有状态转发135
6.2.4 并行转发135
6.2.5 串行转发138
6.3 使用dispatcher模块做路由转发
和负载均衡140
6.3.1 基本用法140
6.3.2 dispatcher模块142
6.3.3 优先级路由及备用路由144
6.3.4 按权重路由145
6.3.5 特殊参数145
6.3.6 从数据库中加载146
6.4 呼叫从哪里来146
6.4.1 根据IP地址段判断147
6.4.2 使用dispatcher模块判断148
6.4.3 使用permissions模块判断149
6.4.4 使用geoip2模块判断150
6.5 API路由151
6.5.1 通过HTTP查询路由151
6.5.2 rtjson157
6.5.3 evapi161
6.6 在KEMI脚本中调用原生脚本
中的路由块168
第7章 数据库操作169
7.1 初始化数据库169
7.1.1 PostgreSQL169
7.1.2 MySQL171
7.2 配置数据库连接172
7.3 在路由时进行SQL查询172
7.4 其他函数和伪变量174
7.5 常用数据库表结构175
第8章 15个典型的路由示例177
8.1 通过号码分析树进行路由177
8.2 号码翻译179
8.3 低成本路由181
8.4 前缀路由184
8.5 动态路由186
8.6 缩位拨号188
8.7 通过别名数据库路由189
8.8 运营商路由190
8.9 字冠域名翻译192
8.10 用户注册和查询193
8.11 向外注册195
8.12 更多AVP示例198
8.13 话单200
8.14 SBC202
8.14.1 代理注册202
8.14.2 NAT穿透206
8.14.3 代理媒体209
8.14.4 使用FreeSWITCH做B2BUA
模式217
8.14.5 拓扑隐藏218
8.15 WebRTC219
第9章 性能223
9.1 性能测试223
9.1.1 早期的性能测试223
9.1.2 KEMI性能测试234
9.1.3 使用VoIPPerf进行性能
测试235
9.2 拆解Kamailio高性能信令服务
设计238
9.2.1 懒解析238
9.2.2 内存管理240
9.2.3 并发和同步241
9.2.4 定时器和异步操作242
9.2.5 缓存242
9.2.6 异步处理243
9.2.7 其他243
第10章 安全244
10.1 基本安全手段和策略244
10.2 限呼245
10.2.1 限制User-Agent头域245
10.2.2 限呼某些目的地246
10.2.3 限制高频呼叫247
10.2.4 限制太多的错误鉴权248
10.2.5 限制并发呼叫249
10.3 TLS250
10.3.1 理解TLS证书及密钥251
10.3.2 自签名证书252
10.3.3 在Kamailio中配置TLS252
10.3.4 TLS连接测试253
10.3.5 自制CA根证书254
10.3.6 其他255
10.4 iptables256
10.5 其他安全建议和相关链接257
附录A 安装Kamailio258
附录B FreeSWITCH快速入门262
附录C Lua快速入门267
附录D Docker简介及常用命令275
附录E 模块索引表280
后记282