tags: raspberrypi

Raspberry Pi の USB Ethernet/RNDIS Gadget で 固定 IP アドレスを使う(その1)

USB Ethernet/RNDIS Gadget 対応 Rasbperry Pi

  • Raspberry Pi Zero / Raspberry Pi Zero W / Raspberry Pi Zero WH
  • Raspberry Pi 4

これ以外の Raspberry Pi は USB Ethernet/RNDIS Gadget 未対応です。

Raspberry Pi の USB Gadget 設定

Raspberry Pi に USB Ethernet/RNDIS Gadget の設定を行います。
こちらの記事の通りに設定していけば OK です。

USB 1本とSDカードライタだけでできるUSB OTGを用いたRapsberry Pi Zero WH のセットアップ
https://qiita.com/Liesegang/items/dcdc669f80d1bf721c21

以下に、重要な部分を記載しておきます。

Raspberry Pi 側の設定変更箇所

img を焼いた microSD の中身を PC で確認します。
次の 2 ファイル(/boot/config.txt/boot/cmdline.txt)を変更します。

/boot/config.txt
dtoverlay=dwc2
/boot/cmdline.txt

rootwait の後に、以下の記述を追加します。

modules-load=dwc2,g_ether

この状態で、PC と USB ケーブルで接続します。

PC 側の設定変更箇所(Windows の場合)

RNDIS ドライバをインストールすると、Raspberry Pi の USB 接続が Ethernet デバイスとして見えるようになります。

PowerShell を起動して、以下のコマンドを実行します。

PS C:\Users\username> Resolve-DnsName raspberrypi.local

Name                                           Type   TTL   Section    IPAddress
----                                           ----   ---   -------    ---------
raspberrypi.local                             AAAA   120   Answer     fe80::2778:1eaa:a8e9:ef01
raspberrypi.local                             A      120   Answer     169.254.101.93

Raspberry Pi に 169.254.XXX.XXX の IP アドレスが割り当てられていて、これを使って ssh などで通信ができます。

しかし、これだと、接続し直す度に IP アドレスが変わってしまうので少し使いづらいです。
なので、USB Ethernet/RNDIS Gadget に固定 IP アドレスを割り当てて使えるようにします。

固定 IP アドレスの設定(Raspberry Pi 側)

DHCP 設定の変更

まずは、自動割り当て IP アドレスの状態で ssh で Raspberry Pi にログインして、以下のファイルを変更します。

/etc/dhcpcd.conf
interface usb0
static ip_address=169.254.10.10/16
static routers=169.254.0.1
static domain_name_servers=169.254.0.1

これは例なので、この通りでなくてもよいです。
この例では、Raspberry Pi に 169.254.10.10 を割り当てています。

起動時実行スクリプトの設定

Raspberry Pi の起動時に usb0 インターフェイスを指定した IP アドレスで起動する設定をします。
一番下の exit 0 の手前に以下を追加します。

/etc/rc.local
sleep 10
ifconfig usb0 169.254.10.10 up

(sleep を入れないとうまく設定できなかったです。)

固定 IP アドレスの設定(Windows 側)

Windows 側も、IP アドレスが固定になるように設定します。

Windows の「設定」->「ネットワークとインターネット」->「状態」->「アダプターのオプションを変更する」を選択します。
Raspberry Pi を USB 接続している場合は、「イーサネットn(リモート NDIS 互換デバイス)」が見えているはずです。

「イーサネットn」を右クリックし、「プロパティ」を選択します。

「ネットワーク」->「インターネット プロトコル バージョン4(TCP/IPv4)」を選択して「プロパティ」を選択します。

以下のように設定します。

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

これは例なので、この通りでなくてもよいです。
この例では、Windows に 169.254.10.2 を割り当てています。

ping を実行して疎通していれば OK です。

(例)PowerShell から Raspberry Pi への ping

PS C:\Users\username> ping 169.254.10.10

もう少し複雑になりますが、Raspberry Pi 以外の Linux USB デバイスで使用できる方法を「その2」として記載しました。
https://hackmd.io/@yuzuafro/raspi_rndis_staticipaddr_2