Nano Piをいじる（その１）

# Nano Piを使ってみた
Ethernet Portが２つ以上存在するシングルボードコンピューターを探していたところ、「[NanoPi R5S RK3568 4GBメモリ 16GB eMMC トリプルLANポート](https://www.amazon.co.jp/NanoPi-R5S-RK3568-4GB%E3%83%A1%E3%83%A2%E3%83%AA-%E3%83%88%E3%83%AA%E3%83%97%E3%83%ABLAN%E3%83%9D%E3%83%BC%E3%83%88/dp/B0C191942K/ref=sr_1_3?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3G9AGIB51KRMB&keywords=NANO+PI&qid=1688990518&sprefix=nano+pi%2Caps%2C238&sr=8-3)」を見つけたので、いじってみることにした。目指せシリーズ化のため、「その１」としている。

## 何をするか
結局のところ、ルーターとかブリッジと言ったところ。まあ、Raspberry PiのUSBポートに、USB-Ethernetアダプタをさし、オンボードEthernetとの組み合わせで、複数のEthernetポートを設けても、内容的にはよいのだが、やはり、両方のEthernetともオンボードの方が安定性もありそうだし、余計なものがないほうがいいに決まっている。

その１では、ブリッジ＋Firewallを試すと同時に、基本事項と感じたことを備忘録として残す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/209083dd-44e0-9ff4-ac77-b73d6df9cec0.png)
右から左へのデータの流れに成約はないが、左から右へはデータは流れない、、と言った単純なもの。実物では下記。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/f8a8897f-f9f4-7861-2142-cba0a8fe9724.png", width=70%>
左から、インターフェースeth0（黒）、eth1（水色）、eth2（白）となっており、ここでは、eth2はNano Pi制御用のポートである。

## Friendlywrt
RasPiと同じ感覚で、μSDカードに何らかのイメージを焼いてそのまま起動するか、イメージをeMMCにコピーして起動するのかと思っていた。が、当初から、[Friendlywrt](https://github.com/friendlyarm/Actions-FriendlyWrt)という、[Openwrt](https://openwrt.org/)ベースのLinux Distributionがインストールされていたので、それをそのまま使う。

## 設定（その１）
Tipsも含めて説明。

### 最初に
本家のWikiは[こちら](https://wiki.friendlyelec.com/wiki/index.php/NanoPi_R5S)である。何か不具合などが生じた時、工場出荷時に戻せることが大事。例えば、IPアドレスを間違えた場合など、ネットワークからのアクセス不能時には、Nano PiのHDMIポートにディスプレイを、USBポートにキーボードを接続し、root（初期パスワード：password）でログインし、
```
# firstboot && reboot
```
により初期化（工場出荷時状態）できる。[こちら](https://wiki.friendlyelec.com/wiki/index.php/NanoPi_R5S#Soft_Factory_Reset)に説明あり。

### 初期化状態
 ![デフォルトインターフェース.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/0bad5fce-2cde-7f1f-40b0-2f54b4d13b1a.png)
![デフォルトインターフェースbr-lan.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/5a63f957-ffa6-25aa-0bc9-efa5224ec18f.png)
![br-lan.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/51f00fe8-91ce-d37b-d57e-1ecf06136236.png)
![デフォルトインターフェースbr-lan_DHCP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/20530a9e-8b93-6691-cc87-d3633895d97f.png)
初期状態では、br-lanというeth0とeth1とが属するLANが、IPアドレス192.168.2.1/24（＋DHCPサーバー）を持ち、eth2とがWAN側でDHCPクライアントとなっている。

### eth2からの制御
後にLAN側を単にL2化（IPアドレスをアサインしない）するため、eth2(WAN)からNano Piを制御できるよう、ファイアウォールの設定を変更する。下記が初期状態。WAN側の受信が「拒否」となっている。
![デフォルトファイアウォールゾーン２のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/e96bbd96-6eb4-57dc-8283-eb777e29f14c.png)
これを、「許可」に変更する。
![ファイアウォールゾーン設定変更のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/b9985e08-b3ef-09d7-a0a6-cf91f9172aff.png)
ちなみに、eth2の状況は下記のとおり。
![インターフェースWANその１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/7ddf20da-9a8b-f720-992f-f24618895e92.png)

### LAN側（br-lan）のL2化（IPアドレスをアサインしない）
eth0からeth1への流れをストップするため、両I/Fが属するLAN側（br-lan）をL2化する。
![インターフェースbr-lanアンマネージドへ変更のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/f11e67f0-2b09-eb41-a136-633c37c39ede.png)
プロトコルを「アンマネージド」とすると、実現できるようだ。最終的な適用（保存）時に、下記のような確認メッセージが表示される。
![最終画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/8670eec2-eaed-9475-5d31-9039171c53a5.png)
eth0およびeth1の単体の状況は下記のとおり。
![ネットワークデバイスeth0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/0678ffb4-e139-1ab0-9232-fe104f8392d9.png)
![ネットワークデバイスeth1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/1ec249c9-441f-e519-0587-025075ba4f86.png)

### インターフェース確定
下記内容で確定する。
![インターフェース.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/5289fe9e-7695-68f8-21df-4074910a1c85.png)

## 設定（その２：ここからが本質）
GUI上でI/Fの制御をトライしたが、よくわからず、結局、ebtablesを利用することになった（こちらの記事「[いまさらだけどebtables（その１）](https://qiita.com/infinite1oop/items/8150adf8c1232236f2dc)」なども参照）。が、インストールされていないことが判明。

### ebtablesインストール
まずはソフトウェアリストの更新を実施。
![ソフトウェアリスト更新のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/f97346d1-cbfa-490a-e09f-fa53f25754c8.png)
ebtablesの検索及びインストール。
![ソフトウェアebtables_foundのコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/283b42bb-7b2b-d93a-00ea-c1b0a70cad70.png)
インストール直後は何も設定されておらず。
![ebtablesインストール直後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/ce94db06-0582-fdb0-1bdb-d46d496a7fbf.png)

### ebtables設定
eth0に入るすべてのデータをDrop（拒否）する。
```
# ebtables -A FORWARD -i eth0 -j DROP
```
これを起動時に実行する。
![ローカルスタートアップ保存.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/ddf59882-1ead-7d84-1ad1-7600464dc502.png)
上記は、”/etc/rc.local”そのもののようだ。再起動後は、下記となる。
![再起動後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/d879b3a1-ac0c-40f7-2629-ec6d29873a10.png)

結果は自明なので省略。

EOF