
デジタルモード限定・アマチュア局の遠隔操作に対応する その1 VPN設定編
今年のCQ誌2月号の別冊付録がリモートシャック構築ガイドでした。この記事にもある通り、自宅内での遠隔操作には変更申請は不要ですが、自宅外から自宅への遠隔操作には変更申請が必要です。詳細は総務省やJARLのウェブサイトを参照して下さい。
https://www.tele.soumu.go.jp/j/others/amateur/confirmation/remote_control/index.htm
加えて、自宅外でのWi-Fi等のネットワークを介した無線機の操作も、実は変更申請が必要なようです。
※弊局は遠隔操作の変更済みです。
※表題画像はAmazon.co.jpからお借りしたCQ誌2026年2月号の表紙です。
26/03/19追記: VPNサーバをWi-Fi接続から有線LANに変更しました。また、WireGuard設定ファイルのiptablesの引数に送信元 (-s) を追加しました。
26/03/21追記: 構成を一部変更しました。
26/03/27追記: 変更申請の記事を作成しました。
前提
以下、面倒臭いので常置場所のことを自宅と表記します。同様に、リモートデスクトップもRDTと略します。
また、私がデジタルモードをメインで運用しているので、PCにインストールしたWSJT-XやMSHVからリグを操作することを前提としています。遠隔操作のための回線は、インターネットやLANといったTCP/IPネットワークを想定しています。
リグを操作する専用アプリや、専用線の利用については本記事では対応していませんのでご了承下さい。
ケーススタディ
自宅LAN内のPC_aから別のPC_bを操作してFT8運用 → 変更申請は不要
職場のPC_cから自宅LANのPC_dを操作してFT8運用 → 変更申請が必要
自宅外で、テザリングで繋がっているPC_eから同じテザリングに接続している別のPC_fを操作してFT8運用 → 変更申請が必要
一般的にリモート操作としてイメージされるのは2だと思います。1と3のケースはシステム的にはほぼ同等ですが、1は自宅内なので変更申請は不要、3は自宅外での操作になりますので変更申請が必要となります。
また、機器間を接続する物理レイヤーが有線か無線かは問わず、遠隔からの操作が対象となります。3のケースで、Wi-Fi接続 (テザリング) ではなく有線LANを組んだ場合でも、自宅外での操作であれば変更申請が必要になります。
変更申請
そのうち記事にまとめます。私はこちら↑のサイトを参考にしました。
記事を作成しました;
リモート接続
PCから他のPCを操作する方法について整理します。
Chromeリモートデスクトップ
LANの内外を問わず、お手軽にリモート接続する手段としてChromeリモートデスクトップ (以下、Chrome RDT) があります。CQ誌の別冊でも取り上げられていますね。
基本的には接続先のPCにChrome RDTアプリをインストールし、起動してPIN (パスワード) を設定しておくことで、Chrome RDTアプリをインストールした別のPCから操作することができるようになります。
いわゆるNAT越えさせるためのルータの設定などは一切不要で、インストールするだけでRDTが実現できる画期的なアプリです。正味の話、単純にWSJT-Xをリモートから操作したいだけなら、Chromeリモートデスクトップで十分に目的を達せられます。
VNC (Virtual Network Computing)
小難しい名称ですが、こちらも同じくRDTです。接続先のPCにVNCサーバをインストールし、クライアント (ビューア) からログインしてデクストップを操作できます。RasPiやLinuxなど、Chromeが使えない・安定して動作しない環境での利用に適しています。
ただし、通常はこれ単体ではNAT越えなどに対応しません。あくまでRDTのためのソフトウェアです。OSを問わず動作するのでLAN内での接続には便利と言えば便利ですが、接続先にVNCサーバをセットアップしたりする必要もあるため、接続の簡便さではChromeリモートデスクトップに軍配が上がります。
※RasPiやMacにはVNCサーバの機能があるため、面倒臭いセットアップは必要なく、設定画面からVNCサーバを有効にすればOKです。
VPN (Virtual Private Network)
上の二つはRDTですが、VPNはレイヤーが違います。言ってしまえば、自宅外から自宅LANに接続できるようにするのがVPNです。繰り返しになりますが、VPNはRDTではありません。実際の利用イメージとしては、
自宅外から自宅にVPN接続
自宅LANに参加
VNCでLAN内のPCを操作
という形になります。繰り返しになりますが、Chromeデスクトップで自宅外からでも問題なく操作できるのであれば、わざわざVPNを導入するメリットはあまりありません。
なぜVPNが必要か
私の環境の問題です。
デジタルモードの運用のために用意したミニPCにはDebian trixieをインストールし、RDT接続のためにVNCサーバをセットアップしています。このミニPCでChromeリモートデスクトップを試したところ、VNCサーバのXセッションがChromeデスクトップと衝突したようで、正常に起動することができませんでした。
VNCサーバをoffにすればChromeデスクトップを使える可能性は高いのですが、そうするとPOTAで持ち歩く時の作業が増えます。面倒臭いのは勘弁です。という訳で、ミニPCにはVNCサーバを入れたまま、自宅にVPNサーバを立てることにしました。
もう一つのメリットとして、VPNに接続したPCのIPアドレスを固定できることが上げられます。VPNに接続しておけば、自宅にあろうが自宅外にあろうが、常に同じIPアドレスでアクセスできるようになります。
IPマルチキャスト
UDPならIPマルチキャスト (224.0.0.1宛て) で同一ネットワーク内の複数のホストに対して通知することができますが、あくまでリンクローカル (L2内のみ) です。L3のWireGuard VPN側にはパケットは届きません。
SoftEtherVPNはL2らしいので、もしかしたらマルチキャストが届くかも? (未検証)
ネットワーク構成
上述の通り、VPNに接続したPCのアドレスを、どこから接続したのかに関わらず同一セグメント内で固定することができます。WSJT-Xがどこで実行されていようが、RUMlogNGがDHCP接続していようが、VPN接続していさえすれば問題にならなくなります。
という訳で、まずは基本的にすべての機器をVPNに接続する方法を採り、段階的に改善していきましょう。
すべて自宅LAN内
+- 10.0.0.1 / VPN_Server / 192.168.10.191 -+
| |
+- 10.0.0.4 / WSJT-X / 192.168.10.x -+
| |
+- 10.0.0.5 / RUMlogNG / 192.168.10.y -+
|
VNC_Client / 192.168.10.z -+至って普通のLAN構成です。このネットワーク環境だけだとVPNを有効にしている意味は薄いのですが、何らかの理由で自宅外からアクセスしたい時にVPNに接続していないと手も足も出ません。
という訳で、少なくともWSJT-XとRUMlogNGは常時VPNに接続しておくのが無難でしょう。VNCクライアントからWSJT-Xへは、mDNSで名前解決してアクセスできます (もちろんローカルIPアドレス指定でも可)。
自宅外から自宅LANへ (一般的な遠隔操作)
+- 10.0.0.2 / VNC_Client
|
Internet
|
+- 10.0.0.1 / VPN_Server / 192.168.10.191 -+
| |
+- 10.0.0.4 / WSJT-X / 192.168.10.x -+
| |
+- 10.0.0.5 / RUMlogNG / 192.168.10.y -+VNCクライアントのみ自宅LANの外に出た形です。VNCクライアントはVPN側のIPアドレス (この図では10.0.0.4) 指定でWSJT-Xへ接続できます。
VNCでは画面の更新があるとデータが飛びますので、常に変化し続けるWSJT-Xのウォーターフォールとは相性があまりよろしくありません。固定回線などの常時接続環境からのアクセスが基本となります。テザリングなどから接続することも可能ですが、通信データ料に注意が必要です。
自宅外でテザリング
VNC_Client / 192.168.*.z -+
|
+- 10.0.0.4 / WSJT-X / 192.168.*.x -+
|
Tethering
|
Internet
|
+- 10.0.0.1 / VPN_Server / 192.168.10.191 -+
| |
+- 10.0.0.5 / RUMlogNG / 192.168.10.y -+POTA移動運用など、VNCクライアントだけでなくWSJT-Xを実行するPC (とリグ) も自宅LANの外に出た構成です。WSJT-XからのログはVPN経由で自宅にあるRUMlogNGに通知されます。VNC接続はテザリング側のローカルネットワーク内での接続なので、画面共有に掛かる通信データ料はゼロです。
なお、テザリング時のVNC接続に必要なWSJT-XホストのIPアドレス解決は、特にモニタのないヘッドレス運用の場合はmDNSに依存する点に注意が必要です。
VPN導入の下準備
お金があればハードウェアVPNを導入してしまうのが手っ取り早いんでしょうが、私一人が個人的に利用するだけです。なので安価に実現できるソフトウェアVPNを導入します。有名どころではSoftEtherがありますが、最近はお手軽なWireGuardが人気なようです。今回はこのWireGuardを導入します。
Raspberry Pi 5
RasPi5にWireGuardをインストールし、これを自宅のLANにぶら下げます。有線LANの方が高速かつ安定して動作しますが、今回はお手軽に無線LAN接続のままにしています。ストレージに対するI/Oはほとんどないはずなので、SSDではなくmicroSDにOSをインストールします。
このRasPi5にデスクトップ環境は必要ないので、RasPi OSは通常版ではなくLite版でも問題ないと思います。
固定グローバルIPアドレス
私の自宅はマンションで引いている光回線を利用していますが、オプションの固定グローバルIPアドレスを申し込み済みでした。固定IPが利用できない場合はダイナミックDNSなどのサービスを利用する必要があります。
WireGuard導入・設定
WireGuardインストール
$ sudo apt update
$ sudo apt install wireguardサーバ キーペア作成
RasPiで実行します。
$ wg genkey | tee server_private.key | wg pubkey > server_public.key秘密鍵 (server_private.key) は絶対に公開しないようにして下さい。
クライアント キーペア作成
VPNに接続するクライアントそれぞれで実行します。wgコマンドはMacならHomeBrewで, Debianならwireguard-toolsから導入できます。
% wg genkey | tee client_private.key | wg pubkey > client_public.keyサーバ同様、秘密鍵 (client_private.key) は絶対に公開しないようにして下さい。また、クライアント間でキーペアを共有するのもNGです。それぞれ個別のキーペアを生成しましょう。
サーバ 設定ファイル作成
$ sudo vi /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = (server_private.keyの内容)
PostUp = iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
[Peer]
PublicKey = (client_public.keyの内容)
AllowedIPs = 10.0.0.2/32[Interface] 項の PostUp/Down行 の -o オプションの値 eth0 はネットワークインタフェースに合わせて修正して下さい。Wi-Fiの場合はwlan0などになります。
※VPNに接続する機器の分だけ、[Peer]項のエントリを追加します。ただし、一度に複数台を設定すると不具合時の原因追究が難しくなるので、一台ずつ設定することをお薦めします。
[Peer]項のAllowedIPsの末尾は /24 ではなく /32 ですのでご注意を。
iptables導入
PostUP/DownでIPマスカレードを有効にするため、iptablesをインストールします。
$ sudo apt install iptablesWireGuard起動・自動起動設定
$ sudo systemctl start wg-quick@wg0
$ sudo systemctl enable wg-quick@wg0設定にミスがあったりすると起動に失敗します。systemctl statusやjournalctl などで原因を確認して修正して下さい。
WireGuardクライアント 導入
上記ウェブサイトのInstallationのリンクを参照に、OSに合ったクライアントを導入して下さい。MacはAppStoreから無料で導入できます。Debianならapt installです。
クライアント 設定ファイル作成
ウチのルータはヘアピンNATに対応しているようで、ルータに割り当てられているグローバルIPアドレスをLAN内から指定しても適切に転送しています。この場合は、EndpointとしてグローバルIPアドレスを指定したconfファイル一つでOKです。
ここでは、VPN側の自IPアドレスとして10.0.0.2を指定しています。
% vi client.conf
[Interface]
PrivateKey = (client_private.keyの内容)
Address = 10.0.0.2/24
[Peer]
PublicKey = (server_public.key)の内容
Endpoint = (固定グローバルIPアドレス):51820
AllowedIPs = 10.0.0.0/24
PersistentKeepalive = 25ルータがヘアピンNATに対応していない場合は、EndpointにLAN側のIPアドレスを指定したconfファイルを別途用意する必要があるようです (未検証) 。
DNSの設定はまた別記事で。
クライアント 設定ファイル読み込み
作成したクライアントの設定ファイルをWireGuardクライアントに読み込ませます。Macの場合は「ファイルからトンネルをインポート」メニューです。
LinuxでNetworkManagerを利用している場合は、以下のコマンドで読み込ませることができます。必要に応じてsudoしてください。
$ sudo nmcli connection import type wireguard file client.conf自動でVPNに接続する設定になります。もし自動でVPNに接続させたくない (手動でVPNに接続したい) 場合は、以下のコマンドも実行しておきましょう。GUIからも設定できます。今回は自動接続のままで問題ありません。
$ sudo nmcli connection modify client connection.autoconnect noVPNサーバ (RasPi) 設定
WireGuardを動作させるRasPiの設定も必要です。
IPフォワード有効化
$ sudo echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.d/99-ip_forward.conf
$ sudo sysctl -pこれを実行し忘れるとパケットが転送されないのでVPNが期待通りに動作しません。必ず実行しましょう。
※従来は/etc/sysctl.confに設定すればOKだったと記憶していますが、現在は/etc/syscnf.d/以下に設定ファイルを作成する必要があるようです。
ファイアウォール設定
一般的にはufwで必要のないポートは閉じておくべきです。今回はルータのファイアウォールに期待して設定をパスしました。
※26/03/21追記: ufwの設定について、個別に記事を起こしました;
ルータ設定
DHCP固定割り当て
一般的に、ルータに内臓されたDHCPサーバが、LAN内の機器にIPアドレスを割り当てます。ルータからWireGuardへパケットを転送できるよう、RasPiには固定でプライベートIPアドレス (ここでは192.168.10.191) を割り当てます。
ルータの設定画面 (接続済み機器の一覧) でRasPiのMACアドレスを確認し、DHCPの設定画面でこのMACアドレスに対して固定のIPアドレスを振り出すよう設定します。設定方法はルータのマニュアルを確認して下さい。
※この時点では特に必要ありませんが、WSJT-X, RUMlogNGを動作させるPCのプライベートIPアドレスも固定で振り出すよう設定しておいてよいと思います。
ポートマッピング
外部から51820番ポートへのUDPパケットをRasPiのIPアドレス (ここでは192.168.10.191) に転送するようルータを設定します。同じく、設定方法はルータのマニュアルを確認して下さい。
疎通確認
VPN接続
以上の設定で、VPN接続して自宅LANに参加することができるようになるはずです。クライアントから今回設定したトンネルを選択してVPN接続し、まずはVPNサーバにpingが通るか確認してみて下さい。
% ping 10.0.0.1
64 bytes from 10.0.0.1: icmp_seq=0 ttl=64 time=14.802 ms
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=11.763 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=22.958 ms
...正しく設定されていれば、VPNサーバにpingが通ります。pingが通らない場合はどこかの設定がミスしている可能性が高いです。
もしVPNサーバ側の設定を修正した場合は、サービスを再起動して設定を反映させます。
$ sudo systemctl restart wg-quick@wg0pingが通ったら、他のクライアントも同様に設定し、VPNに接続していきましょう。
LAN外からの接続確認
物理的に接続されている場所 (自宅・オフィス・テザリング等) に関係なく、VPN側のアドレス (10.0.0.0/24) で互いにpingが通ることを確認できるかと思います。
WSJT-X・RUMlogNG設定
WSJT-X
UDPサーバとして、RUMlogNGをインストールしたPCのVPN側IPアドレスを設定します。ここでは10.0.0.5を指定しています。
※WSJT-X 3.0.0-rc1ではUDPサーバの設定保存時にエラーが出ることがありますが、無視して大丈夫です。
RUMlogNG
UDPタブ、WSJT-X欄のSave QSOs to logbookにチェックを入れないとUDPログ通知を受信しません。忘れずチェックを入れておきましょう。
動作確認
RUMlogNG ログ受信
RUMlogNGをインストールしたMacをVPN接続し、WSJT-Xを立ち上げると、RUMlogNGのNetwork StatusダイアログにWSJT-Xを起動したホストが表示されます。ホスト名が表示されない場合、
どちらか (あるいは両方) のVPN接続が失敗している
WSJT-XのUDPサーバ設定ミス (IPアドレス, ポート番号)
RUMlogNGのWSJT-X設定ミス (チェック漏れ)
あたりが考えられるかと思います。
改善
もうちょっとだけ続くんじゃ。