###### 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)」を選択して「プロパティ」を選択します。
以下のように設定します。
<img src=https://i.imgur.com/eg5v4PB.png width=400px>
これは例なので、この通りでなくてもよいです。
この例では、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