Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

CentOS 6 編譯安裝與配置 Kamailio SIP 伺服器完整指南

編輯:關於 Linux

Kamailio (原 OpenSER) 是高效能、模組化的 SIP 伺服器,支援註冊、代理、重導向、負載平衡、NAT 穿透等功能。CentOS 6 雖已停止維護,但部分舊系統仍在運行。本文記錄從源碼編譯安裝、資料庫配置、核心參數調整至服務管理的完整流程。

前置需求

  • CentOS 6.x (最終版 6.10)
  • 開發工具:yum groupinstall "Development Tools"
  • 依賴庫:yum install mysql-devel libxml2-devel bison flex openssl-devel unixODBC-devel postgresql-devel radiusclient-ng-devel
  • 資料庫:MySQL/MariaDB 已安裝並啟動

1. 下載源碼與編譯安裝

cd /usr/local/src
wget https://www.kamailio.org/pub/kamailio/5.6.4/src/kamailio-5.6.4_src.tar.gz
tar zxvf kamailio-5.6.4_src.tar.gz
cd kamailio-5.6.4

# 產生配置
make FLAVOUR=kamailio cfg

# 編輯模組選擇:啟用 db_mysql、移除不需模組
vi modules.lst
# 找到 exclude_modules,刪除 db_mysql

# 編譯安裝
make all
make install

預設安裝路徑:

  • 二進位:/usr/local/sbin/kamailio, kamctl, kamdbctl, sercmd
  • 配置:/usr/local/etc/kamailio/
  • 模組:/usr/local/lib64/kamailio/modules/

2. 資料庫配置 (kamctlrc)

vi /usr/local/etc/kamailio/kamctlrc

# 關鍵參數:
SIP_DOMAIN=yourdomain.com
DBENGINE=MYSQL
DBHOST=localhost
DBNAME=kamailio
DBRWUSER=kamailio
DBRWPW="StrongPassword123"
DBROUSER=kamailioro
DBROPW="ReadOnlyPassword"
DBROOTUSER="root"
# DBROOTPW 留空會提示輸入

建立資料庫結構

/usr/local/sbin/kamdbctl create
# 提示輸入 MySQL root 密碼,自動建立資料表

3. 核心配置檔調整 (kamailio.cfg)

vi /usr/local/etc/kamailio/kamailio.cfg

# 1. 監聽埠與介面
listen=udp:192.168.1.100:5060
listen=tcp:192.168.1.100:5060
# listen=tls:192.168.1.100:5061  # 若啟用 TLS

# 2. 載入必要模組
loadmodule "db_mysql.so"
loadmodule "registrar.so"
loadmodule "usrloc.so"
loadmodule "auth.so"
loadmodule "auth_db.so"
loadmodule "tm.so"
loadmodule "sl.so"
loadmodule "rr.so"
loadmodule "maxfwd.so"
loadmodule "nathelper.so"
loadmodule "siputils.so"
loadmodule "xlog.so"

# 3. 資料庫連線參數 (對應 kamctlrc)
modparam("db_mysql", "db_url", "mysql://kamailio:StrongPassword123@localhost/kamailio")

# 4. 使用者定位資料庫模式
modparam("usrloc", "db_mode", 2)  # 2 = 數據庫模式

# 5. NAT 穿透支援
modparam("nathelper", "natping_interval", 30)
modparam("nathelper", "ping_nated_only", 1)

# 6. 日誌等級
debug=3
log_stderror=yes

4. 服務管理與啟動腳本

Systemd 服務檔 (CentOS 7+ 風格,CentOS 6 需調整為 SysVinit)

# /etc/init.d/kamailio (SysVinit 風格)
#!/bin/bash
# chkconfig: 345 85 15
# description: Kamailio SIP Server

KAM=/usr/local/sbin/kamailio
CFG=/usr/local/etc/kamailio/kamailio.cfg
PID=/var/run/kamailio/kamailio.pid
USER=kamailio
GROUP=kamailio

start() {
    echo -n "Starting Kamailio: "
    daemon --user=$USER $KAM -f $CFG -P $PID -u $USER -g $GROUP
    RETVAL=$?
    echo
    return $RETVAL
}

stop() {
    echo -n "Stopping Kamailio: "
    killproc -p $PID $KAM
    RETVAL=$?
    echo
    return $RETVAL
}

case "$1" in
    start) start ;;
    stop) stop ;;
    restart) stop; start ;;
    status) status -p $PID $KAM ;;
    *) echo "Usage: $0 {start|stop|restart|status}"; exit 1 ;;
esac
chmod +x /etc/init.d/kamailio
chkconfig --add kamailio
chkconfig kamailio on
service kamailio start

建立執行使用者

groupadd -r kamailio
useradd -r -g kamailio -s /sbin/nologin -d /var/run/kamailio kamailio
mkdir -p /var/run/kamailio
chown kamailio:kamailio /var/run/kamailio

5. 防火牆開放 SIP 埠

iptables -A INPUT -p udp --dport 5060 -j ACCEPT
iptables -A INPUT -p tcp --dport 5060 -j ACCEPT
# TLS
iptables -A INPUT -p tcp --dport 5061 -j ACCEPT
# RTP 媒體埠範圍 (根據實際配置)
iptables -A INPUT -p udp --dport 10000:20000 -j ACCEPT
service iptables save

6. 驗證與測試

檢查進程與監聽

ps aux | grep kamailio
netstat -tulpn | grep :5060
sercmd core.uptime  # 使用 CLI 工具查詢

SIP 註冊測試 (使用 sipp 或軟電話)

# sipp 註冊測試
sipp -sf register.xml -inf users.csv -r 1 -m 1 192.168.1.100:5060

Kamctl 管理指令

kamctl add 1001@yourdomain.com password123  # 新增用戶
kamctl ls  # 列出註冊用戶
kamctl ul show  # 顯示用戶位置表
kamctl fifo get_stats all  # 統計資訊

效能調優關鍵參數

參數建議值說明
childrenCPU 核心數 × 2子進程數,處理並發
shm_mem256-512 MB共享記憶體,視用戶數調整
pkg_mem64-128 MB每進程私有記憶體
tcp_children同 childrenTCP 子進程數
tcp_connection_lifetime3600TCP 連線生命週期(秒)

在 kamailio.cfg 開頭設定:

children=8
shm_mem=256
pkg_mem=64

常見問題

現象解決
啟動失敗 "db_mysql.so: cannot open shared object"ldconfig 刷新庫快取,確認 /usr/local/lib64/kamailio/modules/db_mysql.so 存在
資料庫連線失敗檢查 MySQL 服務、防火牆、kamctlrc 密碼、GRANT ALL ON kamailio.* TO 'kamailio'@'localhost'
NAT 穿透失敗確認 nathelper 模組載入、natping_interval 設定、防火牆 UDP 通訊
高併發下回應延遲增加 children、shm_mem、啟用 async 模組

總結

CentOS 6 編譯安裝 Kamailio 核心流程:安裝開發工具與依賴 → 下載源碼 → make cfg → 編輯 modules.lst 啟用 db_mysql → make all install → 配置 kamctlrc 建立資料庫 → 調整 kamailio.cfg 核心參數 → 建立服務腳本 → 開放防火牆 → 驗證測試。雖 CentOS 6 已 EOL,但此流程適用於所有 RHEL 系發行版,掌握編譯安裝可靈活控制模組與版本。

Copyright © Windows教程網 All Rights Reserved