Kannelに関する以前の記事では、Kannelのインストール方法について学習しました。そのため、この構成では、SMS配信レポート(DLR)をベアラーボックスのメモリに保存します。 処理する。そのようにして、 Bearerbox クラッシュするか、プロセスを停止しますが、まだDLRが開いているため、SMSユーザーに問題が発生する可能性があります。
したがって、この状況を回避するために、 MySQLのような外部DLRストレージを使用できます。 データベース。前回の記事では、2つのカネルボックスを使用しました: Bearerbox およびsmsbox 。 DLRをMySQLデータベースに保存するには、別のKannelプログラム sqlboxを使用します。 。 Bearerbox間のすべての通信 およびsmsbox sqlboxを介して実行されます 。動作中、 sqlbox Bearerboxのように動作します smsbox およびsmsbox Bearerbox 。
異なるプロセス間の通信は、以下のように説明できます
LAB環境:
ホストOS:Debian 10(バスター)
ホストIP:192.168.10.38
同じホストにPlaySMSSMS管理アプリケーションがすでにインストールされています。 PlaySMSのインストールについては、この記事を確認してください。
理解を深めるために、この記事では、MySQLをサポートするKannelの完全なインストールプロセスを示しました。 Kannelインストール用のDebianホストを準備するには、このページを参照してください。
MariaDBサーバーをインストールする
つまり、 MySQL Oracle Corporationに買収され、コミュニティ版と商用版の両方があります。
このラボでは、 MariaDBを使用します データベース、MySQLのオープンソースの代替。 MariaDB MySQLから分岐しました オープンソースプロジェクトであり、 MySQLの元の開発者の一部によって開発およびサポートされています 。
したがって、必要な依存関係を使用してMariaDBサーバーをインストールします
# apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
MariaDBリポジトリ情報をファイル/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
リポジトリを更新し、 MariaDBをインストールします 必要な依存関係を含む
# apt-get update # apt-get install –y mariadb-server libmariadb-dev default-libmysqlclient-dev
MariaDBサービスを有効にして開始する
# systemctl enable mariadb.service # systemctl start mariadb.service
mysql_secure_installationを実行します rootパスワードおよびその他のセキュリティディレクティブを以下のように設定するには
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
MariaDBを作成します Kannelのデータベースとユーザー。
# 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
dlrを作成します カネルDLRのテーブル。他の2つのテーブルsend_sms およびsent_sms Kannel sqlboxによって自動的に作成されます 初回実行時のプロセス
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;
MySQLをサポートするKannelをインストールする
DLRをMySQLに保存するには、MySQLサポートを使用してKannelをコンパイルする必要があります
# 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
smsboxをインストールします プログラム
# cd addons/sqlbox # ./bootstrap
Kannelのデフォルトのインストール場所を変更したため、KannelとMariaDBに必要なライブラリディレクトリとC++フラグ変数をconfigureで提供する必要があります。 スクリプト
MariaDBフラグ変数を見つけるには、コマンドの下で実行します
# mysql_config --cflags --libs
出力:
configureを実行します スクリプト
# ./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">
sqlboxをコンパイルします プログラム
# make && make install
次に、必要なディレクトリを作成します
# mkdir /usr/local/kannel/etc # mkdir /usr/local/kannel/run # mkdir /var/log/kannel/
その後、以下の内容を /usr/local/kannel/etc/kannel.confに入れます。 ファイル
##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
/usr/local/kannel/etc/sqlbox.confを作成します 以下のコンテンツを含むファイル
##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"
次に、開始/停止スクリプト / usr / local / kanel / sbin / kannel を作成します 以下のコンテンツを含む
#!/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
ファイルを/usr / local / kannel / sbin / kannelにします。 実行可能ファイル
# chmod +x /usr/local/kannel/sbin/kannel
systemdを使用してスタートアップにKannelを追加
次に、systemdユニットファイル /etc/systemd/system/kannel-gateway.serviceを作成します。 以下の内容を含む
[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
systemdをリロード
# systemctl daemon-reload
kannel-gatewayを開始して有効にします サービス
# systemctl enable kannel-gateway.service # systemctl start kannel-gateway.service # systemctl status kannel-gateway.service
DLR-MASKおよびDLR-URL
Kannelは、以下の配信レポートタイプを提供します
1:配信の成功
2:配達の失敗
4:メッセージバッファリング
8:smsc送信
16:smsc拒否
したがって、複数の配信レポートタイプの場合、各タイプに対応する値を合計し、 dlr-maskとして設定する必要があります。 メッセージの送信中。
例:SMSの成功、失敗、および/またはバッファリングされた配信ステータスレポートの場合、 dlr-maskを設定する必要があります。 1 + 2 + 4=7として。
dlr-maskを使用 dlr-urlを送信する必要があります SMSで配信レポートを返送します。
PlaySMSアプリケーションからのSMS送信リクエストに従うと、以下のようなhtmlリクエストが見つかります
ここでは、PlaySMSが dlr-mask で成功、失敗、バッファリング、および/またはsmsc送信要求を要求していることを理解しています。 (15)また、 dlr-urlを送信します リクエストに応じて。
SMSログを送信する
そこで、PlaySMS WebポータルからSMSを送信し、MariaDBコンソールからさまざまな状態を確認しました
SMSは送信されましたが、受信者はまだ受信していません:
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)
宛先の携帯電話がSMSを受信し、GSMモデムからSuccessDLRを取得した後
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:
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)
SMSBOXログ:
PlaySMSポータルの送信ログ:
受信者の電話から:
参照
- https://www.kannel.org/download/kannel-userguide-snapshot/userguide.html