DMZ 上で Linux 用 Azure IoT Edge for Linux on Windows を構成する方法
適用対象: IoT Edge 1.4
重要
サポートされているリリースは、IoT Edge 1.5 LTS と IoT Edge 1.4 です。 IoT Edge 1.4 LTS は、2024 年 11 月 12 日にサポートが終了します。 以前のリリースの場合は、「IoT Edge を更新する」を参照してください。
この記事では、複数のネットワーク インターフェイス カード (NIC) をサポートし、複数のネットワークに接続するように Azure IoT Edge for Linux (EFLOW) 仮想マシン(VM) を構成する方法について説明します。 複数の NIC のサポートを有効にすると、EFLOW VM 上で実行されているアプリケーションでは、オフライン ネットワークに接続されているデバイスと通信でき、同時に IoT Edge を使用してクラウドにデータを送信できます。
前提条件
- EFLOW が既に設定されている Windows デバイス。 EFLOW のインストールと構成の詳細については、「対称キーを使用して IoT Edge for Linux on Windows デバイスを作成してプロビジョニングする」を参照してください。
- EFLOW のインストール時に使用される既定のスイッチとは異なる仮想スイッチ。 仮想スイッチの作成の詳細については、Azure IoT Edge for Linux on Windows の仮想スイッチの作成に関するページを参照してください。
産業シナリオ
産業用 IoT は、情報技術 (IT) と運用技術 (OT) が融合する時代の先駆けです。 しかし、IT 技術を使用して従来の OT 資産をよりインテリジェントにすることは、サイバー攻撃に対する露出が大きくなることも意味します。 このシナリオは、複数の環境が非武装地帯 (DMZ とも呼ばれる) を使用して設計される主な理由の 1 つです。
2 つの異なるネットワークまたはゾーンに分割されたネットワーク構成があるワークフロー シナリオを想像してください。 最初のゾーンでは、セキュリティで保護されたネットワークがオフライン ネットワークとして定義される場合があります。 オフライン ネットワークにはインターネット接続がなく、内部アクセスに制限されます。 2 番目のゾーンには非武装地帯 (DMZ) があります。ここには、インターネット接続が制限されているデバイスがいくつか存在する可能性があります。 EFLOW VM で実行するためにワークフローを移動する場合、EFLOW VM には既定で 1 つの NIC のみが接続されるため、別のネットワークへのアクセスに問題が発生する可能性があります。
このシナリオでは、プログラマブル ロジック コントローラー (PLC) やオープン プラットフォーム通信統合アーキテクチャ (OPC UA) 互換デバイスなどの一部のデバイスがオフライン ネットワークに接続されている環境があり、EFLOW VM で実行されている OPC Publisher モジュールを使用して、すべてのデバイスの情報を Azure にアップロードする必要があります。
EFLOW ホスト デバイスと PLC または OPC UA デバイスはオフライン ネットワークに物理的に接続されているため、Azure IoT Edge for Linux on Windows の仮想複数 NIC 構成を使用して、EFLOW VM をオフライン ネットワークに接続できます。 "外部仮想スイッチ" を使用すると、EFLOW VM をオフライン ネットワークに接続し、他のオフライン デバイスと直接通信できます。
他のネットワークの場合、EFLOW ホスト デバイスはインターネットと Azure 接続を使用して DMZ (オンライン ネットワーク) に物理的に接続されます。 "内部または外部のスイッチ" を使用すると、IoT Edge モジュールを使用して EFLOW VM を Azure IoT Hub に接続し、オフライン NIC を介してオフライン デバイスから送信された情報をアップロードできます。
シナリオの概要
セキュリティで保護されたネットワーク:
- インターネット接続がなく、アクセスが制限されています。
- PLC または UPC UA 互換デバイスが接続されています。
- 外部仮想スイッチを使用して EFLOW VM が接続されています。
DMZ:
- インターネット接続 - Azure 接続が許可されています。
- 内部または外部仮想スイッチを使用して、EFLOW VM が Azure IoT Hub に接続されています。
- Azure にデータを発行するために使用される EFLOW VM 内のモジュールとして OPC Publisher が実行されています。
VM ネットワーク仮想スイッチを構成する
次の手順は、シナリオ例で説明されているネットワークに固有のものです。 使用される仮想スイッチと使用される構成がお使いのネットワーク環境に合っていることを確認してください。
Note
この記事の手順では、"セキュリティで保護されたネットワーク (オフライン)" に接続された "外部仮想スイッチ" を使用して EFLOW VM がデプロイされたことを前提としています。 実現したい固有のネットワーク構成に合わせて以下の手順を変更できます。 EFLOW の複数 NIC サポートの詳細については、「Azure IoT Edge for Linux on Windows の仮想複数 NIC 構成」を参照してください。
EFLOW VM のプロビジョニングを完了し、Azure と通信するには、DMZ ネットワーク (オンライン) に接続されている別の NIC を割り当てる必要があります。
このシナリオでは、DMZ ネットワークに接続されている "外部仮想スイッチ" を割り当てます。 詳細については、「Hyper-V 仮想マシンの仮想スイッチを作成する」を参照してください。
外部仮想スイッチを作成するには、次の手順に従います。
- Hyper-V マネージャーを開きます。
- [アクション] で [仮想スイッチ マネージャー] を選択します。
- [仮想スイッチ] で [新しい仮想ネットワーク スイッチ] を選択します。
- [外部] 型を選択し、[仮想スイッチの作成] を選択します。
- セキュリティで保護されたネットワークを表す名前を入力します。 たとえば、OnlineOPCUA です。
- [接続の種類] で [外部ネットワーク] を選択し、DMZ ネットワークに接続されている "ネットワーク アダプター" を選択します。
- [適用] を選択します。
外部仮想スイッチが作成されたら、次の手順を使用して EFLOW VM に接続する必要があります。 複数の NIC を接続する必要がある場合は、EFLOW の複数の NICに関するページを参照してください。
作成したカスタムの新しい ''外部仮想スイッチ'' の場合は、以下の PowerShell コマンドを使用して次のことを行います。
EFLOW VM にスイッチを接続します。
Add-EflowNetwork -vswitchName "OnlineOPCUA" -vswitchType "External"
静的 IP を設定します。
Add-EflowVmEndpoint -vswitchName "OnlineOPCUA" -vEndpointName "OnlineEndpoint" -ip4Address 192.168.0.103 -ip4PrefixLength 24 -ip4GatewayAddress 192.168.0.1
完了すると、OnlineOPCUA スイッチが EFLOW VM に割り当てられます。 複数 NIC の接続を確認するには、次の手順を使用します。
[管理者として実行] で開始して、管理者特権の PowerShell セッションを開きます。
EFLOW 仮想マシンに接続します。
Connect-EflowVm
VM に移動したら、EFLOW 仮想マシンに割り当てられているすべてのネットワーク インターフェイスを一覧表示します。
ifconfig
IP 構成を検討し、eth0 インターフェイス (セキュリティで保護されたネットワークに接続されている) と eth1 インターフェイス (DMZ ネットワークに接続されている) が表示されていることを確認します。
VM ネットワーク ルーティングを構成する
EFLOW の複数 NIC 機能を使う場合、異なるルートの優先順位を設定したい場合があります。 既定では、EFLOW は、VM に割り当てられた ehtX インターフェイスごとに 1 つの "既定" ルートを作成します。 EFLOW は、既定のルートにランダムな優先度を割り当てます。 すべてのインターフェイスをインターネットに接続する場合、ランダムな優先順位は問題にならない可能性があります。 ただし、NIC のいずれかを "オフライン" のネットワークに接続する場合、EFLOW VM をインターネットに接続するために、"オフライン" の NIC よりも "オンラインの" NIC を優先することがあります。
EFLOW は route サービスを使用して、ネットワーク ルーティングの代替手段を管理します。 使用可能な EFLOW VM ルートを確認するには、次の手順に従います。
[管理者として実行] で開始して、管理者特権の PowerShell セッションを開きます。
EFLOW 仮想マシンに接続します。
Connect-EflowVm
VM に移動したら、EFLOW 仮想マシンで構成されているすべてのネットワーク ルートを一覧表示します。
sudo route
ヒント
前の図は、2 つの NIC (eth0 と eth1) が割り当てられた route コマンドの出力を示しています。 仮想マシンは、異なるメトリックを持つ 2 つの異なる "既定" の宛先ルールを作成します。 メトリック値が小さい方が優先度が高くなります。 このルーティング テーブルは、前の手順で構成したネットワーク シナリオによって異なります。
静的ルート構成
EFLOW VM が起動するたびに、ネットワーク サービスによってすべてのルートが再作成され、以前に割り当てられた優先度が変更される可能性があります。 この問題を回避するために、EFLOW VM が起動するたびにルートごとに必要な優先度を割り当てることができます。 すべての VM の起動で実行され、route
コマンドを使用して目的のルート優先順位を設定するサービスを作成できます。
まず、ルートを設定するために必要なコマンドを実行する bash スクリプトを作成します。 たとえば、前述のネットワーク シナリオに従うと、EFLOW VM には 2 つの NIC (オフライン ネットワークとオンライン ネットワーク) があります。 NIC eth0 は、ゲートウェイ IP xxx.xxx.xxx.xxx を使用して接続されます。 NIC eth1 は、ゲートウェイ IP yyy.yyy.y.yyyy を使用して接続されます。
次のスクリプトは、eth0 と *eth1 の両方の "既定" ルートをリセットし、必要な <number> メトリックを持つルートを追加します。 "メトリック値が小さいほど優先度が高くなる "ことに注意してください。
#!/bin/sh
# Wait 30s for the interfaces to be up
sleep 30
# Delete previous eth0 route and create a new one with desired metric
sudo ip route del default via xxx.xxx.xxx.xxx dev eth0
sudo route add -net default gw xxx.xxx.xxx.xxx netmask 0.0.0.0 dev eth0 metric <number>
# Delete previous eth1 route and create a new one with desired metric
sudo ip route del default via yyy.yyy.yyy.yyy dev eth1
sudo route add -net default gw yyy.yyy.yyy.yyy netmask 0.0.0.0 dev eth1 metric <number>
前のスクリプトを使用すると、ネットワーク シナリオに固有の独自のカスタム スクリプトを作成できます。 スクリプトが定義されたら、スクリプトを保存し、実行アクセス許可を割り当てます。 たとえば、スクリプト名が route-setup.sh の場合は、コマンド sudo chmod +x route-setup.sh
を使用して実行アクセス許可を割り当てることができます。 スクリプトが正しく動作するかどうかをテストするには、コマンド sudo sh ./route-setup.sh
を使用して手動で実行し、コマンド sudo route
を使用してルーティング テーブルを確認します。
最後の手順では、起動時に実行され、bash スクリプトを実行してルートを設定する Linux サービスを作成しします。 サービスを読み込むには、systemd ユニット ファイルを作成する必要があります。 以下はそのファイルの例です。
[Unit]
after=network
[Service]
Type=simple
ExecStart=/bin/bash /home/iotedge-user/route-setup.sh
[Install]
WantedBy=default.target
サービスが機能することを確認するには、EFLOW VM (Stop-EflowVm
と Start-EflowVm
) を再起動してから Connect-EflowVm
を実行して VM に接続します。 sudo route
を使用してルートを一覧表示し、正しいことを確認します。 メトリックが割り当てられた新しい "既定" のルールが表示されます。
次のステップ
Azure IoT Edge for Linux on Windows のネットワークを構成する方法に関するページの手順に従って、ネットワーク構成が正しく適用されたことを確認します。