2017年2月17日金曜日

DVAP、ノードアダプターV7をリピータ同様にするソフト(dv_ap)

Back


DVAPノードアダプターV7 をリフレクターなどに接続して利用されている方は多いと思います。 最近は、DVMEGA や、OpenSpot、DV4mini 等々新しいデバイスも増えてD-STAR以外にもその用途が拡がって来ています。 また日本のコールサインルーティング(ゲート越え)の世界にも「ターミナルモードやアクセスポイントモード(アイコム社)」が実装され、必ずしもリピータを通さずとも遠隔地と交信できるようになって来ました。

今回は、接続タイプのノードであるDVAP又はノードアダプターV7を、安田OM (7M3TJZ局)が作成された dv_ap(JARL D-STAR委員会版)というソフトを使って、アクセスポイントモードのようにコールサインルーティング用のアクセスポイント(ノード)に仕上げます。

ここでご紹介している D-STAR ネットワークへの接続ツール(各種ノード・DVAPなど)の運用においては 免許申請について(安田OMサイト)をご参照ください。 (2013年8月 ガイドラインが示されました。)

説明文中ではDVAPを使用します。出力は10mWで最大でも100m位の範囲をカバーし、プライベートノードに適しています。またノードアダプターV7を使用した場合は、市販のデータ端子を持つFMアナログ無線機の信号がD-STARの信号に変換され、許可された出力の範囲で広域のノードとして利用できます。


