📡

Zao SDK を無線 LAN 経由でマルチリンクする

2025/02/19に公開

設定に不十分な点がありましたので、追記・整理をしました (2025-03-12)。

はじめに

Zao SDK for Jetson で図の様に無線 LAN の先に複数の LTE ルータを接続した構成でマルチリンク動作させる方法を紹介します。

なお、この記事では Jetson に Zao SDK for Jetson がインスール・設定済であることを前提としています。 Zao SDK for Jetson のセットアップ等は、Zao SDK WEBサイトのドキュメント等を参照してください。

対象バージョン

本記事の手順は Zao SDK for Jetson 1.6.1.0 で動作確認を行いましたが、全てのバージョンの Zao SDK for Jetson に適用可能です (2025-03-12 時点)。

1: Jetson 以外の構成・設定

無線 LAN の構成・設定

無線 LAN アクセスポイント (AP) はいわゆる無線ルータとして動作させず、ブリッジ親機として動作させてください。
Jetson 側を中継器 (子機) として、AP に接続するように設定を施しておいてください。

L2 SW の構成・設定

L2 SW に特別な設定は不要です。いわゆるアンマネージドのスイッチングハブで構いません。
無線 LAN AP にスイッチ機能が内蔵されている場合はそれでも構いません。

LTE ルータの構成・設定

LTE ルータは、それぞれ異なるネットワークアドレスに属するようにアドレスを設定してください。
例えば、10.0.1.0/24 に属する 10.0.1.1 と 10.0.2.0/24 に属する 10.0.2.1 といった形です。
DHCP サーバ機能は可能ならば Off にして下さい。

2: Jetson の設定

以下の手順で Jetson の設定を行ってください。

  1. Jetson にディスプレイ、USB キーボードを接続して起動

  2. Alt+F2 キー押下しログイン画面に切り替え、username, password 入力しログインする

  3. ROM 化状態の場合は sudo ZaoSetting と実行し、ROM 化解除 & 再起動の後、再度ログインする

  4. /etc/NetworkManager/dispatcher.d/40-zao を以下の内容で新規作成する
    (例えば sudo vim /etc/NetworkManager/dispatcher.d/40-zao を実行し vim エディタで入力する)

/etc/NetworkManager/dispatcher.d/40-zao
#!/bin/bash
if [ "$1" = "br0" ] && [ "$2" = "up" ] ; then
  ip link add name eth10 type veth peer name eth10-br
  ip link set eth10-br master br0
  ip link set up dev eth10-br

  ip link add name eth20 type veth peer name eth20-br
  ip link set eth20-br master br0
  ip link set up dev eth20-br
fi
exit 0

これはブリッジが作られるのにあわせて、veth を作成するスクリプトになっています。

  1. 以下のコマンドを実行する
$ sudo chmod +x /etc/NetworkManager/dispatcher.d/40-zao

作成した 40-zao に実行フラグを立てています。

  1. 以下のコマンドを実行する
$ sudo systemctl disable docker.service
$ sudo systemctl disable containerd.service

docker, containerd の自動起動をしないようにしています。
docker の起動にあわせて設定されるファイアウォール (iptables) の挙動が干渉するため無効化しています。

  1. 以下のコマンドを実行する
$ sudo nmcli con add type bridge ifname br0 con-name br0
$ sudo nmcli con mod br0 bridge.stp no
$ sudo nmcli con mod br0 ipv4.method disabled
$ sudo nmcli con mod br0 ipv6.method ignore
$ sudo nmcli con add type bridge-slave ifname eth0 master br0

ここでは、NetworkManager にブリッジの設定を追加しています。

  1. /etc/zao/InfraCtrl.conf を以下の内容にする
    (例えば sudo vim /etc/zao/InfraCtrl.conf を実行し vim エディタで入力する)
nwk_dev=1,VETH1,virtual/net/eth10
nwk_dev=2,VETH2,virtual/net/eth20
line_1_auto=0
line_1_addr=10.0.1.10
line_1_mask=255.255.255.0
line_1_gw=10.0.1.1
line_1_dns=10.0.1.1
line_2_auto=0
line_2_addr=10.0.2.10
line_2_mask=255.255.255.0
line_2_gw=10.0.2.1
line_2_dns=10.0.2.1

この設定で Zao SDK で veth を Line1, Line2 として扱うようになると共に固定アドレスが割り当てられます。
ここでは、ルータがそれぞれ 10.0.1.1/24, 10.0.2.1/24 の場合を記しています。実際のアドレスに置き換えてください。

  1. 元が ROM 化状態であった場合は sudo rm -f /not_overlay を実行する

  2. sudo poweroff を実行

次回起動から、無線 LAN を通じたマルチリンク動作になります。
ディスプレイ、USB キーボードを接続せず動作可能です。

3: 3 回線以上への拡張

上記設定の形を倣って、/etc/NetworkManager/dispatcher.d/40-zao, /etc/zao/InfraCtrl.conf に追記してゆけば、3 回線以上の構成にすることも可能です。

補足 A: 無効化手順

上記で施した設定を無効化する手順は以下となります。

  1. ログインする

  2. ROM 化状態の場合は sudo ZaoSetting と実行し、ROM 化解除 & 再起動の後、再度ログインする

  3. 以下のコマンドを実行する

$ sudo nmcli con del br0
$ rm -f /etc/NetworkManager/dispatcher.d/40-zao
  1. /etc/zao/InfraCtrl.conf に追記した部分を戻す

  2. 元が ROM 化状態であった場合は sudo rm -f /not_overlay を実行する

  3. sudo poweroff を実行

終わりに

本記事では、無線 LAN 接続を通じてマルチリンクする設定を紹介しました。
この構成では無線 LAN 接続が単一障害点となってしまいますが、機器配置の都合などに合わせて活用ください。

また、無線 LAN を用いず、直接 Jetson と L2 SW を Ethernet 接続する構成でも動作可能です。
USB ポートを消費しない、Ethernet はノイズに強く長いケーブルが使用可能、等の特性を活かす構成としても活用ください。

関連資料

Discussion