這是一本全面介紹Kamailio的專業(yè)技術書,也會是市面上第1本Kamailio的圖書。
第1章介紹Kamailio的基本背景和架構,同時對SIP協(xié)議進行了比較深入的介紹。
第2~3章介紹了Kamailio運行環(huán)境的搭建和配置。
第4~5章對Kamailio的組件組件和KEMI進行深入解析。
第6章介紹如何使用Kamailio做SIP路由轉發(fā)。
第7章介紹Kamailio如何與數(shù)據(jù)庫對接并進行相關操作。
第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 全局參數(shù)部分40
3.1.2 模塊設置部分41
3.1.3 路由塊部分41
3.1.4 通用元素42
3.1.5 核心關鍵字46
3.1.6 核心值48
3.1.7 核心參數(shù)49
3.1.8 DNS相關參數(shù)60
3.1.9 TCP相關參數(shù)或選項61
3.1.10 TLS相關參數(shù)66
3.1.11 SCTP概述66
3.1.12 UDP相關參數(shù)66
3.1.13 核心函數(shù)67
3.1.14 自定義全局參數(shù)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函數(shù)85
4.2.1 函數(shù)整型返回值規(guī)則85
4.2.2 函數(shù)返回0的情況86
4.2.3 模塊函數(shù)86
4.3 在C函數(shù)中導出KEMI函數(shù)86
4.4 KEMI和偽變量89
4.4.1 偽變量靜態(tài)名稱限制89
4.4.2 針對特定偽變量的函數(shù)90
4.5 核心和pv模塊中的函數(shù)91
4.5.1 核心中的常用函數(shù)91
4.5.2 pv模塊相關函數(shù)94
4.5.3 KSR.hdr子模塊96
4.5.4 特殊的KEMI函數(shù)99
4.6 原生腳本與KEMI對比100
4.6.1 函數(shù)名100
4.6.2 函數(shù)的參數(shù)100
4.6.3 停止當前腳本執(zhí)行101
4.7 其他101
第5章 Kamailio運行環(huán)境與實例104
5.1 運行Kamailio104
5.1.1 環(huán)境準備104
5.1.2 在命令行上運行Kamailio105
5.1.3 將配置文件保存到宿主機113
5.1.4 使用Docker Compose管理
容器113
5.2 將SIP呼叫轉發(fā)到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
路由轉發(fā)132
6.1 什么是路由132
6.2 基本路由轉發(fā)134
6.2.1 簡單、安全的路由轉發(fā)134
6.2.2 無狀態(tài)轉發(fā)134
6.2.3 有狀態(tài)轉發(fā)135
6.2.4 并行轉發(fā)135
6.2.5 串行轉發(fā)138
6.3 使用dispatcher模塊做路由轉發(fā)
和負載均衡140
6.3.1 基本用法140
6.3.2 dispatcher模塊142
6.3.3 優(yōu)先級路由及備用路由144
6.3.4 按權重路由145
6.3.5 特殊參數(shù)145
6.3.6 從數(shù)據(jù)庫中加載146
6.4 呼叫從哪里來146
6.4.1 根據(jù)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章 數(shù)據(jù)庫操作169
7.1 初始化數(shù)據(jù)庫169
7.1.1 PostgreSQL169
7.1.2 MySQL171
7.2 配置數(shù)據(jù)庫連接172
7.3 在路由時進行SQL查詢172
7.4 其他函數(shù)和偽變量174
7.5 常用數(shù)據(jù)庫表結構175
第8章 15個典型的路由示例177
8.1 通過號碼分析樹進行路由177
8.2 號碼翻譯179
8.3 低成本路由181
8.4 前綴路由184
8.5 動態(tài)路由186
8.6 縮位撥號188
8.7 通過別名數(shù)據(jù)庫路由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 并發(fā)和同步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 限制并發(fā)呼叫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