MODS ENGINEERING

ポートを一つも開けずに、スマホからPLCを動かす ― FUXA × Tailscale × KV-Xシリーズ/KV-8000

(なし・技術コラムのため) (技術コラム(クラウドSCADA・遠隔監視))

  • FUXA
  • Tailscale
  • SCADA
  • OPC UA
  • KV-Xシリーズ
  • KV-8000
  • 遠隔監視
  • クラウド
  • 技術コラム

cover.png

はじめに ― 前回の続き

前回のコラムでは、無料のWeb SCADA「FUXA」とKEYENCEのPLC「KV-Xシリーズ/KV-8000」をOPC UAで接続し、ブラウザから読み書きできるところまでを検証しました。

ただ、あの構成はPLCと同じLANの中の話です。現場の外から見たい――出張先から、自宅から、経営者のスマホから。そう考えた瞬間に立ちはだかるのが、**「工場のネットワークにインターネットから入れていいのか」**という当然の不安です。ルータのポートを開けて外に晒すのは、生産設備では選びたくない。

そこで今回は、クラウド上のFUXAからVPN(Tailscale)経由でPLCに接続し、インターネットに向けてポートを一つも開けずに、スマホからPLCのデバイス値を書き換えるところまでを実機検証しました。構築時間は約90分です。

構成 ― 鍵は「サブネットルーター」

構成はこうです。東京リージョンのクラウドVPS(AWS Lightsail、月7ドルの最小構成で十分)にDockerでFUXAを立て、Tailscale(WireGuardベースのメッシュVPN)で現場のノートPCと結びます。ノートPCをサブネットルーター(現場LANへの中継役)にするのがポイントで、クラウド側のFUXAからは、ローカル検証とまったく同じ opc.tcp://<PLCのIP>:4840 がそのまま通ります。接続設定の書き換えは一切不要でした。

  • VPSのファイアウォールで開けるのは管理用のSSHのみ。FUXAの画面(ポート1881)はインターネットに公開しない
  • 閲覧する端末(PC・スマホ)も同じTailscaleネットワークに参加させ、トンネルの中だけで完結させる
  • スマホはTailscaleアプリを入れてログインするだけ

diagram1_arch.png

構築ダイジェスト

手順の詳細は割愛しますが、骨子は4ステップです。

  • VPS作成(Ubuntu 24.04)→ Tailscaleをインストールし --accept-routes 付きで参加
  • 同じVPSにDockerでFUXAを起動(--network host でトンネル経由の通信を素直に通す)
  • 現場PCにTailscaleを入れ、--advertise-routes で現場LANのサブネットを広告 → 管理画面でルートを承認(広告と承認はセット。承認を忘れるとクラウドからPLCに届きません)
  • WindowsのIP転送とファイアウォールの転送許可を設定

余談ですが、ローカルPCでは何度も失敗していたDockerイメージの取得が、クラウドの回線では一瞬で終わりました。環境起因のトラブルは場所を変えると切り分けが進む、という好例です。

ハマりどころ① ― PLCには「帰り道」が要る

ここからが本題です。設定を終えてもVPSからPLCへの通信が返ってこない。原因はPLC側にありました。

クラウドからのパケットは、送信元がTailscaleのアドレス(PLCから見ると知らないネットワーク)のまま届きます。PLCのデフォルトゲートウェイが空欄だと、PLCは応答パケットをどこに返せばいいか分からず、通信は行きっぱなしで終わります。KV STUDIOのユニット設定でデフォルトゲートウェイに現場PC(サブネットルーター)のIPを設定することで解決しました。「知らない宛先への返事は、全部中継役のPCに投げる」という構図です。

diagram2_gateway.png

ハマりどころ② ― pingは嘘をつく、TCPは正直

ゲートウェイを設定しても、VPSからのpingは通りませんでした。普通ならここで諦めそうになりますが、実はpingが落ちていても本命の通信は通ることがあります。ICMP(ping)はOSのファイアウォールで別枠で扱われるため、トンネル越しの疎通確認には向きません。

そこで本命のOPC UAポートをTCPで直接叩きます。

timeout 3 bash -c '</dev/null >/dev/tcp/<PLCのIP>/4840' && echo OPEN || echo CLOSED

結果は OPEN。pingが100%ロスのままでも、OPC UAの4840番ポートは開通していました。

🖼【スクショ1:screenshot1_TCP4840_OPEN.png ― TCPテストの実行結果】トンネル越しの切り分けは「pingではなく、本命ポートへのTCPテスト」――今後のクラウド接続案件すべてに効く教訓です。

成果 ― 手のひらのスライダーで、PLCが動く

あとは前回と同じです。FUXAの接続設定はローカル検証のときと同一、タグもそのまま。保存して数秒でステータスは緑の「接続成功」に変わりました。スマホにTailscaleアプリを入れてブラウザでFUXAを開くと、監視画面がそのまま表示されました。

screenshot2_FUXA接続成功.png

  • KV側の登録モニタで値を変更 → クラウド経由でスマホの画面に反映
  • スマホのスライダーを操作 → 新潟の机の上のKV-8000のデバイス値が書き換わる

・・・肝心のスマホのスライダー画像など残すのを失念してしまいました。 ネット接続環境によっては、スマホ側は若干レイテンシが気になりますが、スライダースイッチではなく、プッシュスイッチ等であれば全く問題ないかと思います。

机の上のPLCと、ポケットのスマホが、クラウド越しにつながっている。この間、インターネットに開けたポートはゼロです。

現実に運用するなら

検証はここまでですが、実運用に向けては次を推奨します。

  • まずは書き込みなしの監視専用から。遠隔からの書き込みは、必要性と安全条件を整理してから
  • FUXAの認証設定を必ず有効化する(初期設定のまま運用しない)
  • 不特定の相手に見せる場合はHTTPS化とアクセス制限を別途設計する(トンネル内限定なら不要)
  • 現場側の中継はノートPCでなく、常設の小型PCやゲートウェイ機器に置き換える

まとめ

「工場の外から見たい。でもポートは開けたくない」――この両立は、VPNトンネル+クラウドSCADAという構成で、月7ドルと構築90分の距離まで来ています。エンジンは無料、回線は既存、必要なのは正しく組む知識だけです。

PLCの見える化を、工場の塀の外へ。設計から運用の安全設計まで、PLCもネットワークもクラウドも扱う当社にご相談ください。

導入事例一覧に戻る

ご依頼や

お問い合わせはこちらから

お問い合わせ
トップに戻る