NVIDIA JetsonとUSBドングルでLTE(SORACOM Air)接続するために nmcli を使う

2020.06.01

ども、ゲストのソラコム大瀧です。

NVIDIAのAI向けSBCのJetsonはエッジコンピューティングのデバイスとして人気ですね。最近発売されたJetson Xavier NXを入手したので、LTE通信のためのUSBドングルをセットしてSORACOM Airをセットアップしてみました。Raspberry PiなどでUSBドングル+SORACOM Airを利用するためのスクリプト setup_air.sh がありますが、NVIDIAが公開しているJetson用LinuxイメージはUbuntu Serverであり、GNOMEとセットでNetwork Managerがプリインストールされているため、今回はNetwork ManagerのCLIツールである nmcli でセットアップする様子をご紹介します。

動作確認環境

  • Jetson Xavier NX Developer Kit
  • SDカードイメージ : nv-jetson-nx-sd-card-image-r32.4.2.zip
  • USBドングル : HUAWEI MS2372h-607

USBドングルにSIMをセットし、JetsonのUSBポートに挿入、Jetsonを起動してSSHやターミナルでコマンドを実行できるようにしておきます。

今回の方法はLinuxでUSBモデムとして認識されるLTEドングルを対象としています。LTEドングルによってはネットワークインターフェースやルーターとして扱うものがあるので、それらの場合はLTEドングルの説明書の手順に従ってください。

USBドングルが認識されているかは、 nmcli の以下のコマンドで確認できます。

$ nmcli device status
DEVICE   TYPE      STATE         CONNECTION
eth0     ethernet  connected     Wired connection 1
l4tbr0   bridge    connected     l4tbr0
ttyUSB2  gsm       disconnected  --
wlan0    wifi      disconnected  --
dummy0   dummy     unmanaged     --
rndis0   ethernet  unmanaged     --
usb0     ethernet  unmanaged     --
lo       loopback  unmanaged     --

MS2372の場合はTYPEgsmで認識されます。現在は切断(disconnected)ということがわかりますね。

機種依存の事前準備

HUAWEIのMS2372ドングルを利用する場合は、設定の前にATコマンドを実行しておきましょう。他のUSBモデムでは、usb_modeswitchで動作モードの切り替えが必要な場合があります。

$ sudo apt update
$ sudo apt install screen
$ sudo screen /dev/ttyUSB0 38400  # 複数のUSBデバイスを接続している場合、デバイスファイルの番号が変わることがあります。 dmesgなどで確認しておきましょう。
ATE1[Enter]                       # コマンド文字列は表示されません
OK
AT+CGDCONT=0,"IP","soracom.io"[Enter]
OK
[Ctrl]+[A] → [K]
Really kill this window [y/n] y[Enter]
$

これでOKです。

nmcliの実行

LTEドングルに接続設定soracomをAPNを添えて追加します。

$ sudo nmcli connection add type gsm ifname "*" con-name soracom apn soracom.io user sora password sora
Connection 'soracom' (68869acb-f705-479c-857d-4a8230bcb8c7) successfully added.
$

大容量データ通信向けのSORACOM IoT SIM Plan-DUではAPNが異なるので、代わりに以下を実行します。

$ sudo nmcli connection add type gsm ifname "*" con-name soracom apn du.soracom.io user sora password sora
Connection 'soracom' (0d2f2aad-33f3-4e61-808c-54deeee28051) successfully added.
$

先ほどのデバイス一覧を再度確認しましょう。

$ nmcli device status
DEVICE   TYPE      STATE         CONNECTION
eth0     ethernet  connected     Wired connection 1
l4tbr0   bridge    connected     l4tbr0
ttyUSB2  gsm       connected     soracom
ppp0     ppp       disconnected  --
wlan0    wifi      disconnected  --
dummy0   dummy     unmanaged     --
rndis0   ethernet  unmanaged     --
usb0     ethernet  unmanaged     --
lo       loopback  unmanaged     --
$

gsmのデバイスに、追加した接続soracomがセットされステータスがconnectedになりました。デバイス名で状態を確認してみると...

