NoraExternalConnector
【1】概要
新JARL DSTARレピータシステム(2019~)に対して、既存のDCS/DExtra/DPlusプロトコルを用いてのレピータに対する接続機能を付加するもの
具体的には下記のような使い方が可能となります
- BlueDV/PiStar/NoraGatewayなどの既存ソフトウェアからのレピータへの所謂山かけ接続
- PiStar(ircddb gateway)/NoraGateway/xlxdなどの既存ソフトウェアへの接続
【2】ブロック図
【3】動作環境
- 新JARL DSTARレピータシステム(2019~)
- JRE 1.8(Java 8)
- CPU コアあたり1GHz&メインメモリ1GB以上
- Windows/Linux OS
- 10Mbps以上の安定したインターネット回線(ポケットWifi等の携帯回線不可)
(※NoraExternalConnectorを設置する場所の回線であって、レピータサイト側の回線は不問です)
【最低動作環境】
- Raspberry Pi 3B+ & Raspbian buster(※Wifi不可&必ず有線LANにて接続して下さい)
- レピータ設置場所とは異なる場所のFTTH回線
【推奨動作環境】
- TBD
【4】注意事項
- DSTARレピータ管理団体向けのソフトウェアです
- このソフトウェアは検証段階であり、想定されないトラブルが起こりえます
- アシスト局が含まれるレピータシステムには使用できません
- レピータゲートウェイPCにインストールしないで下さい
PCの性能によっては、基本的なDSTARレピータの機能に影響が及ぶ可能性がある為です - 今までの基本的なDSTARレピータに加えて新しい機能を付加するもので、利用者側への周知が必要です
よって、格段に管理負荷が高くなりますので、導入に際しては慎重に検討願います - 巨大なネットワークでの事故を防ぐため、DPlus(REF)はデフォルトで無効にされています(設定ファイルで有効に変更可)
- レピータ(xchange)に接続しないでルームとして使用する場合、レピータコールサインは使用しないで下さい
個人、または社団局のコールサインを使用して下さい - 外部リンクされたゲートウェイからのユーザーコールサインが、JARLもしくはG2/G3に登録がなければレピータ側(xchange側)には送信されません(2019/11/29追加)
xchange側からのデータを除く、外部リンクから受信した全てのコールサインを問答無用で認証します
【5】関連資料
【6】インストール方法(Raspberry Pi)
【初めてインストールする場合】
【レピータゲートウェイPC側】
- SSHにログインします
- xchange.confを編集します
sudo vi /opt/dstar/conf/xchange.conf - xchange.confのFORWARD=と記述がある行の下に下記を追加します
FORWARD=◯:50100:nora_ext_connect
(◯は、NoraExternalConnectorを動作させるデバイスのIPアドレスもしくはドメイン名) - xchangeを再起動させます
旧CentOS ... sudo /etc/init.d/xchange restart
新CentOS ... sudo systemctl restart xchange
【NoraExternalConnector側】
- NoraExternalConnectorを動作させるデバイスに対してポート開放を行って下さい
ポート一覧は下記のとおりです
・50100(xchange)
・20001(DPlus)
・30001(DExtra)
・30051(DCS) - SSHにログインし、ホームディレクトリにNoraExternalConnectorのzipファイルを転送(SSH SCP)します
- sudo apt update
- sudo apt install openjdk-8-jdk
- sudo update-java-alternatives -s java-1.8.0-openjdk-armhf
- zipファイルを展開します
sudo unzip -d /opt/ ~/NoraExternalConnector_v(ExternalConnectorのzipファイル) - 展開したディレクトリに移動します
cd /opt/NoraExternalConnector/ - ユーザーnoraを追加します
sudo adduser nora - アップデータに実行権を与えます
sudo chmod 755 ./update.sh - アップデータを実行して手順を省略します
sudo ./update.sh -u nora ~/NoraExternalConnector_v(ExternalConnectorのzipファイル) - 設定ファイルをコピーします
sudo cp ./config/NoraExternalConnector.xml.default ./config/NoraExternalConnector.xml - 設定ファイルを編集して設定を行います(設定ファイルの中に説明がありますので、それに従って設定を行って下さい)
sudo vi ./config/NoraExternalConnector.xml - 自動実行用のファイルをコピーします
sudo cp ./support/NoraExternalConnector.service /etc/systemd/system/ - 自動実行用のサービスを認識させます
sudo systemctl daemon-reload - 自動実行用のサービスを起動時に起動させます
sudo systemctl enable NoraExternalConnector.service - NoraExternalConnectorを起動します
sudo systemctl start NoraExternalConnector.service - ログは、下記に出力されます
/opt/NoraExternalConnector/log/NoraExternalConnector.log
【アップデート】
【レピータゲートウェイPC側】
- 対応の必要はありません
【NoraExternalConnector側】
- SSHにログインし、ホームディレクトリにNoraExternalConnectorのzipファイルを転送(SSH SCP)します
- NoraExternalConnectorのディレクトリに移動します
cd /opt/NoraExternalConnector/ - アップデータを起動します
sudo ./update.sh -u nora ~/NoraExternalConnector_v(ExternalConnectorのzipファイル) - 必要に応じて、設定ファイルを編集します
sudo vi ./config/NoraExternalConnector.xml - NoraExternalConnectorを再起動します
sudo systemctl restart NoraExternalConnector.service
【7】ダウンロード
v0.1.8a(2020/02/01)
https://k-dk.net/nora-release/alpha/NoraExternalConnector_v0.1.8a.zip
※このアップデートでは変更点が多い為、お手数ですが設定ファイルを前バージョンから流用せずに、NoraExternalConnector.xml.defaultからコピーして使用して頂きますようお願い致します
- 複数のルームやレピータを併設した場合において、xchange側からの音声が他のルームやレピータに漏れるバグを修正
- 設定されたルームやレピータ各々において、認証モードを個別に設定可能にした(authMode)
- 設定されたルームやレピータ各々において、xchangeとの連携を個別に設定可能にした(useXChange)
- Gatewayにname/location/dashboardUrlを追加
- Repeaterにname/locationを追加
v0.1.7a(2019/12/19)
https://k-dk.net/nora-release/alpha/NoraExternalConnector_v0.1.7a.zip
※設定ファイルに変更はありませんので、通常のアップデートコマンド(sudo ./update.sh -u nora ~/NoraExternalConnector_v0.1.7a.zip)でアップデートして下さい
- 認証が通らなかった場合において、Incoming接続側全局に音声で「ピー、認証エラー」と流すようにした
- ネットワークにリンク切断等の異常が発生した場合において、通信が途絶する場合がある問題を修正した
v0.1.6a(2019/12/14)
https://k-dk.net/nora-release/alpha/NoraExternalConnector_v0.1.6a.zip
- Incoming接続局の認証が通らなかった場合、ショートメッセージが付加された無音音声(1秒程度)をIncoming全接続局に対して流すようにした
(ショートメッセージ例:JQ1ZYC AUTH FAIL !) - OutgoingLinkから外部に接続した時に、外部から受信したコールサインの認証を設定によりバイパス可能にした
(EnableAuthOutgoingLink) - ダッシュボード閲覧数表示の追加
- ダッシュボード関連の不具合修正(ダッシュボードをローカルに配置した場合において、Chromeで見られないなど)
※v0.1.5aからのアップデートの場合、通常のアップデートコマンド(sudo ./update.sh -u nora ~/NoraExternalConnector_v0.1.6a.zip)でアップデートを掛けた後に、NoraExternalConnector.xmlの171行目に下記を挿入して下さい
<!-- OutgoingLinkから受信したコールサインの認証有効・無効 -->
<EnableAuthOutgoingLink>false</EnableAuthOutgoingLink>
v0.1.5a(2019/12/08)
https://1drv.ms/u/s!Alt6WCVd8PgfvF1NLIiQx6mC5b2Q?e=a5GCat
※設定ファイルに変更はありませんので、通常のアップデートコマンド(sudo ./update.sh -u nora ~/NoraExternalConnector_v0.1.5a.zip)でアップデートして下さい
- ダッシュボードのログコンソールに認証結果を表示するようにした
- ダッシュボードのゲートウェイ画面のFromに送信元のノードコールサインを表示するようにした
- ダッシュボードの多言語対応を行った(画面下部で切替可能)
v0.1.4a(2019/12/05)
https://1drv.ms/u/s!Alt6WCVd8PgfuzZ6Ul-zneR__wXC?e=Ec57hF
※設定ファイルに変更はありませんので、通常のアップデートコマンド(sudo ./update.sh -u nora ~/NoraExternalConnector_v0.1.4a.zip)でアップデートして下さい
- ゲートウェイPC、もしくはクライアントとの通信が断続的になった場合において、認証動作がハングアップする場合がある問題を修正
- ダッシュボードのDSTAR Nowにレピータ名を表示するようにした
v0.1.3a(2019/12/02)
https://1drv.ms/u/s!Alt6WCVd8Pgfum275ezDZLjwf-Y0?e=xWA7oF
※設定ファイルに変更はありませんので、通常のアップデートコマンド(sudo ./update.sh -u nora ~/NoraExternalConnector_v0.1.3a.zip)でアップデートして下さい
- 430MHz帯と1200MHz帯を両方設置したレピータシステムにおいて、各々が同時に認証(=送受信)出来ない問題を修正
- アナウンス音声が流れない問題を修正
v0.1.2a(2019/11/30)
https://1drv.ms/u/s!Alt6WCVd8Pgfumj_R_HU7dZ_HVqW?e=grgbYo
※設定ファイルに変更はありませんので、通常のアップデートコマンド(sudo ./update.sh -u nora ~/NoraExternalConnector_v0.1.2a.zip)でアップデートして下さい
- 認証件数が極端に多くなると処理が重くなる問題を修正
- マルチフォワードレピータリスト取得の2回目以降が正しく反映されていなかった問題を修正
- ダッシュボードのホストリストが勝手に開いてしまう問題を修正
- ログの出力件数を削減
v0.1.0a(2019/11/29)
https://1drv.ms/u/s!Alt6WCVd8PgfuiI9vEBzNtjzgb1n?e=Y8uRxv
※このアップデートにおいても変更点が多い為、お手数ですが設定ファイルを前バージョンから流用せずに、NoraExternalConnector.xml.defaultからコピーして使用して頂きますようお願い致します
- 送信時に認証処理を追加した(※JARLもしくはG2/G3に登録していないとレピータに対して送信不可能になりました)
上記に伴い、設定ファイル内にRouting Service設定を追加(NoraExternalConnector.xml.default 172行目~)
基本的に日本国内のコールサインはJapanTrustに認証し、国外のコールサインはGlobalTrustに問い合わせますが、GlobalTrustがenable=falseの場合には日本国外のコールサインに関してもJapanTrustに問い合わせるように処理しています
正しく認証成功していれば、送信した時に下記のサイトにNoraGatewayの場合には2行表示、その他の場合には1行表示されます
http://log.d-star.info/usr/monitor.html - Publicで起動したNoraExternalConnectorが停止したレピータにおいて、マルチフォワードに切り替わらない問題を修正
これに伴い、hosts.output.txtのフォーマットを変更し、コールサインの重複を認めることにした - 基本使用プロトコル設定、使用プロトコル設定を追加(NoraExternalConnector.xml.default 321行目~)
- 自局同士で互いにリンクしないようにブロックする処理を追加した
- ダッシュボードのホストリストを別窓に表示するようにした
v0.0.6a(2019/11/16)
https://1drv.ms/u/s!Alt6WCVd8PgftwV47NqbBZxXP0tH?e=TnWJp0
ダッシュボードサンプル(京都南):http://jp3yix.mydns.jp:40080/
※このアップデートでは変更点が多い為、お手数ですが設定ファイルを前バージョンから流用せずに、NoraExternalConnector.xml.defaultからコピーして使用して頂きますようお願い致します
- ダッシュボード機能を追加した(ダッシュボード&インストール方法はNoraGatewayと共用ですが、ファイルパス(/opt/NoraGateway/dashboard→/opt/NoraExternalConnector/dashboard)などを読み替えて下さい
(設定ファイル内WebRemoteControlService)
NoraGatewayダッシュボードのインストール方法 - アナウンス音声を選択出来るようにした(設定ファイル内announceVoice)
- アナウンス音声に無音(Silent)を追加した
- 使用されない外部への接続を自動で切断する機能を追加した
(設定ファイル内autoDisconnectFromReflectorOutgoingUnusedMinutes) - ブラックリストを追加した
設定された外部への接続、レピータノードからの接続を拒否します
(設定ファイル内ReflectorBlackList)
この機能追加に伴い、一部外部へのリンクはデフォルトで不可としました - xchangeに対するキャッシュを追加した(レピータ&multi_forward等のアドオンプログラムに対して、若干の遅延が発生します)
v0.0.3a(2019/11/04)
https://1drv.ms/u/s!Alt6WCVd8PgftASp32d8UFjl5n-p?e=zVA3Hh
- xchangeに送信する終端パケットを32→29パケットに変更した
- DCS/DPlus/DExtra側から接続された場合に、トークの途中からでも送信するようにした
- DCS/DPlus/DExtraそれぞれのプロトコルに対して、Outgoing/Incoming接続の有効・無効を設定できるようにした
(上記の伴い、DPlusのIncomingはデフォルトで有効、Outgoingはデフォルトで無効としました)
v0.0.1a(2019/10/22)
https://1drv.ms/u/s!Alt6WCVd8PgfsWGS_2IvL_vhrBkf?e=LKhdSV
【8】課題など
- 接続しているユーザー表示がありません(ログにはIPアドレスとコールサインが残ります)
- 多数のユーザーが接続した場合に高負荷になりやすい
【9】FAQ
- 公開しないで試験・検証をしたい
→設定ファイル内GatewayのscopeをPublicからPrivateに変更を行えば公開されなくなります - レピータのRFにネット側からの音声が出力されない&レピータRFからの音声がネット側に流れない
→xchangeと通信できていない可能性があります。xchangeの設定を確認し再起動、またNoraExternalConnector側ルーターのポート開放がされているか確認して下さい
正常にxchangeと通信が出来ていれば、NoraExternalConnector起動直後のログ(log/NoraExternalConnector.log)に、
「XChange server address set to レピータゲートウェイPCのIPアドレス:ポート番号」が記録されていますので、確認願います - ネット側は正常に交信が出来る&ネット側からレピータへ抜ける&ゲート超えの音声は聞こえるが、レピータ側の音声が一切聞こえない(2019/11/09追加)
→xchangeとIC-RP2Cのモニター機能間の通信がされていない可能性があります。IC-RP2Cの設定でMonitor機能がONになっている事とMonitor出力先アドレスがxchangeに向いているか確認してみて下さい。また、xchange.confのMON_PORTとIC-RP2Cモニター機能のポートが一致していることも併せて確認願います
正常にxchangeとIC-RP2C間の通信が行われていれば、レピータにRFでアクセスすると、xchangeステータスWebページ(HTTP)の「monitor in」の数値が増加していきます。この数値が0ですと、恐らく通信が出来ていません。 - NoraExternalConnectorを設置したが、管理者自身がアクセスできない
→同じローカルネットワークにNoraExternalConnectorが存在すると、ローカルネットワークからWANルーターに割り当てられたグローバルIPに接続しようとする為、接続が出来ません
以下のどちらかで解決可能です
※以下は、管理者自身のNoraGatewayに設定して下さい
【ReflectorHostFileDownloadServiceにローカルファイルを一定時間で読み込ませる方法】
・./config/NoraExternalConnector.xml内ReflectorHostFileDownloadServiceのURLEntryに下記を追記します
<URLEntry enable="true" intervalMinutes="360" url="file:./users_hostfile.txt" />
・./users_hostfile.txtを/opt/NoraExternalConnectorに作成し、下記の内容で保存します
コールサイン、IPはそれぞれの環境に合わせて変更して下さい
(1200MHzが含まれるシステムでは、2行になります)JQ1ZYC A 127.0.0.1:30051 DCS 0
(タブ区切りです)
上記のように記述したコールサインの情報は、自動では書き換わらなくなりますので、管理者自身もアクセス可能になります
【./config/hosts.txtに追記をする方法】
※こちらは、アップデートを行うと書き換わってしまいますので、アップデートの度に再度書き換える必要があります
・./config/host.txtの最後の行に下記を追記します
コールサイン、IPはそれぞれの環境に合わせて変更して下さいJQ1ZYC A 127.0.0.1:30051 DCS 0
(タブ区切りです)
上記のように記述したコールサインの情報は、自動では書き換わらなくなりますので、管理者自身もアクセス可能になります - レピータに接続しないで、単にルームとして使用したい
→xchangeと通信しなければ単なるルームとして機能します
その場合、設定ファイルのRepeaterがルームに該当し、識別符号の重複しない範囲でルームを設置する事が可能になります - Auth failed userとログコンソールに出て、xchange(レピータ)に対して音声が抜けていかない(認証が通らない)
→MYに設定しているコールサインがJARLもしくはG2/G3登録済みで、NoraGatewayやMS-MS3を用いてのゲート超えか、レピータへカーチャンクを行えば通るようになります。
「認証=登録有無」ではなく、「認証=最終アクセスレピータのデータ有無」で判断していますので、登録しているだけですと認証は通りません。
v0.1.5a現在の実装では、認証が通ると3日間7日間はそのまま認証結果を保持していますので、その間は認証済みユーザーとして無条件で通ります。認証が通らなかったユーザーは、認証失敗時点から5分ほどは無条件でブロックし、5分経過後に送信があれば再度、認証処理が試行されます。 - アップデートしたらダッシュボードが見られなくなった
→ブラウザのキャッシュを削除してください
【10】問い合わせ先
不具合等のお問い合わせは、必ずログを添付して頂ますようお願い致します
圏央道友会 まいたけ吾郎
kenoh_doyu【@】txb.sakura.ne.jp
【11】参考資料
- ダッシュボード用nginx defaultサイトファイル(/etc/nginx/sites-available/default)
## # You should look at the following URL's in order to grasp a solid understanding # of Nginx configuration files in order to fully unleash the power of Nginx. # https://www.nginx.com/resources/wiki/start/ # https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/ # https://wiki.debian.org/Nginx/DirectoryStructure # # In most cases, administrators will remove this file from sites-enabled/ and # leave it as reference inside of sites-available where it will continue to be # updated by the nginx packaging team. # # This file will automatically load configuration files provided by other # applications, such as Drupal or Wordpress. These applications will be made # available underneath a path with that package name, such as /drupal8. # # Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples. ## # Default server configuration # map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 80 default_server; #listen [::]:80 default_server; # SSL configuration # # listen 443 ssl default_server; # listen [::]:443 ssl default_server; # # Note: You should disable gzip for SSL traffic. # See: https://bugs.debian.org/773332 # # Read up on ssl_ciphers to ensure a secure configuration. # See: https://bugs.debian.org/765782 # # Self signed certs generated by the ssl-cert package # Don't use them in a production server! # # include snippets/snakeoil.conf; root /opt/NoraExternalConnector/dashboard/; # Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html; server_name _; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; } location /nora/ { proxy_pass http://localhost:3000/nora/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; } # pass PHP scripts to FastCGI server # #location ~ \.php$ { # include snippets/fastcgi-php.conf; # # # With php-fpm (or other unix sockets): # fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; # # With php-cgi (or other tcp sockets): # fastcgi_pass 127.0.0.1:9000; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # Virtual Host configuration for example.com # # You can move that to a different file under sites-available/ and symlink that # to sites-enabled/ to enable it. # #server { # listen 80; # listen [::]:80; # # server_name example.com; # # root /var/www/example.com; # index index.html; # # location / { # try_files $uri $uri/ =404; # } #}