=MEMO= アップグレードが頻繁に行われています。(2017.6.23現在 dv_ap V00.64
$ sudo apt-get update
$ sudo apt-get upgrade dv-ap
  :
WARNING: The following packages cannot be authenticated!
  dv-ap
Install these packages without verification? [y/N] y

=MEMO= dv_ap V00.50以降かなり変更(改善)が有りましたので、内容を見直し書き換えました。 (2017.05.20)
=MEMO= dv_ap V00.60にて再度スマートフォンのテザリングWi-Fiによるテストを行ったところ、時々信号が通らないことも有りましたが、実用上問題ない程度に改善されておりました。最下部にその場合の設定やテザリングとホームWi-Fiの自動切り替えなどのについて記載致しましたのでご参照ください。
(2017.06.08 追記)

ハードウェアの準備

  1. DVAPは、DVAP純正のソフトウェア DVAPTool で使用できていた物ならそのまま使用できます。 ケーブルは、タイプA<==>miniUSB の物が必要になります。

  2. ノードアダプターV7を使われる場合は、ノードアダプターV7(Satoshi Board)による自宅ノードを参照して、ハードウェアの調整を済ませて置いてください。
    また、ノードアダプターとFMアナログ無線機のデータポートを接続するDIN6ピンのケーブルも必要です。USBケーブルはプリンタ用のタイプA<==>タイプBの物となります。

  3. コントローラにはRaspberry Pi3 を使用しました。Wi-Fiモジュールもオンボードなので電源ケーブル以外は何も要りません。勿論、タイプA+やB+、Pi2等も問題なく使えます。 Raspbian Jessie は、Raspbian(Jessie)のインストール for HAM などを参照の上、接続したいルータにケーブル接続できる事を確認しておいてください。(最初はWi-Fi接続できません)

  4. もし、古いRaspberryPi A+,B+,2 等をお持ちの場合は、USBタイプのWi-Fi子機でも全く同じ設定内容で接続できます。私の場合、右写真の子機で、RaspberryPi3で完成したmicroSDカードをPiB+に差し替えるだけで問題なく稼働しました。

  5. WiFi接続したい場合は、Raspberry Pi で複数 Wi-Fi の切り替えをするを参照してください。

作業環境の構築

今までのように、いきなりリモート(SSH)でと言う訳に行かなくなりました。 セキュリティの為と思いますがデフォルトでは SSH が無効になっています。そこでディスプレイ・キーボードを接続して直接 Raspberry を操作しなければなりません。
  1. ログイン・ユーザ:pi    パスワード: raspberry でログインします。


  2. =MEMO= SSHを有効にした場合は、必ずパスワードを変更してください。 $ sudo raspi-config で変更するか、$ passwd と入力して変更します。

  3. このまま直接 RaspberryPi 上で作業を進めても構いません。今回はWindowsマシンからリモートで操作したいので SSH を有効にします。

  4. $ systemctl list-unit-files
    

    sudo 無しで構いません, [space]でページ送りします。リモートで作業するのに必要なサービスは ssh.service ですが、disable になっているのが分かります。

    サービス名が分かっている時は次の方法でも判別できます。
    $ sudo systemctl is-enabled ssh.service
    disabled
    

    Windowsなど他のマシンからリモート出来るようにsshを有効にします。
    $ sudo systemctl enable ssh.service
    Synchronizing state for ssh.service with sysvinit using update-rc.d...
    Executing /usr/sbin/update-rc.d ssh defaults
    insserv: warning: current start runlevel(s) (empty) of script `ssh' overrides LSB defaults (2 3 4 5).
    insserv: warning: current stop runlevel(s) (2 3 4 5) of script `ssh' overrides LSB defaults (empty).
    Executing /usr/sbin/update-rc.d ssh enable
    Created symlink from /etc/systemd/system/sshd.service to /lib/systemd/system/ssh.service.
    

    再起動すると自動起動しますが、すぐに利用したい時は
    $ sudo systemctl start ssh.service
    

    とします。なお、ここでリモートする場合は、ifconfig でIPアドレスを確認しておいてください。

  5. ソフトウェアがインストール出来るように、また今後アップデートし易いように準備します。

  6. 特定のフォルダ内に、必要なソフトウェアの有り場所を記したリストファイルをダウンロードします。
    $ cd /etc/apt/sources.list.d
    $ sudo wget app.d-star.info/debian/jarl.list
    $ ls
    jarl.list  raspi.list
    $ cd
    

    上で設定した場所も含めて更新ファイルを検索、アップデートします。
    $ sudo apt-get update
    $ sudo apt-get upgrade -y
    

    ソフトウェアが一旦インストールされると、上記コマンドでソフトウェアの更新も認識されアップデートされます。

ソフトウェア(dv_ap)のインストールと環境設定

  1. dv_ap をインストールします。

  2. $ sudo apt-get install dv-ap
         :
    Install these packages without verification? [y/N] y
         :
    

  3. いくつかのファイルを、指定のフォルダにコピー又は移動します。

  4. 先ず、ファイルが格納されているフォルダへ入ります。
    $ cd /usr/share/doc/dv-ap
    

    フォルダが、初期には存在しない場合の、配布先フォルダを作成します。
    $ sudo mkdir /opt/dv_ap
    $ sudo mkdir /opt/dv_ap/etc
    $ sudo mkdir /opt/dv_ap/web
    

    次の各ファイルをそれぞれコピーします。
    $ sudo cp 99-dvap.rules /etc/udev/rules.d
    $ sudo cp dv_ap.css dv_ap.js logo.png /opt/dv_ap/web
    $ sudo cp dv_ap.conf.dvap /opt/dv_ap/etc/dv_ap.conf
    $ cd
    

    上の最終行は、DVAPの場合です。ノードアダプターV7の場合は次の様にコピーします。
    $ sudo cp /usr/share/doc/dv_ap.conf.node /opt/dv_ap/etc/dv_ap.conf
    

  5. dv_apの設定ファイル(dv_ap.conf)を編集します。

  6. $ sudo nano /opt/dv_ap/etc/dv_ap.conf
    
      GNU nano 2.2.6               File: /opt/dv_ap/etc/dv_ap.conf
    #########################################
    #                                       #
    #       /opt/dv_ap/etc/dv_ap.conf       #
    #                                       #
    #########################################
    #
    # Basic settings
    #
    TRUST_SERVER=trust.d-star.info
    
    #NODE_CALL=JL3ZBS B
    DVAP_CALL=JL3ZBS A
    GATEWAY_CALL=JL3ZBS A
    DEBUG=1
    DVAP_FREQUENCY=144550000
    
    ###### within -45 and -128
    DVAP_SQUELCH=-90
    
    ###### Calibration frequency within -2000 and 2000Hz
    DVAP_CALIBRATION=100
    
    ###### Auto Calibration 1:ON 0:OFF
    DVAP_AUTO_CALIBRATION=1
    
    # NIC=eth0
    NIC=wlan0
    
    ###### if port forwarding exists uncomment UPNP=0
    #UPNP=0
    
    ###### sprit the TX/RX frequency
    #DVAP_TX_FREQUENCY=144550000
    #DVAP_RX_FREQUENCY=145550000
    
    #
    # DPRS settings
    #
    APRS_SERVER=d-prs.d-star.info:14580
    APRS_CALLSIGN=JL3ZBS
    RADIO_ID=P
    SEND_INTERVAL=60
    AUTO_RELINK=1
    BEACON_LAT=00.0000
    BEACON_LONG=000.0000
    BEACON_COMMENT=DV_AP D-PRS -> APRS
    BEACON_INTERVAL=1200
    
    #
    # Web Server setting
    #
    HTTP_PORT=8080
    
    
    [Ctrl]+[o],[Enter],[Ctrl]+[x]で保存・終了します。

  7. dv_apを自動起動するユニットファイルを作成する。

  8. $ sudo nano /etc/systemd/system/dv_ap.service
    
      GNU nano 2.2.6               File: /etc/systemd/system/dv_ap.service
    [Unit]
    Description=7M3TJZ DV Access Point (DVAP Tool for G1)
    After=network.target
    
    [Service]
    Type=forking
    ExecStart=/usr/bin/dv_ap
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    
    

  9. 自動起動を有効にし、確認します。

  10. $ sudo systemctl enable dv_ap.service
    $ sudo reboot
    

  11. 運用ログの表示


  12. =MEMO= 表示の内容は DEBUG=0, 1, 2 のレベルで変更できます。冒頭のメモをご覧ください。
    $ sudo touch /var/log/dv_ap.log
    $ tail -f -n30 /var/log/dv_ap.log
    

    繰り返し現れるメッセージを省く場合
    (aprsに関するメッセージと自動でポートチェックするメッセージ)
    $ tail -f -n30 /var/log/dv_ap.log | egrep -v 'aprsc|M-SEARCH'
    

    WEBで管理する場合は、Raspberry Piが接続されているルータの外側のアドレス(同じLAN上で管理する場合は Raspberry Pi のIPアドレス)に ":8080" を付けて参照する。

スマートフォンのテザリングWi-Fiによるモバイル運用

  1. dv_ap.config の変更

  2. #UPNP=0 と設定されている一行のコメントアウトマーク(#)を外し UPNP=0 とする。これはUPNPがゼロ(使用しない)という意味になります。

  3. スマートフォンに、外部グローバルアドレスから dv_ap が稼働しているローカルアドレスへポートフォワードするためのアプリをインストールする。

  4. Port Fowarder(G Herbst)

    他にもいろいろ有りますが、私はこれにしました。

  5. Port Fowarder の設定
    • スパナの形をした[ツールアイコン]をタップします。
    • IP Settings]をタップします。
    • Target IP]をタップして、dv_apが稼働している Raspberry Pi のIPアドレスを入力して[OK]します。
    • Public Intarface]を選択して rmnet_data0を選択したら、[戻る]をタップしてメイン画面にします。
    • (+)ボタンの形をしたアイコンをタップして、次の2ポートを追加します。
    • incoming Port on this Device400008080
      Port on Target Device400008080
      ProtocolUDPTCP
      スマホの外側からではなく、http://192.168.xx.yy:8080 の様に内部アドレスで参照する場合は、8080 TCPの設定は不要です。
    •    START   をタップしてフォワーディングを開始します。

    これで、ホームルータに於いて、手動でポートフォワードしているのと同様の設定(スマホをアプリによってルータとして設定)をしている事になります。

  6. テザリングWi-FiとホームルータによるWi-Fiを自動切り替えしたいような場合

  7.  通常、Raspbian Jessie を立ち上げると dhcpcd.serviceが自動的にIPアドレスを取りに行き、固定にする場合は /etc/dhcpcd.conf に固定アドレスを指定するなどします。ただ、今回のような場合固定アドレスは使用できません。その様な場合 dhcpcd では接続できない状況が発生したり、不安定になったりします。
     そこで、dhcpcd.service は無効にして別の方法を使うと、家の近く50から100mくらいまではホームルータに接続していて、それ以上離れるとスマホテザリングに自動接続します。
     詳しくは、テキストモードでWi-Fi接続を安定させる(Jessie)をご覧ください。

    このケースでは、テザリングWi-Fi側でもホームルータ側でも、dv-ap.confの内容が同じで行けるように「既存のポートフォワード有り(UPNP=0)」で統一しています。

     理由は、スマホ側では uPnP によるポート設定が出来ない為、必然的に UPNP=0 にならざるを得ないからです。
     次に、このような UPNP=0 であっても、DHCPで取得したアドレスに対してポートフォワードを自動設定する方法(dv_apが行っているのと同じ方法)と、自動起動について説明します。

    • 先ず、UPnPの機能を使ってdv_apの機能(#UPNP=0の時動作)としてではなく、別途あたかも手動で既存設定が有ったかのように前もってポートフォワードを準備します。その為、次のプログラムを前もってインストールして置きます。(2017.07.11 追記)

    • $ sudo apt-get install miniupnpc
      
      $ upnpc -l                                    ポートフォワードの一覧
      $ upnpc -a 192.168.10.100 40000 40000 udp     対象アドレス 対象ポート 外側ポート プロトコル
      $ upnpc -d 40000 udp                          ポートフォワードを削除
      

    • ユニットファイルを三つ作ります。まず一つ目はポートフォワードの設定を起動するファイルです。

    • $ sudo nano /etc/systemd/system/pforward.service
      
        GNU nano 2.2.6               File: /etc/systemd/system/pforward.service
      [Unit]
      Description=uPnPc Port Forward Setting
      
      [Service]
      Type=simple
      ExecStart=/usr/local/bin/pforward
      Restart=on-failure
      
      [Install]
      WantedBy=Multi-user.target
      
      

      更にサービスによって起動される設定用のスクリプトです。

      $ sudo nano /usr/local/bin/pforward
      
        GNU nano 2.2.6               File: /usr/local/bin/pforward
      #!/bin/sh
      IPADDR=`ifconfig wlan0 | awk '/inet / {print $2}' | awk -F: '{print $2}'`
      echo $IPADDR
      upnpc -d 8080 tcp
      upnpc -d 40000 udp
      upnpc -a $IPADDR 8080 8080 tcp
      upnpc -a $IPADDR 40000 40000 udp
      
      [Ctrl]+[o],[Enter],[Ctrl]+[x]で保存し終了します。

      $ sudo chmod +x /usr/local/bin/pforward
      $ sudo systemctl start pforwoad.service
      $ upnpc -l
      
      実行可能ファイルに設定して、start した後、リストアップコマンドで確認します。

    • 次に、dv_apを立ち上げるユニットファイルを作成します。

    • $ sudo nano /etc/systemd/system/dv_ap.service
      
        GNU nano 2.2.6               File: /etc/systemd/system/dv_ap.service
      [Unit]
      Description=7M3TJZ DV Access Point (DVAP Tool for G1)
      After=systemd-networkd.service
      Wants=pforward.service
      
      [Service]
      Type=forking
      ExecStart=/usr/bin/dv_ap
      Restart=on-failure
      
      

      Wants= に示されるサービスは、このdv_ap立ち上げに欲しいサービスです。同様に必要なサービスの場合、Requires= という表現が有りますが、 この場合、pforward.service が失敗するとこのサービスも失敗します。つまり、テザリングの場合uPnPは失敗しますので dv_ap も立ち上がらなくなります。

    • 三つ目に dv_ap の立ち上がるタイミングを採るファイルです。

    • $ sudo nano /etc/systemd/system/dv_ap.timer
      
        GNU nano 2.2.6               File: /etc/systemd/system/dv_ap.timer
      [Unit]
      Description=dv_ap Start delay timer
      
      [Timer]
      OnBootSec=30sec
      #Unit=dv_ap.service
      
      [Install]
      WantedBy=timers.target
      
      

      ブートアップしたタイミングから30秒後に、Unit= で締めしたサービスを実行します。但し、ファイル名が同じ場合(dv_ap.service と dv_ap.timer)記載する必要は有りません。
      また、通常 .service ファイルには [Install] セクションが無いと起動しませんが、今回のようにタイマーを設定する場合、そちらのファイルに存在すれば不要です。

      $ sudo systemctl enable dv_ap.timer
      

      タイマー用のファイルのみ自動起動(enable)に設定します。これで dv_ap.timer が 30秒後に dv_ap.service を立ち上げ、その中で pforward.service が呼ばれます。

    これで、リブートすればテザリングWi-FiでもホームルータのWi-fiでも自動に立ち上がります。また、モバイル運用から自宅に戻り、スマホのテザリングをOFFにするだけで自動的にホームWi-Fiへの切り替えもできます。

    73 J E 3 H C Z

Back


2 件のコメント:

  1. 自称職人さま

    さっそくFBな記事をありがとうございます。
    取り組んでみたいと思います。

    西宮の門前小僧

    返信削除
    返信
    1. 西宮の門前小僧さん、お久しぶりです。

      ターミナルモードと違って /JR3WZ A の様なエリアCQも出来ますので、FBですよ。
      では又、宜しくお願い致します。

      削除