$ nmcli device show ttyUSB2
GENERAL.DEVICE:                         ttyUSB2
GENERAL.TYPE:                           gsm
GENERAL.HWADDR:                         (unknown)
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     soracom
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/6
IP4.ADDRESS[1]:                         10.189.163.250/32
IP4.GATEWAY:                            0.0.0.0
IP4.ROUTE[1]:                           dst = 0.0.0.0/0, nh = 0.0.0.0, mt = 700
IP4.ROUTE[2]:                           dst = 100.64.0.0/10, nh = 0.0.0.0, mt = 700
IP4.DNS[1]:                             100.127.0.53
IP4.DNS[2]:                             100.127.1.53

LTEドングルにIPアドレスが割り当てられているのがわかります。

(オプション) 他のネットワークインターフェースとの併用

有線LANやWi-Fi、USB Device ModeなどJetsonには複数のネットワークインターフェースがあります。それぞれ自動構成の場合デフォルトゲートウェイが設定され、メトリック値によって優先順位が決まり、最も優先度の高い(メトリック値の小さい)デフォルトゲートウェイが採用されます。

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 eth0
0.0.0.0         0.0.0.0         0.0.0.0         U     700    0        0 ppp0
0.0.0.0         192.168.55.100  0.0.0.0         UG    32766  0        0 l4tbr0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0
192.168.55.0    0.0.0.0         255.255.255.0   U     0      0        0 l4tbr0
$

ルーティングテーブルでは、LTEドングルのインターフェース名はpppXです。

この構成では、eth0に向いていますね(Destination0.0.0.0のうち、eth0Metric列の値100が最も小さい)。SORACOM AirのLTE回線でインターネットにアクセスしたい場合は、併用する他のネットワークインターフェースのデフォルトゲートウェイを無効にするなど、調整が必要です。

一方で、通常のインターネットアクセスはeth0にしつつ、SORACOM NapterSORACOM GateでXavier NXに遠隔からアクセスできる構成にしたいこともあるでしょう。それぞれ以下のネットワークルーティングをルーティングテーブルに追加することで対応出来ます。

システムレベルで静的ルーティングを設定する他に、Network Managerがインターフェースの状態に合わせて動的にルーティングを追加することもできるので、今回はnmcliコマンドでNetwork Managerによる設定を試してみます。

SORACOM NapterなどのSORACOMサービスに対応する例

$ sudo nmcli connection modify soracom +ipv4.routes "100.64.0.0/10"

SORACOM Gateに対応する例

$ sudo nmcli connection modify soracom +ipv4.routes "10.128.0.0/9"

これでOKです。設定を反映させるために、切断→再接続を行います。

$ sudo nmcli connection down soracom
Connection 'soracom' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)
$ sudo nmcli connection up soracom
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)
$ route -n                  # 今回は100.64.0.0/10を追加しました
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 eth0
0.0.0.0         0.0.0.0         0.0.0.0         U     700    0        0 ppp0
0.0.0.0         192.168.55.100  0.0.0.0         UG    32766  0        0 l4tbr0
100.64.0.0      0.0.0.0         255.192.0.0     U     700    0        0 ppp0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0
192.168.55.0    0.0.0.0         255.255.255.0   U     0      0        0 l4tbr0

ルーティングテーブルに追加したルートがあることを確認しました。こうすることでデフォルトルートが他のネットワークインターフェースに向いていても、ロンゲストマッチで100.64.0.0/10宛の通信はLTEドングルのインターフェースに向きます。SORACOMにはpingに応答するサーバpong.soracom.ioがあるので、pingで動作確認してみましょう。

$ ping pong.soracom.io
PING pong.soracom.io (100.127.100.127) 56(84) bytes of data.
64 bytes from 100.127.100.127 (100.127.100.127): icmp_seq=1 ttl=64 time=426 ms
64 bytes from 100.127.100.127 (100.127.100.127): icmp_seq=2 ttl=64 time=306 ms
64 bytes from 100.127.100.127 (100.127.100.127): icmp_seq=3 ttl=64 time=325 ms
64 bytes from 100.127.100.127 (100.127.100.127): icmp_seq=4 ttl=64 time=314 ms
^C
--- pong.soracom.io ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 306.072/343.042/426.721/48.786 ms
$ 

疎通できていることがわかりますね。

まとめ

NVIDIA JetsonとUSBドングルでLTE(SORACOM Air)接続するためにnmcliを使う様子をご紹介しました。OS標準機能で対応できるのは手軽で良いですね。

Xavier NXのブログを同時公開しています

本記事の他にもXavier NXの記事(ただし機械学習ではなくシステム構成のTips)を同時に2本公開しています、こちらもどうぞ!

参考URL