====== Kamailio SIP Server ======
Installation mit MariaDB-Datenbank
apt-get install kamailio kamailio-tls-modules kamailio-mysql-modules kamailio-presence-modules
#!define WITH_MYSQL
#!define WITH_AUTH
#!define WITH_TLS
#!define WITH_PRESENCE
#!define WITH_USRLOCDB
alias="sip.mydomain.com"
listen=udp:192.168.0.2:5060
listen=tcp:192.168.0.2:5061
SIP_DOMAIN=mydomain.com
DBENGINE=MYSQL
DBHOST=localhost
DBNAME=kamailio
DBRWUSER="kamailio"
DBRWPW="********"
DBROUSER="kamailioro"
DBROPW="******"
Für den Fall daß der RPTProxy verwendet werden soll, noch folgendes ergänzen:
#!define WITH_NAT
Datenbank erstellen mit
kamdbctl create
===== Logging =====
Ergänzung in ''rsyslog.conf''
# Kamailio
local0.* -/var/log/kamailio.log
/var/log/kamailio*.log {
daily
missingok
rotate 14
compress
delaycompress
create 0644 root adm
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
===== TLS =====
Zertifikat normal mit Let's Encrypt anlegen.
Anschließend in die Konfiguration eintragen:
method = TLSv1.2+
verify_certificate = yes
require_certificate = yes
private_key = /etc/ssl/private/sip.key
certificate = /etc/ssl/certs/sip.crt
===== Datenbank =====
Zugangsdaten in ''kamctlrc'' eintragen.
===== RTP-Proxy =====
Es existiert kein Debian-Paket mehr.
Erstellen aus den Quellen:
apt-get install libssl-dev libsrtp2-dev
cd /usr/local/src
git clone -b master https://github.com/sippy/rtpproxy.git
git -C rtpproxy submodule update --init --recursive
cd rtpproxy
git checkout v3.0.1
./configure
make clean all
make install
++++ Init-Script |
#! /bin/sh
### BEGIN INIT INFO
# Provides: rtpproxy
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: RTP Proxy
# Description: Relay for VoIP media streams
### END INIT INFO
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=rtpproxy
DESC="RTP relay"
DAEMON=/usr/local/bin/$NAME
USER=$NAME
GROUP=$USER
PIDFILE="/var/run/$NAME/$NAME.pid"
PIDFILE_DIR=`dirname $PIDFILE`
CONTROL_SOCK="unix:$PIDFILE_DIR/$NAME.sock"
test -x $DAEMON || exit 0
umask 002
. /lib/lsb/init-functions
# Include defaults if available
if [ -f /etc/default/$NAME ] ; then
. /etc/default/$NAME
fi
DAEMON_OPTS="-s $CONTROL_SOCK -u $USER:$GROUP -p $PIDFILE $EXTRA_OPTS"
if [ ! -d "$PIDFILE_DIR" ];then
mkdir "$PIDFILE_DIR"
chown $USER:$GROUP "$PIDFILE_DIR"
fi
set -e
case "$1" in
start)
echo -n "Starting $DESC: "
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_OPTS
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE --exec $DAEMON
echo "$NAME."
;;
status)
echo -n "Status $DESC: "
if [ ! -e "$PIDFILE" ]; then
echo "$NAME is NOT running. No PID-File."
exit 7
fi
PID=$(cat $PIDFILE)
kill -0 $PID
rc=$?
# Check exit code
if [ "$rc" -ne 0 ]
then
echo "$NAME is NOT running."
exit 7
else
echo "$NAME is running with PID: $PID"
fi
;;
restart|force-reload)
echo -n "Restarting $DESC: "
start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE --exec $DAEMON
sleep 1
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_OPTS
echo "$NAME."
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|status|restart|force-reload}" >&2
exit 1
;;
esac
exit 0
++++
Einstellungen für das Init-Skript
USER=kamailio
GROUP=kamailio
CONTROL_SOCK="unix:/var/run/rtpproxy/rtpproxy.sock"
EXTRA_OPTS="-l -d INFO"
Die Kommunikation lassen wir über einen Unix-Socket stattfinden und nicht
wie im Standard über UDP. Dafür ist noch eine Anpassung in Kamailio erforderlich:
#!define WITH_NAT
[...]
modparam("rtpproxy", "rtpproxy_sock", "unix:/var/run/rtpproxy/rtpproxy.sock")
===== Befehle =====
Anzeige der angelegten Geräte
kamctl db show subscriber
Anzeige der angemeldeten Geräte (kamailio muß laufen)
kamctl ul show
kamctl online
Nummern (Subscriber) anlegen
kamctl add
Nummer wieder entfernen
kamctl rm
===== VoIP-Clients =====
Selbstverständliche kann jedes IP-Telefon verwendet werden.
Hersteller sind z.B. Grandstream und Snom.
Softphones auf dem PC:
* Twikle
* Linphone, anscheinend kein vernänftiges Logging
Apps auf dem Smartphone:
* ???