フラッシュメモリの空き容量が 10MB しかない OpenWrt で Tailscale を使用する

## この記事を書いた目的

[以前の記事「OpenWrt で縮小版 Tailscale を使用する」](https://qiita.com/Bacalhau/items/b59bc86f67e58444b39e)では、 Tailscale の標準パッケージを利用して設定ファイルと依存パッケージの導入を行いましたが 😉、フラッシュメモリの空き容量が少なく、標準パッケージをインストールすることが不可能な場合もあると思います。😵

そういった OpenWrt 機器でも Tailscale を使えるようにこの記事を書きました。🤔

👉 手持ちの機器で実行し、Tailscale を使用できることを確認しました。🎉

## TL;DR

説明は不要 😵 でコードだけ欲しい 🤩 場合は、目をつむって以下のコードを利用してください。👯👯‍♂️👯‍♀️

### 1. 準備 (インストール前に 1 回だけ実行)

```shell
wget -O /etc/config/tailscale \
  https://raw.githubusercontent.com/openwrt/packages/refs/heads/master/net/tailscale/files/tailscale.conf
wget -O /etc/init.d/tailscale \
  https://raw.githubusercontent.com/openwrt/packages/refs/heads/master/net/tailscale/files/tailscale.init
chmod +x /etc/init.d/tailscale

opkg update
opkg install ca-bundle kmod-tun xz
opkg install iptables-nft kmod-nft-nat \
  kmod-ipt-conntrack kmod-ipt-conntrack-extra kmod-ipt-conntrack-label
```

### 2. インストール (アップデートスクリプトとしても使用可能)

```shell
service tailscale stop
sleep 5

wget -O /tmp/tailscaled \
  https://github.com/Admonstrator/glinet-tailscale-updater/releases/latest/download/tailscaled-linux-arm64

mv /tmp/tailscaled /usr/sbin/tailscaled
ln -svf /usr/sbin/tailscaled /usr/sbin/tailscale
chmod +x /usr/sbin/tailscaled

service tailscale start
tailscale set --auto-update=false
```

## インストール手順 (何が起きているか理解したい人用)

### 0. 現状確認

まずは、以下のコードを実行してみましょう。

```shell
find /etc /usr/sbin -name "*tailscale*"
```

インストール前は何も表示されないはずですが、以下の 1. ～ 4. の手順を実行すると以下の表示になるはずです。😍

```shell
/etc/config/tailscale
/etc/init.d/tailscale
/etc/rc.d/S80tailscale
/etc/tailscale
/etc/tailscale/tailscaled.state
/usr/sbin/tailscaled
/usr/sbin/tailscale
```

### 1. ファイルの作成 ( `/etc/config/tailscale` , `/etc/init.d/tailscale` )

以下のコードを実行し、 [GitHub](https://github.com/openwrt/packages) から[設定ファイル](https://github.com/openwrt/packages/tree/master/net/tailscale)をダウンロードします。

```shell
wget -O /etc/config/tailscale \
  https://raw.githubusercontent.com/openwrt/packages/refs/heads/master/net/tailscale/files/tailscale.conf
wget -O /etc/init.d/tailscale \
  https://raw.githubusercontent.com/openwrt/packages/refs/heads/master/net/tailscale/files/tailscale.init

chmod +x /etc/init.d/tailscale
```

👉 この時点で `find /etc /usr/sbin -name "*tailscale*"` を実行すると、以下の 2 つのファイルが作成されているはずです。

```shell
/etc/config/tailscale
/etc/init.d/tailscale
```

### 2. パッケージのインストール ( `ca-bundle` , `kmod-tun` )

以下のコードを実行します。

```shell
opkg update
opkg install ca-bundle kmod-tun
```

`OpenWrt 22.03` 以降であれば以下のパッケージも追加します。

```shell
opkg install iptables-nft kmod-nft-nat \
  kmod-ipt-conntrack kmod-ipt-conntrack-extra kmod-ipt-conntrack-label
```

### 3. 縮小版 Tailscale のインストール

[以前の記事の「縮小版 Tailscale への置き換え」](https://qiita.com/Bacalhau/items/b59bc86f67e58444b39e#2-%E7%B8%AE%E5%B0%8F%E7%89%88-tailscale-%E3%81%B8%E3%81%AE%E7%BD%AE%E3%81%8D%E6%8F%9B%E3%81%88)の部分を参照して実行してください。

具体的には以下のコードを実行することになります。

```shell
opkg update
opkg install xz
```

```shell
service tailscale stop
sleep 5

wget -O /tmp/tailscaled \
  https://github.com/Admonstrator/glinet-tailscale-updater/releases/latest/download/tailscaled-linux-arm64

mv /tmp/tailscaled /usr/sbin/tailscaled
ln -svf /usr/sbin/tailscaled /usr/sbin/tailscale
chmod +x /usr/sbin/tailscaled

service tailscale start
tailscale set --auto-update=false
```

👉 この時点で `find /etc /usr/sbin -name "*tailscale*"` を実行すると、以下のファイルが作成されているはずです。

```shell
/etc/config/tailscale
/etc/init.d/tailscale
/etc/tailscale
/etc/tailscale/tailscaled.state
/usr/sbin/tailscaled
/usr/sbin/tailscale
```

### 4. Tailscale を `service` に登録

以下のコードを実行します。

```shell
/etc/init.d/tailscale enable
/etc/init.d/tailscale start
```

👉 この時点で `find /etc -name "*tailscale*"` を実行すると、以下のファイルが表示されているはずです。🎉🎉  
( `/etc/tailscale` はディレクトリです。)

```shell
/etc/config/tailscale
/etc/init.d/tailscale
/etc/rc.d/S80tailscale
/etc/tailscale
/etc/tailscale/tailscaled.state
/usr/sbin/tailscaled
/usr/sbin/tailscale
```

## 本当に 10MB 以内に収まるの？

👉 `df` でインストール前とインストール後のフラッシュメモリの使用状況を確認すると、フラッシュメモリの使用量が 9.7MB ほど増えています。

```shell
root@OpenWrt:/etc/config# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root                 4.5M      4.5M         0 100% /rom
tmpfs                   119.8M     80.0K    119.7M   0% /tmp
/dev/ubi0_1              41.0M    236.0K     38.6M   1% /overlay
overlayfs:/overlay       41.0M    236.0K     38.6M   1% /
tmpfs                   512.0K         0    512.0K   0% /dev
```

```shell
root@OpenWrt:/etc/config# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root                 4.5M      4.5M         0 100% /rom
tmpfs                   119.8M     64.0K    119.7M   0% /tmp
/dev/ubi0_1              41.0M      9.7M     29.2M  25% /overlay
overlayfs:/overlay       41.0M      9.7M     29.2M  25% /
tmpfs                   512.0K         0    512.0K   0% /dev
```

## その他の設定

[以前の記事](https://qiita.com/Bacalhau/items/b59bc86f67e58444b39e#2-interface-%E3%81%A8-firewall-%E3%81%AE%E8%BF%BD%E5%8A%A0)を参照して、`Interface` と `Firewall` を追加します。

あとは、 `tailscale up` で Tailnet に登録できます。

👉 念のため、 `tailscale set --auto-update=false` を実行して自動更新を停止してください。

[Tailscale の設定内容の確認方法](https://qiita.com/Bacalhau/items/32fc9429e0a46d576cf5#openwrt-%E3%81%A7%E3%81%AE-tailscale-%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%81%AE%E7%A2%BA%E8%AA%8D%E6%96%B9%E6%B3%95)などは [以前の記事](https://qiita.com/Bacalhau/items/32fc9429e0a46d576cf5) を参照してください。