Back
XLX Reflector とは正しくは
XLX Multiprotocol Gateway Reflector と言い、その名のとおりD-STARに於ける3つの接続手順であるDPlus(REF)、DCS、DExtra (XRF)の全てをサポートします。つまりどの手順を使用しても接続できると言うことです。
=MEMO= 現在ではD-STARのみならず、DMR に関しても接続出来、XLXシステムとしては AMBE++規格のDVSI Vocoderを2チャンネル以上使用することにより、同じモジュールに接続したD-STARとDMR間でプロトコルの違いを気にせず通信が出来る仕組みになっています。
図のようにダッシュボード(WEB)も標準で備わって居り、画像を変更したりする事に依りカスタマイズも可能です。勿論、HTMLやPHPをご存じであれば大きく変化させる事も可能です。
特徴としては A B C 3つのモジュールを主に使用(H までは接続可能)し、A はインターナショナルとして世界中とピアトゥピア(Peer to Pear:後述)に依ってリフレクター同士が結ばれます。日本では先駆者によって B はローカルグループ、C は日本語による日本国内のピアトゥピアに使用されています。
Special thanks to LX1IQ Mr. Luc Engelmann and Digital Voice Communications Working Group of The Radioamateurs du Luxembourg
=MEMO=
XLXリフレクター・ソフトウェアの使用に関しては dvc@rlx.lu にご一報ください。
環境を整える
● Raspberry Pi2 の準備
今回、私の場合は限界を知る為に Raspberry Pi2 にしましたが、実際の運用においては Pi3 又は通常の PC を使用した方が良いと思います。(繋がるユーザ数次第ですが・・特にWEB参照数が影響大)- microSDにOSイメージを焼き、Rasbian が立ち上がるようにします。
- パソコンを利用される方
- 作業用のパソコンから SSH 接続できるようにします。
- microSD の領域拡張と update, upgrade は上記URLをご参照の上、忘れずに行ってください。
詳しくはRaspbian(Jessie)のインストール for HAMをご参照ください。
今回のケースでは、ダウンロードしたOSイメージに含まれる機能のみで構いません。上記参照ページでの「追加の機能をインストールします」以下の説明は無視してください。
詳しくは眠っていたパソコンが Linux (Debian8)で蘇るをご参照ください。
一度、キーボードやディスプレイを接続してターミナルで sudo ifconfig して IPアドレスを確認するか、Fing(スマホ用)や Angry IP Scanner 等のアプリをご使用ください。 なお、その際にはID : pi Password : raspberry が必要になります。
SSH接続には Putty 等のツールが便利ですが、Windowsならコマンドプロンプト、Linuxならターミナルから ssh 192.168.x.y -l pi -p 22 とすれば接続できます。 (192.168.x.yの部分は確認したIPアドレスです。)
=MEMO=
2017.07.11現在、最新の Stretch(Debian 9)にも対応しているとのアナウンスが Luc から有りました。
2017.07.17現在、最新の Stretch(Raspbian 9 : Jessie dist-upgrade)に対応している事を確認しました。
● systemd による固定IPアドレスの取得
-
ここでの設定方法は飽くまでテキストモード( X Window を使用しない)での使用を想定しています。パワーに余裕が有る場合や、
一般のパソコンやサーバを利用する場合はGUI標準の wicd を使用した方が便利です。
- ユニットファイル(Unit File)の作成
- 既存のネットワークシステムを無効にします。
- 作成した wired.network ファイルを使ってネットワークを立ち上げます。
- これで再起動すれば、必要とするネットワークサービスだけが立ち上がります。
ファイル名には一定のルールが有ります。wiredとした部分は eth0, wlan0, wireless など判別しやすい物を使用しますが、ドット以降は networkとする必要が有ります。 (WiFi を利用したい方は、テキストモードでWi-Fi接続を安定させる(Jessie)をご覧ください。
$ sudo nano /etc/systemd/network/wired.network
GNU nano 2.2.6 File: /etc/systemd/network/wired.network
[Match] Name=eth0 [Network] #DHCP=yes DHCP=no Address=10.0.0.10/24 Gateway=10.0.0.1
[Ctrl]+[o]➡[Enter]➡[Ctrl]+[x]で保存・終了します。
先ず、dhcpcd.serviceを無効にします。このサービスは全てのインターフェースにdhcpを機能させようとして不安定要素の一つになる様なのでユニットファイルをリネームしてしまいます。
$ cd /lib/systemd/system $ sudo mv dhcpcd.service dhcpcd.service.org $ cd # homeに戻る
コマンドでも分かるようにユニットファイルの保存されている場所は /lib/systemd/system と /etc/systemd/system の2ヶ所ですが、ユーザ作成用としては後者です。 そして、ユーザ作成用の /etc 内の方が優先されます。
次に、自動起動スクリプト(/etc/init.d/dhcpcd)も無効にします。
$ sudo update-rc.d dhcpcd remove
私の場合、これで再起動してみたところ相変わらず dhcpcd が起動していました。($ ps -eで確認)そこで、スクリプト自体を移動させてみました。
$ sudo mv /etc/init.d/dhcpcd /home/pi
これで立ち上がらなくする事が出来ました。
最後にもう一つ、systemd のサービスである networking.service を無効にします。
$ sudo systemctl stop networking.service $ sudo systemctl disable networking.service
現在は、networking から systemd のネットワークサービスへの過渡期で、標準では起動(有効)に設定されていません。
$ sudo systemctl is-enabled systemd-networkd.service disable $ sudo systemctl enable systemd-networkd.service
$ sudo reboot
● ルータのフィルタリング・フォワーディングの設定とダイナミックDNS
- 下記各ポートのインバウンドを通すようフィルタリング設定を変更します
- 各ポートから XLX Reflector の IPアドレス宛のフォワーディングを設定します
- 固定グローバルアドレスを取得するか、ダイナミックDNSを設定します
ポート | プロトコル | 概 要 |
---|---|---|
80 | TCP | http ダッシュボード用WEBの参照 httpsの場合 443 |
10001 | UDP | XLX本体とのJSONインターフェース |
10002 | UDP | XLXインターリンク(Peer to Peer) |
22又は10022 | TCP | セキュリティ上、リモートによる支援が必要な場合のみとする |
20001 | UDP | DPlus プロトコル用 |
30001 | UDP | DExtra プロトコル用 |
30051 | UDP | DCS プロトコル用 |
上記フィルタリング設定やフォワーディング設定についてはお持ちのルータのマニュアルに従ってください。
詳しくは、ご契約のプロバイダーのWEBなどをご覧ください。 有償サービスはIPアドレスが変化した場合でもプロバイダー側で追随してくれます。 また、無償サービスでも自動書き換えに対応した機能を提供しているところもあります。 詳しくは、Linux(Raspbian)でダイナミックDNSを使うをご参照ください。
XLX Reflector のインストール
● xlxd を GitHub よりクローン(ダウンロード)します。
https://github.com/LX3JL/xlxd の Cloan or download ▼ から[Download ZIP]するか、次のように GIT Clone してください。- 追加機能のインストール
- xlxd をダウンロードします
- xlxd をコンパイルしてインストール
- 自動起動スクリプトを /etc/init.d/ へコピーして編集します
- 自動起動用スクリプトを自動起動させる為の工夫
- ダッシュボード用テンポラリーファイルをWEB用ディレクトリーへコピーします。
- ハッシュ用フォルダ(/tmp)を、専用フォルダ(/callhome)に変更します。
- 最も重要な設定ファイルを編集します。
$ sudo apt-get install git git-core $ sudo apt-get install php # php パッケージ(apache2が含まれます。2018年現在 PHP7)
$ git clone https://github.com/LX3JL/xlxd.git
$ cd xlxd/src/ $ sudo make $ sudo make clean $ sudo make install $ cd
インストール先は /xlxd です。
$ sudo cp xlxd/scripts/xlxd /etc/init.d/ $ sudo nano /etc/init.d/xlxd
GNU nano 2.2.6 File: /etc/init.d/xlxd
:
:
# change below settings according to your system
NAME="xlxd"
DAEMON="/xlxd/xlxd"
ARGUMENTS="XLX047 10.0.0.10 127.0.0.1"
PIDFILE="/var/log/xlxd.pid"
USER=root
GROUP=root
:
:
「XLX047」の部分は、欲しい番号が使われていないのを確認の上、記入します。先取方式ですが正式登録(後述の自動認証)されねばなりません。 また、その後のIPアドレスは前者が上記ネットワークの設定で固定したアドレス、後者がAMBE Serverのアドレスで使用しない時でも127.0.0.1にします。 [Ctrl]+[o]➡[Enter]➡[Ctrl]+[x]で保存・終了します。
=MEMO= $ sudo /etc/init.d/xlxd start とするとその時は立ち上がるのですが、$ sudo update-rc.d xlxd defaults としても自動起動しません。
ネットワーク設定の時同様にユニットファイルを作成します。
$ sudo nano /etc/systemd/system/xlxd.service
GNU nano 2.2.6 File: /etc/systemd/system/xlxd.service
[Unit]
Description=XLX Reflector Daemon by LC1IQ
After=systemd-networkd.service
# ネットワーク設定の違いにより自動起動しない時試してください。
# After=network.target
# After=networking.service
[Service]
Type=forking
ExecStart=/etc/init.d/xlxd start
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
[Ctrl]+[o]➡[Enter]➡[Ctrl]+[x]で保存・終了します。
既存のファイルを変更しただけなので本当に正しい記述かは、今少し勉強が必要です。 今回は起動スクリプトを自動スタートするユニットファイルという事で逃げていますが、本来ならばユニットファイルだけで /xlxd/xlxd を起動できるのではと思っています。
次に、ユニットファイルを起動用コマンドとして有効にします。
$ sudo systemctl enable xlxd.service
これで、再起動すれば自動起動してくれるはずですが、まだ重要な環境設定が終わっていませんので、後で再起動する事になります。
$ sudo cp -r ~/xlxd/dashboard/* /var/www/html/ $ sudo rm /var/www/html/index.html
WEB公開用ディレクトリーには、apache2のインストールによって index.html が存在していますので、ここでコピーしたファイルの index.php と混同しないように最初に削除しておきます。(indexと言う名のファイルが2つ有るのもトラブルの元)
理由は、tmpにハッシュ用ファイル(callinghome.php)が有ると、PCを再起動する度に内容が失われ、XLX管理サーバとの接続が失われる為です。
$ sudo mkdir /callhome $ sudo chmod 777 /callhome $ sudo chmod +r /var/log/messages
callinghomes.php は接続が有効になると自動作成されます。
=MEMO= リフレクタリスト(後述)に於いて接続完了のグリーンアイコンが赤のダウンに変わったり、リフレクタの表示自体が消えた時などは、この callinghomes.php を一度削除すると正常に戻る事が有るとの情報を頂きました。(from JR1OFP 鈴木さん)
$ sudo nano /var/www/html/pgs/config.inc.php
GNU nano 2.2.6 File: /var/www/html/pgs/config.inc.php
<?php /* Possible values for IPModus HideIP ShowFullIP ShowLast1ByteOfIP ShowLast2ByteOfIP ShowLast3ByteOfIP */ $Service = array(); $CallingHome = array(); $PageOptions = array(); $PageOptions['ContactEmail'] = 'xlx047@todo.vc'; // 管理者用メールアドレス $PageOptions['DashboardVersion'] = '2.3.9'; // Dashboard Version $PageOptions['PageRefreshActive'] = true; // WEBのリフレッシュをする(true)/しない(false) $PageOptions['PageRefreshDelay'] = '10000'; // 10秒に1回 $PageOptions['RepeatersPage'] = array(); $PageOptions['RepeatersPage']['LimitTo'] = 99; // 接続可能なリピータ数の上限 $PageOptions['RepeatersPage']['IPModus'] = 'ShowLast1ByteOfIP'; // IPアドレスを右1桁のみ表示(標準:すべて表示) $PageOptions['RepeatersPage']['MasqueradeCharacter'] = '*'; // 隠す部分の代替え文字指定 $PageOptions['PeerPage'] = array(); $PageOptions['PeerPage']['LimitTo'] = 99; // 接続可能なピア数の上限 $PageOptions['PeerPage']['IPModus'] = 'ShowLast1ByteOfIP'; // IPアドレスを右1桁のみ表示(標準:すべて表示) $PageOptions['PeerPage']['MasqueradeCharacter'] = '*'; // 隠す部分の代替え文字指定 $PageOptions['LastHeardPage']['LimitTo'] = 39; // ラストハードの表示行数を指定(規定値40行) $PageOptions['ModuleNames'] = array(); // Module nomination 変更しています $PageOptions['ModuleNames']['A'] = 'Int\'l Peers'; $PageOptions['ModuleNames']['B'] = 'JA Room'; $PageOptions['ModuleNames']['C'] = 'JA Peers'; $PageOptions['ModuleNames']['D'] = ''; $PageOptions['MetaDescription'] = 'XLX is a D-Star Reflector System for Ham Radio Operators.'; $PageOptions['MetaKeywords'] = 'Ham Radio, D-Star, XReflector, XLX, XRF, DCS, REF, '; $PageOptions['MetaAuthor'] = 'LX1IQ'; $PageOptions['MetaRevisit'] = 'After 30 Days'; // この5項目は SEO 対策なので変更しない。 $PageOptions['MetaRobots'] = 'index,follow'; $PageOptions['UserPage']['ShowFilter'] = true; // ユーザページのフィルタ記入枠を表示又は消去(false)します $PageOptions['Traffic']['Show'] = true; // ネットワークトラフィックのメニューを表示又は消去(false) $Service['PIDFile'] = '/var/log/xlxd.pid'; $Service['XMLFile'] = '/var/log/xlxd.xml'; $CallingHome['Active'] = true; // ここをtrueにしないと接続不可 $CallingHome['MyDashBoardURL'] = 'http://xlx047.ddns.net'; // dashboard url $CallingHome['ServerURL'] = 'http://xlxapi.rlx.lu/api.php'; // 変更厳禁 $CallingHome['PushDelay'] = 600; // push delay in seconds $CallingHome['Country'] = "JAPAN"; // 国名又はエリア名 $CallingHome['Comment'] = "Hosted by 'Day After Day D*Star Network'. Now Testing on Jessie 4.4.13-v7+ RPi2."; // コメント最大100文字 $CallingHome['HashFile'] = "/callhome/callinghome.php"; // /tmp/から/callhome/に変更 $CallingHome['OverrideIPAddress'] = ""; // 設定不要 $CallingHome['InterlinkFile'] = "/xlxd/xlxd.interlink"; // インターリンク設定ファイルの場所 $VNStat['Interfaces'] = array(); $VNStat['Interfaces'][0]['Name'] = 'eth0'; // ネットワークトラフィックを測定するインターフェース名(Wi-Fi: wlan0など) $VNStat['Interfaces'][0]['Address'] = 'eth0'; $VNStat['Binary'] = '/usr/bin/vnstat'; /* include an extra config file for people who dont like to mess with shipped config.ing.php this makes updating dashboard from git a little bit easier */ if (file_exists("../config.inc.php")) { include ("../config.inc.php"); } ?>
赤い文字の部分が今回、変更・追加した部分です。
[Ctrl]+[o]➡[Enter]➡[Ctrl]+[x]で保存・終了します。
再起動後のチェックポイントと調整・改良
● 再起動後にチェックすべき事
- さて前項までで全ての準備が整いました。再起動します。
- WEBが表示しないなどの問題点が有る場合、まずxlxdが起動しているかを確認します。
- apache2に問題は無いか?のチェックをします。
- WEBが表示したら確認すべき事(リフレクターリスト)
全てが、うまく行っているとXLX Reflector Serverが立ち上がると、他のマシンのブラウザで http://10.0.0.10 を見てみると基本形のWEBが立ち上がります。 (右図は基本形ではありません)
そして、WEBメニューの[Reflectorlist]をクリックすると、全世界のXLXのリンクリストが表示されます。その中のXLX047がグリーンのUPマークになっていれば成功です。
$ ps -e | grep xlxd 29227 ? 08:56:50 xlxd
プロセス番号と共に上のように表示されれば起動しています。もし起動していない時は
$ sudo /etc/init.d/xlxd start
としてみて、もし立ち上がれば /etc/systemd/system/xlxd.service に問題があるかも知れません。
$ ps -e | grep apache2 1356 ? 00:00:02 apache2 1359 ? 00:10:01 apache2 1362 ? 00:10:15 apache2 1456 ? 00:10:07 apache2 1457 ? 00:09:48 apache2 4624 ? 00:01:08 apache2 4674 ? 00:01:22 apache2 4675 ? 00:01:18 apache2 4676 ? 00:01:07 apache2 4700 ? 00:01:00 apache2 5008 ? 00:00:12 apache2
apache2 が立ち上がっている事が分かります。それでも表示しない場合は、WEB公開用のディレクトリー指定が違っているかも知れません。 今回のシナリオどおりにインストールを行うと、公開ディレクトリーの指定を変更する必要は無いはずですが、チェックしてみます。 実際に index.php の存在している公開フォルダは /var/www/html です。
$ sudo nano /etc/apache2/sites-available/000-default.conf
GNU nano 2.2.6 File: /etc/apache2/sites-available/000-default.conf
# The ServerName directive sets the request scheme, hostname and port that # the server uses to identify itself. This is used when creating # redirection URLs. In the context of virtual hosts, the ServerName # specifies what hostname must appear in the request's Host: header to # match this virtual host. For the default virtual host (this file) this # value is not decisive as it is used as a last resort host regardless. # However, you must set it for any further virtual host explicitly. #ServerName www.example.com ServerAdmin webmaster@localhost DocumentRoot /var/www/html : :
[Ctrl]+[o]➡[Enter]➡[Ctrl]+[x]で保存・終了します。
再起動直後の成功例ならば良いのですが、リフレクターリストに構築した XLX Reflector が表示されない場合は、/etc/init.d/xlxd の個別設定部分と /var/www/html/pgs/config.inc.php を見直す必要が有るかも知れません。また、前述の=MEMO=の様に callinghomes.php を一度削除してみると良いかも知れません。
● ちょっとした改良?
- どうにも気になる日付表示
気にしなければ良いのですが、yyyy.mm.dd 表示に慣れている私としては dd.mm.yyyy はとても見難く間違いやすいので表示形式を変更しました。
$ sudo nano /var/www/html/pgs/users.php
44行目・・・
GNU nano 2.2.6 File: /var/www/html/pgs/users.php
<td width="150">'.@date("Y.m.d H:i", $Reflector->Stations[$i]->GetLastHeardTime()).'</td>
d.m.Y となっているのを Y.m.d に変更するだけです。大文字/小文字は意味がありますので注意してください。 これを、repeaters.php、peers.php にも施します。
その他テスト運用で得られた結果はリフレクタWEB(XLX047)にも記載しておりますのでご参照ください。
Back
73
J E 3 H C Z / REF047 C / XLX047 B
お世話になります。
返信削除JN4TBI
資料を参考にしながら、Pi4でXLX430を立ち上げました。
ネットで検索したがわからず、一つご教授して頂けたい件がありましてよろしくお願いします。
他のリフレクターにインターリンクPeersの方法がわからず頓挫しています。できるだけ自分で操作して作り上げたいと思っています。
よろしくお願いします。
JN4TBI局、おはようございます。
削除早速ですがお尋ねの件について、先ずインターリンクして欲しい相手に、貴局のリフレクタ名とリンクして欲しいモジュール名を指定して依頼メールを出してください。
依頼する相手によってモジュールが異なっていても構いません。
受託のメールが来るか、直接インターリンクの信号が返って来ます。
(インターリンクには UDP: 10002のポートフォワードが必要です)
確認には次の様にします。
$ tail -f /var/log/messages | egrep -v 'DPlus'
試しに、貴局自身が接続したりカーチャンクするとその様子が表示されます。
相手の了解が確認出来たら、自局側の設定をします。
$ sudo nano /xlxd/xlxd.interlink
XLX???[tab]xlx???.dynamicdns.net[tab]BC ----> FQDN(名前)
XLX???[tab]111.222.333.444[tab][tab]BC ----> グローバルIPアドレス
このファイルを保存すると、ちょっとタイミングを置いて、先ほどのログに接続requestのパケットと接続の結果が表示されます。(双方の信号が有れば・・)
相手に連絡せずに、この設定を先にしてしまうと、相手リフレクタへ10秒毎にパケットが飛び、攻撃しているように見えますのでお気を付けください。
以上、お楽しみください。
OMさん早急の対応ありがとうございます。
返信削除早速試させていただきます。
分からいことがありましたら。
お手数ですが質問させていただきます。
よろしくお願いします。
JN4TBI
JN4TBI様
削除恐れ入りますが、ご質問はTOPページ(メニュー)最下部のリンクより、フォーラムにお願いいたします。