Nel nostro precedente articolo su Kannel abbiamo imparato come installare Kannel. Quindi, in quella configurazione, memorizziamo SMS Delivery Report (DLR) nella memoria della bearerbox processi. In questo modo, se casella portante si arresta in modo anomalo o interrompiamo il processo, ma ci sono ancora DLR aperti, ciò potrebbe causare problemi agli utenti di SMS.
Quindi, per evitare questa situazione, possiamo utilizzare una memoria DLR esterna come MySQL database. Nell'articolo precedente abbiamo utilizzato due kannel box:bearerbox e smsbox . Per memorizzare DLR nel database MySQL utilizzeremo un altro programma Kannel:sqlbox . Tutte le comunicazioni tra bearerbox e smsbox sarà fatto tramite sqlbox . In funzione, sqlbox si comporterà come bearerbox per smsbox e smsbox per scatola portante .
La comunicazione tra diversi processi può essere illustrata come di seguito
![](https://m.unixlinux.online/article/uploadfiles/202204/2022042816125505.png)
Ambiente LAB:
Sistema operativo host:Debian 10 (buster)
IP host:192.168.10.38
Abbiamo già installato l'applicazione PlaySMS SMS Management sullo stesso host. Per l'installazione di PlaySMS, controlla questo articolo.
Per una migliore comprensione, in questo articolo abbiamo mostrato il processo di installazione completo di Kannel con supporto MySQL. Si prega di consultare questa pagina per preparare l'host Debian per l'installazione del canale.
Installa il server MariaDB
Quindi, MySQL è stata acquisita da Oracle Corporation e dispone sia della community che delle edizioni commerciali.
In questo Lab useremo MariaDB database, un'alternativa open source a MySQL. MariaDB ha eseguito il fork da MySQL progetto open-source e sviluppato e supportato da alcuni degli sviluppatori originali di MySQL .
Quindi, installa MariaDB Server con le dipendenze necessarie
# apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
Inserisci le informazioni sul repository MariaDB nel file /etc/apt/sources.list.d/MariaDB.list
# MariaDB 10.3 repository list - created 2021-12-28 18:41 UTC # https://mariadb.org/download/ deb [arch=amd64,arm64,ppc64el] https://download.nus.edu.sg/mirror/mariadb/repo/10.3/debian buster main deb-src https://download.nus.edu.sg/mirror/mariadb/repo/10.3/debian buster main
Aggiorna il repository e installa MariaDB comprese le dipendenze necessarie
# apt-get update # apt-get install –y mariadb-server libmariadb-dev default-libmysqlclient-dev
Abilita e avvia il servizio MariaDB
# systemctl enable mariadb.service # systemctl start mariadb.service
Esegui mysql_secure_installation per impostare la password di root e altre direttive di sicurezza come di seguito
Set root password? [Y/n] Y Remove anonymous users? [Y/n] Y Disallow root login remotely? [Y/n] Y Remove test database and access to it? [Y/n] Y Reload privilege tables now? [Y/n] Y
Crea MariaDB database e utente per il canale.
# mysql -u root –p MariaDB [(none)]> CREATE DATABASE kannel CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; MariaDB [(none)]> CREATE USER 'kannel'@'localhost' IDENTIFIED BY 'kannelPassword'; MariaDB [(none)]> GRANT ALL PRIVILEGES ON kannel.* TO 'kannel'@'localhost'; MariaDB [(none)]> FLUSH PRIVILEGES; MariaDB [(none)]> quit
Crea dlr tabella per Kannel DLR. Altre due tabelle send_sms e sent_sms verrà creato automaticamente da Kannel sqlbox processo alla prima esecuzione
CREATE TABLE `dlr` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `datetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `smsc` varchar(40) DEFAULT NULL, `ts` varchar(40) DEFAULT NULL, `destination` varchar(40) DEFAULT NULL, `source` varchar(40) DEFAULT NULL, `service` varchar(40) DEFAULT NULL, `url` varchar(255) DEFAULT NULL, `mask` int(10) DEFAULT NULL, `status` int(10) DEFAULT NULL, `boxc` varchar(40) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Installa Kannel con supporto MySQL
Per memorizzare DLR in MySQL dobbiamo compilare Kannel con supporto MySQL
# wget --no-check-certificate https://kannel.org/download/1.4.5/gateway-1.4.5.tar.gz # tar -zxf gateway-1.4.5.tar.gz # cd gateway-1.4.5/ # ./configure --enable-start-stop-daemon --prefix=/usr/local/kannel --with-mysql # make && make install
Installa smsbox programma
# cd addons/sqlbox # ./bootstrap
Poiché abbiamo modificato il percorso di installazione predefinito per Kannel, dovremo fornire la directory della libreria necessaria e le variabili flag C++ per Kannel e MariaDB con configure copione
Per trovare la variabile flag MariaDB, esegui sotto il comando
# mysql_config --cflags --libs
Uscita:
![](https://m.unixlinux.online/article/uploadfiles/202204/2022042816125554.png)
Esegui configura copione
# ./configure --prefix=/usr/local/kannel \ --with-kannel-dir=/usr/local/kannel \ LDFLAGS="-L/usr/local/kannel/lib -L/usr/lib/x86_64-linux-gnu/ -lmariadb" \ CPPFLAGS="-I/usr/local/kannel/include/kannel -I/usr/include/mariadb -I/usr/include/mariadb/mysql"
Compila sqlbox programma
# make && make install
Quindi, crea le directory necessarie
# mkdir /usr/local/kannel/etc # mkdir /usr/local/kannel/run # mkdir /var/log/kannel/
Dopodiché, inserisci i contenuti di seguito in /usr/local/kannel/etc/kannel.conf file
##CORE group = core admin-port = 13000 smsbox-port = 13001 admin-password = sms-gw-admin-passwd status-password = sms-gw-status-passwd admin-deny-ip = "*.*.*.*" admin-allow-ip = "*.*.*.*" box-deny-ip = "*.*.*.*" box-allow-ip = "*.*.*.*" log-level = 0 log-file = "https://1118798822.rsc.cdn77.org/var/log/kannel/kannel.log" dlr-storage = mysql sms-resend-retry = 1 ##SMSC group = smsc smsc = at smsc-id = smsc01 my-number = 015XXXXXXXX allowed-smsc-id = smsc01 preferred-smsc-id = smsc01 modemtype = Huawei device = /dev/ttyUSB0 speed = 9600 alt-charset = "GSM" sim-buffering = true log-file = /var/log/kannel/smsc01-gsm1.log log-level = 0 ##MODEMS group = modems id = Huawei enable-mms = true init-string = "ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0;+CNMI=1,3,2,2,1;+CMEE=1;+CPMS=\"SM\",\"SM\",\"SM\";+CMGF=0;+CSCS=GSM speed = 9600 detect-string = "huawei" ##SMSBOX group = smsbox bearerbox-host = localhost sendsms-port = 13013 bearerbox-port = 13010 mo-recode = true sendsms-chars = "0123456789 +-" log-file = "https://1118798822.rsc.cdn77.org/var/log/kannel/smsbox.log" log-level = 0 access-log = "https://1118798822.rsc.cdn77.org/var/log/kannel/access.log" ##SMS-USER group = sendsms-user user-deny-ip = "*.*.*.*" user-allow-ip = "*.*.*.*" # MAKE VERY SURE that you change the PASSWORD for security reasons username = kannel password = kannelpasswd default-smsc = smsc01 concatenation = 1 max-messages = 10 ##SMS-SERVICE group = sms-service keyword = default get-url = "http://localhost/index.php?app=call&cat=gateway&plugin=kannel&access=geturl&t=%t&q=%q&a=%a&Q=%Q&smsc=kannel" accept-x-kannel-headers = true max-messages = 10 concatenation = true catch-all = true omit-empty = true ##MySQL-Connection group = mysql-connection id = mysql-dlr host = localhost username = kannel password = kannelPassword database = kannel max-connections = 1 ##MySQL DLR Table ##You should not change this group name as bearerbox uses this name for MySQL DLR storage group = dlr-db id = mysql-dlr table = dlr field-smsc = smsc field-timestamp = ts field-destination = destination field-source = source field-service = service field-url = url field-mask = mask field-status = status field-boxc-id = boxc
Crea /usr/local/kannel/etc/sqlbox.conf file incluso il contenuto di seguito
##MySQL Connection group = mysql-connection id = sqlbox-db host = localhost port = 3306 username = kannel password = kannelPassword database = kannel #SQL BOX CONFIG group = sqlbox id = sqlbox-db smsbox-id = sqlbox bearerbox-host = localhost bearerbox-port = 13001 smsbox-port = 13010 sql-log-table = sent_sms sql-insert-table = send_sms log-level = 0 log-file = "https://1118798822.rsc.cdn77.org/var/log/kannel/sqlbox.log"
Quindi, crea lo script Start/Stop /usr/local/kannel/sbin/kannel incluso il contenuto di seguito
#!/bin/bash # Start/stop the Kannel boxes: One bearer box and one WAP box. # This is the default init.d script for Kannel. Its configuration is # appropriate for a small site running Kannel on one machine. # Make sure that the Kannel binaries can be found in $BOXPATH or somewhere # else along $PATH. run_kannel_box has to be in $BOXPATH. # BOXPATH=/usr/local/kannel/sbin PIDFILES=/usr/local/kannel/run CONFDIR=/usr/local/kannel/etc CONF=$CONFDIR/kannel.conf SQL_CONF=$CONFDIR/sqlbox.conf USER=kannel VERSION="" RB=$BOXPATH/run_kannel_box$VERSION BB=$BOXPATH/bearerbox$VERSION WB=$BOXPATH/wapbox$VERSION SB=$BOXPATH/smsbox$VERSION SSD=$BOXPATH/start-stop-daemon$VERSION PATH=$BOXPATH:$PATH # On Debian, the most likely reason for the bearerbox not being available # is that the package is in the "removed" or "unconfigured" state, and the # init.d script is still around because it's a conffile. This is normal, # so don't generate any output. # test -x $BOXPATH/$BB || exit 0 case "$1" in start) echo -n "Starting WAP gateway: bearerbox" $SSD --start --quiet --pidfile $PIDFILES/kannel_bearerbox.pid --exec $RB -- --pidfile $PIDFILES/kannel_bearerbox.pid $BB -- $CONF sleep 2 echo -n " sqlbox" $BOXPATH/sqlbox -d $SQL_CONF sleep 2 echo -n " smsbox" $SSD --start --quiet --pidfile $PIDFILES/kannel_smsbox.pid --exec $RB -- --pidfile $PIDFILES/kannel_smsbox.pid $SB -- $CONF sleep 1 echo "." ;; stop) echo -n "Stopping WAP gateway: " echo -n " smsbox" $SSD --stop --quiet --pidfile $PIDFILES/kannel_smsbox.pid --exec $RB sleep 1 echo -n " sqlbox" pkill "sqlbox" sleep 1 echo -n " bearerbox" $SSD --stop --quiet --pidfile $PIDFILES/kannel_bearerbox.pid --exec $RB echo "." ;; status) CORE_CONF=$(grep -r 'group[[:space:]]*=[[:space:]]*core' $CONFDIR | cut -d: -f1) ADMIN_PORT=$(grep '^admin-port' $CORE_CONF | sed "s/.*=[[:space:]]*//") ADMIN_PASS=$(grep '^admin-password' $CORE_CONF | sed "s/.*=[[:space:]]*//") STATUS_URL="http://127.0.0.1:${ADMIN_PORT}/status.txt?password=${ADMIN_PASS}" curl $STATUS_URL ;; reload) # We don't have support for this yet. exit 1 ;; restart|force-reload) $0 stop sleep 3 $0 start ;; *) echo "Usage: $0 {start|stop|status|reload|restart|force-reload}" exit 1 esac exit 0
Crea il file /usr/local/kannel/sbin/kannel eseguibile
# chmod +x /usr/local/kannel/sbin/kannel
Aggiungi Kannel all'avvio usando systemd
Ora crea il file dell'unità systemd /etc/systemd/system/kannel-gateway.service compresi i contenuti di seguito
[Unit] Description=Kannel - WAP and SMS Gateway Documentation=https://www.kannel.org/doc.shtml After=network-online.target Wants=network-online.target [Service] Type=forking ExecStart=/usr/local/kannel/sbin/kannel start ExecReload=/usr/local/kannel/sbin/kannel restart ExecStop=/usr/local/kannel/sbin/kannel stop [Install] WantedBy=multi-user.target
Ricarica sistemad
# systemctl daemon-reload
Avvia e abilita cannel-gateway servizio
# systemctl enable kannel-gateway.service # systemctl start kannel-gateway.service # systemctl status kannel-gateway.service
DLR-MASK e DLR-URL
Il canale fornisce i seguenti tipi di rapporti di consegna
1:consegna riuscita
2:mancata consegna
4:messaggio memorizzato nel buffer
8:invio smsc
16:smsc rifiuta
Quindi, per più tipi di rapporti di consegna, devi sommare i valori corrispondenti a ciascun tipo e devi impostare come dlr-mask durante l'invio del messaggio.
Esempio:per il report sullo stato di consegna di un SMS riuscito, fallito e/o bufferizzato, dobbiamo impostare dlr-mask come 1+2+4=7.
Con dlr-mask è necessario inviare dlr-url per inviare il rapporto di consegna con un SMS.
Se seguiamo una richiesta di invio SMS dall'applicazione PlaySMS, troveremo la richiesta html come di seguito
![](https://m.unixlinux.online/article/uploadfiles/202204/2022042816125586.png)
Qui capiamo che PlaySMS sta chiedendo successo, fallimento, buffered e/o smsc submit request su dlr-mask (15) e invia anche il suo dlr-url con la richiesta.
Invia registri SMS
Quindi, abbiamo inviato un SMS dal portale web PlaySMS e controllato diversi stati dalla console MariaDB
SMS inviati ma ancora da ricevere dal Destinatario:
MariaDB [kannel]> select * from dlr; +----+---------------------+--------+------+---------------+-------------+---------+------------------------------------------------------------------------------------------------------------------+------+--------+------+ | id | datetime | smsc | ts | destination | source | service | url | mask | status | boxc | +----+---------------------+--------+------+---------------+-------------+---------+------------------------------------------------------------------------------------------------------------------+------+--------+------+ | 1 | 2022-01-08 23:07:51 | smsc01 | 165 | 88017XXXXXXXX | 015XXXXXXXX | kannel | http://localhost//index.php?app=call&cat=gateway&plugin=kannel&access=dlr&type=%d&smslog_id=20&uid=1&smsc=kannel | 15 | 0 | | +----+---------------------+--------+------+---------------+-------------+---------+------------------------------------------------------------------------------------------------------------------+------+--------+------+ 1 row in set (0.000 sec) MariaDB [kannel]> select * from sent_sms; +--------+------+-------------+---------------+---------+----------------+------------+---------+---------+---------+------+----------+--------+------+--------+----------+----------+----------+----------+------------------------------------------------------------------------------------------------------------------+------+---------+------+---------+---------+-------+------------------------+----------+------------+ | sql_id | momt | sender | receiver | udhdata | msgdata | time | smsc_id | service | account | id | sms_type | mclass | mwi | coding | compress | validity | deferred | dlr_mask | dlr_url | pid | alt_dcs | rpi | charset | boxc_id | binfo | meta_data | priority | foreign_id | +--------+------+-------------+---------------+---------+----------------+------------+---------+---------+---------+------+----------+--------+------+--------+----------+----------+----------+----------+------------------------------------------------------------------------------------------------------------------+------+---------+------+---------+---------+-------+------------------------+----------+------------+ | 1 | MT | 015XXXXXXXX | 88017XXXXXXXX | NULL | MySQL+DLR+Test | 1641661668 | smsc01 | kannel | admin | NULL | 2 | NULL | NULL | 0 | NULL | NULL | NULL | 15 | http://localhost//index.php?app=call&cat=gateway&plugin=kannel&access=dlr&type=%d&smslog_id=20&uid=1&smsc=kannel | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | | 2 | DLR | 015XXXXXXXX | 88017XXXXXXXX | NULL | ACK%2F | 1641661671 | smsc01 | kannel | NULL | NULL | 3 | NULL | NULL | NULL | NULL | NULL | NULL | 8 | http://localhost//index.php?app=call&cat=gateway&plugin=kannel&access=dlr&type=%d&smslog_id=20&uid=1&smsc=kannel | NULL | NULL | NULL | NULL | NULL | NULL | ?orig_msg?dlr_mask=15& | NULL | 165 | +--------+------+-------------+---------------+---------+----------------+------------+---------+---------+---------+------+----------+--------+------+--------+----------+----------+----------+----------+------------------------------------------------------------------------------------------------------------------+------+---------+------+---------+---------+-------+------------------------+----------+------------+ 2 rows in set (0.001 sec)
Dopo l'SMS ricevuto dal telefono cellulare di destinazione e ottenuto il successo DLR dal modem GSM
MariaDB [kannel]> select * from dlr; Empty set (0.000 sec) MariaDB [kannel]> select * from sent_sms; +--------+------+-------------+---------------+---------+----------------+------------+---------+---------+---------+------+----------+--------+------+--------+----------+----------+----------+----------+------------------------------------------------------------------------------------------------------------------+------+---------+------+---------+---------+-------+------------------------+----------+------------+ | sql_id | momt | sender | receiver | udhdata | msgdata | time | smsc_id | service | account | id | sms_type | mclass | mwi | coding | compress | validity | deferred | dlr_mask | dlr_url | pid | alt_dcs | rpi | charset | boxc_id | binfo | meta_data | priority | foreign_id | +--------+------+-------------+---------------+---------+----------------+------------+---------+---------+---------+------+----------+--------+------+--------+----------+----------+----------+----------+------------------------------------------------------------------------------------------------------------------+------+---------+------+---------+---------+-------+------------------------+----------+------------+ | 1 | MT | 015XXXXXXXX | 88017XXXXXXXX | NULL | MySQL+DLR+Test | 1641661668 | smsc01 | kannel | admin | NULL | 2 | NULL | NULL | 0 | NULL | NULL | NULL | 15 | http://localhost//index.php?app=call&cat=gateway&plugin=kannel&access=dlr&type=%d&smslog_id=20&uid=1&smsc=kannel | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | | 2 | DLR | 015XXXXXXXX | 88017XXXXXXXX | NULL | ACK%2F | 1641661671 | smsc01 | kannel | NULL | NULL | 3 | NULL | NULL | NULL | NULL | NULL | NULL | 8 | http://localhost//index.php?app=call&cat=gateway&plugin=kannel&access=dlr&type=%d&smslog_id=20&uid=1&smsc=kannel | NULL | NULL | NULL | NULL | NULL | NULL | ?orig_msg?dlr_mask=15& | NULL | 165 | | 3 | DLR | 015XXXXXXXX | 88017XXXXXXXX | NULL | Success | 1641661727 | smsc01 | kannel | NULL | NULL | 3 | NULL | NULL | NULL | NULL | NULL | NULL | 1 | http://localhost//index.php?app=call&cat=gateway&plugin=kannel&access=dlr&type=%d&smslog_id=20&uid=1&smsc=kannel | NULL | NULL | NULL | NULL | NULL | NULL | ?orig_msg?dlr_mask=15& | NULL | 165 | +--------+------+-------------+---------------+---------+----------------+------------+---------+---------+---------+------+----------+--------+------+--------+----------+----------+----------+----------+------------------------------------------------------------------------------------------------------------------+------+---------+------+---------+---------+-------+------------------------+----------+------------+ 3 rows in set (0.000 sec)
SMS in arrivo:
MariaDB [kannel]> select * from sent_sms where momt='MO'; +--------+------+----------------+-------------+---------+-----------------+------------+---------+---------+---------+------+----------+--------+------+--------+----------+----------+----------+----------+---------+------+---------+------+---------+---------+-------+-----------+----------+------------+ | sql_id | momt | sender | receiver | udhdata | msgdata | time | smsc_id | service | account | id | sms_type | mclass | mwi | coding | compress | validity | deferred | dlr_mask | dlr_url | pid | alt_dcs | rpi | charset | boxc_id | binfo | meta_data | priority | foreign_id | +--------+------+----------------+-------------+---------+-----------------+------------+---------+---------+---------+------+----------+--------+------+--------+----------+----------+----------+----------+---------+------+---------+------+---------+---------+-------+-----------+----------+------------+ | 4 | MO | +88017XXXXXXXX | 015XXXXXXXX | NULL | SQLBOX+incoming | 1641663435 | smsc01 | NULL | NULL | NULL | 0 | NULL | NULL | 0 | 0 | NULL | NULL | NULL | NULL | 0 | 0 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | +--------+------+----------------+-------------+---------+-----------------+------------+---------+---------+---------+------+----------+--------+------+--------+----------+----------+----------+----------+---------+------+---------+------+---------+---------+-------+-----------+----------+------------+ 1 row in set (0.000 sec)
Registro SMSBOX:
![](https://m.unixlinux.online/article/uploadfiles/202204/2022042816125532.png)
Registro in uscita del portale PlaySMS:
![](https://m.unixlinux.online/article/uploadfiles/202204/2022042816125678.png)
Dal telefono del destinatario:
![](https://m.unixlinux.online/article/uploadfiles/202204/2022042816125627.png)
Riferimenti
- https://www.kannel.org/download/kannel-userguide-snapshot/userguide.html