2017年2月17日金曜日

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

Back


New style DVAP pi-zero W(2017.10.09)
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= 2019年2月21日付けにて dv-ap V00.79 が発表されています。D-STAR仕様書#6に準拠した構成となったようです。OSは Stretch のみの対応(Buster未対応)となっています。
インストール方法については下記をご参照ください。新ゲートウェイ仕様に対応するためには早急にアップデートしてください。

ハードウェアの準備

  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のインストール for HAM などを参照の上、接続したいルータにケーブル接続できる事を確認しておいてください。(最初はWi-Fi接続できません)

  4. もし、古いRaspberryPi A+,B+,2 等をお持ちの場合は、USBタイプのWi-Fi子機でも全く同じ設定内容で接続できます。

  5. WiFi接続したい場合は、Raspberry Pi で複数 Wi-Fi の切り替えをするテキストモードでWi-Fi接続を安定させる(Jessie)を参照してください。

作業環境の構築

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

=MEMO= 現在、全くディスプレイ・キーボード無しで、SSHを有効に出来ることが分かっています。 OSのイメージを焼いた後、Windows上でmicroSDのドライブを開け、[新規作成]の「テキストファイル」で名前が「ssh(拡張子無し)」であるファイルを作っておくだけで、 立ち上げた時、即SSHで入れます。詳しくは⇨こちらをご覧ください。(2020.12.31更新)
  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. =MEMO= この項目は dv_ap が stretch のみの対応(2019/03)となってから、キーが変更されています。新規の方は勿論、Jessie からアップデートされる方も必ず実施してください。 その際旧 jarl.list は消してから行ってください。
    特定のフォルダ内に、必要なソフトウェアの有り場所を記したリストファイルをダウンロードします。
    $ cd /etc/apt/sources.list.d
    $ sudo wget –N http://app.d-star.info/debian/stretch/jarl.list
    $ ls
    jarl.list  raspi.list
    $ cd
    

    次にgpgキーをダウンロードし、追加します。
    $ cd /var/tmp
    $ sudo wget -N http://app.d-star.info/debian/stretch/jarl-gpg.key
    $ sudo apt-key add jarl-gpg.key
    

    アップデートの場合、上(jarl.list)で設定した場所も含めて更新ファイルが検索されます。
    $ sudo apt update
    $ sudo apt upgrade -y
    

    インストールの実行
    $ sudo apt install dv-ap
    

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

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

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

  2. $ sudo apt 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/dv_ap.conf.node /opt/dv_ap/etc/dv_ap.conf
    

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


  6. =MEMO=
    Stretch(Raspbian 9)からLANインターフェースの記述が下記のように変わっています。
    wlan0 ⇨ wlx0022cfea2fba
    もし、互換性の為以前の記述にする必要が有る時は、次のようにしてください。
    $ sudo nano /boot/cmdline.txt
    
      GNU nano 2.2.6               File: /boot/cmdline.txt
    dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait net.ifnames=0
    
    末尾に net.ifnames=0 を追加する

    下記に示す設定ファイルは、多くの機能を明示的に示しています。 必ずしも全部記述する必要は有りませんので通常はインストール時添付されている10行ほどのファイルで、コールサインを自分用に編集するだけで動きます。

    $ 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     # Default
    NIC=wlan0
    
    # Stretchの場合、LANインターフェース名が変わっています。
    # NIC=wlx0022cfea2fba
    
    ###### 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
    
    #
    # Echo Server setting (dv_ap 00.69 & later)
    #
    ECHO_SERVER=JL3ZBS A:JL3ZBS Z
    ECHO_POSITION_SEND_INTERVAL=3600
    
    #
    # Access Status Server setting (dv_ap 00.69 & later)
    #
    STATUS=status.d-star.info:21050
    
    
    [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. Fwd: port forwarder (2020.12.31現在使用中)

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

  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
      
      ### Stretch
      IPADDR=`ifconfig enxb827ebdabb1c | awk '/inet / {print $2}'`
      
      ### Jessie
      # 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 pforward.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=60sec          # or 1min
      #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ですよ。
      では又、宜しくお願い致します。

      削除