OpenWrt BUFFALO WSR-3200AX4S

:flag_jp: Japanese notation

![OpenWrt_icon.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3412833/cc2e83af-44dd-e98a-97c2-36e53597df85.png)

# はじめに
::: note
### 初心者対応構成
- スクリプトでの自動設定
- [UCI (ttyd)](https://openwrt.org/docs/guide-user/base-system/uci)、[Webコンソール (LuCi)](https://openwrt.org/docs/guide-user/luci/start)、[ファイラー (SFTP)](https://openwrt.org/docs/guide-user/services/nas/sftp.server)にて比較作業がおススメ:exclamation:
:::

:::note
### 検証環境
- Windows11 バージョン24H2
:::

::: note
### トピック
<details><summary>OpenWrt ルーターにおける /overlay 領域の拡張</summary>

[BUFFALO WSR-3200AX4S](https://qiita.com/Bacalhau/items/6ce9c30da2b17f64cbe3#%EF%B8%8F-buffalo-wsr-3200ax4s-mt7622b)

---

</details>

:::

# デバイス
:::note
### WSR-3200AX4S

<details><summary>デバイスホームページ</summary>

[WSR-3200AX4S-BK](https://www.buffalo.jp/product/detail/wsr-3200ax4s-bk.html)

![WSR-3200AX4S-BK__0100.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3412833/ecbbe18b-54d6-47e0-a2f4-574e1dfe88b1.jpeg)

[WSR-3200AX4S-WH](https://www.buffalo.jp/product/detail/wsr-3200ax4s-wh.html)

![WSR-3200AX4S-WH__0100.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3412833/7d679048-5ac4-4a5b-a663-1f55f4748dde.jpeg)

---

</details>

:::

# OpenWrt
:::note
### [OpenWrt Project へようこそ](https://openwrt.org/start)
![320.logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3412833/b680feca-c6f1-4b68-4516-7001887217f7.png)

<details><summary>仕様</summary>

[Techdata](https://openwrt.org/toh/hwdata/buffalo/buffalo_wsr-3200ax4s)

---

</details>

<details><summary>The UCI system</summary>

---
</details>

<details><summary>LuCI web interface</summary>

![wsr-3200ax4s.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3412833/8f823e3d-d7f0-4ac2-927a-8fcd542451a7.png)

![wsr-3200ax4s-ubi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3412833/4e7020fa-f67d-4109-a105-7174307f094b.png)
---
</details>

:::

# インストール
::: note
### ファームウェア

[大破ログ](https://taiha.hatenablog.jp/entry/2023/10/15/163929)

[デバイス用のOpenWrtファームウェアをダウンロード](https://firmware-selector.openwrt.org/?target=mediatek%2Fmt7622&id=buffalo_wsr-3200ax4s)

イメージのダウンロード > **FACTORY** をダウンロード

インストールされたパッケージ、初回起動時のスクリプトのカスタマイズ

<details><summary>インストールされたパッケージ</summary>


リリースビルド
```
base-files ca-bundle dnsmasq dropbear firewall4 fitblk fstools kmod-gpio-button-hotplug kmod-leds-gpio kmod-mt7622-firmware kmod-nft-offload libc libgcc libustream-mbedtls logd mtd netifd nftables odhcp6c odhcpd-ipv6only opkg ppp ppp-mod-pppoe procd-ujail uboot-envtools uci uclient-fetch urandom-seed urngd wpad-basic-mbedtls kmod-mt7915-firmware luci luci-i18n-base-ja ttyd luci-app-ttyd luci-i18n-ttyd-ja sftp-server
```
"snapshot" ビルド
```
apk-mbedtls base-files ca-bundle dnsmasq dropbear firewall4 fitblk fstools kmod-gpio-button-hotplug kmod-leds-gpio kmod-mt7622-firmware kmod-nft-offload libc libgcc libustream-mbedtls logd mtd netifd nftables odhcp6c odhcpd-ipv6only ppp ppp-mod-pppoe procd-ujail uboot-envtools uci uclient-fetch urandom-seed urngd wpad-basic-mbedtls kmod-mt7915-firmware luci luci-i18n-base-ja ttyd luci-app-ttyd luci-i18n-ttyd-ja sftp-server
```

---
</details>

<details><summary>初回起動時に実行されるスクリプト (uci-defaults)</summary>

```
#!/bin/sh

# Based on script from https://pastebin.com/XDja96GT, with appreciation.

MODEL=$(ubus call system board | jsonfilter -e '@.model')
[ "$MODEL" = "Buffalo WSR-3200AX4S" ] || {
    echo "99-mount-vacant-space: Unsupported model: $MODEL" > /dev/kmsg
    exit 0
}

cat <<'EOF' > /etc/init.d/mount_vacant_space
#!/bin/sh /etc/rc.common
START=10

boot() {
    MTD_DEV="/dev/mtd11"
    UBI_VOLUME="dpi"
    MOUNT_POINT="/mnt/vacant_space"

    insmod mtd-rw i_want_a_brick=1
    mtd unlock "$MTD_DEV"
    ubiattach -m 11

    ubi_num=""
    for dev in /dev/ubi[0-9]*; do
        ubinfo "$dev" -a 2>/dev/null | grep -q "Name: *$UBI_VOLUME" && { ubi_num="${dev#/dev/}"; break; }
    done
    [ -z "$ubi_num" ] && ubi_num="ubi1"

    mkdir -p "$MOUNT_POINT/usr_sbin"
    [ -z "$(ls -A $MOUNT_POINT/usr_sbin 2>/dev/null)" ] && cp -a /usr/sbin/* "$MOUNT_POINT/usr_sbin"
    mount -t ubifs "$ubi_num:$UBI_VOLUME" "$MOUNT_POINT"
    mount --bind "$MOUNT_POINT/usr_sbin" /usr/sbin
}
EOF

chmod 755 /etc/init.d/mount_vacant_space
/etc/init.d/mount_vacant_space enable

echo "99-mount-vacant-space: (short) script installed and enabled" > /dev/kmsg

exit 0
```

---
</details>

:::

::: note
### all in one scripts
![aios.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3412833/69e87faf-fb43-4c0f-b523-00fe1b2c9809.png)
- [GitHub](https://github.com/site-u2023/aios)
- [Qiita](https://qiita.com/site_u/items/bd331296ce535ed7a69e)
- [旧板](https://qiita.com/site_u/items/c6a50aa6dea965b5a774)
:::

# デバイスアクセス
::: note
### デバイスアクセス（UCI）
<details><summary>パワーシェルでアクセス</summary>

#### [PowerShell](https://learn.microsoft.com/ja-jp/powershell/scripting/what-is-windows-powershell?view=powershell-7.4)の開始
- キー入力：**`Win`+`x` > `a` > `はい`**

#### [UCI（SSH）アクセス](https://openwrt.org/docs/guide-quick-start/sshadministration)
```powershell:powershell:初期設定用
ssh -o StrictHostKeyChecking=no -oHostKeyAlgorithms=+ssh-rsa root@192.168.1.1
```
- root@192.168.1.1's password:`初期値：パスワード無し`

<details><summary>SSHログイン出来ない場合:exclamation:</summary>

  - `%USERPROFILE%\.ssh\known_hosts` ※Windows隠しファイル
```powershell:powershell
Clear-Content .ssh\known_hosts -Force 
```

</details>

<details><summary>OpenSSHのインストールが無い場合:exclamation:</summary>

- 機能の確認
※Windows 10 Fall Creators Update(1709)以降標準搭載
```powershell:powershell
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
```
- 機能のインストール
```powershell:powershell
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
```
---

</details>
:::

::: note
### [LuCi](https://openwrt.org/jp/doc/howto/firstlogin#login_to_webui)

<details><summary>ブラウザーでアクセス</summary>

- [openwrt.lan](http://openwrt.lan) or [(192.168.1.1)](http://192.168.1.1)
  - ユーザー名：`root`
  - パスワード：`パスワード`
</details>
:::

# 初期設定
:::note
### [パスワード](https://openwrt.org/jp/doc/howto/firstlogin#telnet_%E3%81%A7%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3)

<details><summary>初期値から変更</summary>

```bash
passwd
```
`Changing password for root`
`New password:`
```bash:passwd:入力モード
任意のパスワード
```
`Retype password:`
```bash:passwd:入力モード
再入力
```
`passwd: password for root changed by root`
```bash
exit
```
</details>
:::

:::note
### ホストネーム

<details><summary>ホストネーム（openwrt）を変更</summary>

```sh
#!/bin/sh
HOSTNAME='openwrt' # デバイス名
uci set system.@system[0].hostname=${HOSTNAME}
uci commit system
/etc/init.d/sysntpd restart
```
</details>
:::

:::note
### [タイムゾーン](https://openwrt.org/docs/guide-user/base-system/system_configuration)

<details><summary>タイムゾーンを変更</summary>

- [timezones.conf.xml](https://git.openwrt.org/?p=openwrt/svn-archive/archive.git;a=blob;f=net/freeswitch/files/etc.minimal/autoload_configs/timezones.conf.xml;hb=refs/heads/packages_12.09)

```sh
#!/bin/sh
TIMEZONE='JST-9'
ZONENAME='Asia/Tokyo'
uci set system.@system[0].timezone=${TIMEZONE}
uci set system.@system[0].zonename=${ZONENAME}
uci commit system
/etc/init.d/sysntpd restart
```
</details>
:::

:::note
### [NTP](https://openwrt.org/docs/guide-user/services/ntp/client-server)

<details><summary>NTPサーバーを変更</summary>

- [NTP POOL PROJECT](https://www.ntppool.org/ja/)

```sh
#!/bin/sh
POOL='jp'
uci delete system.ntp.server
uci add_list system.ntp.server=0.${POOL}.pool.ntp.org
uci add_list system.ntp.server=1.${POOL}.ppl.ntp.org
uci add_list system.ntp.server=2.${POOL}.pool.ntp.org 
uci add_list system.ntp.server=3.${POOL}.pool.ntp.org
uci commit system
/etc/init.d/sysntpd restart
```

</details>

<details><summary>NTPサーバーを有効</summary>

```sh
#!/bin/sh
uci set system.ntp.enable_server='1' # NTPサーバー有効
uci set system.ntp.use_dhcp='0'
uci set system.ntp.interface='lan'
uci commit system
/etc/init.d/sysntpd restart
```
</details>
:::

::: note
### [SSH](https://openwrt.org/docs/guide-user/base-system/dropbear)

<details><summary>WANからのアクセスを遮断</summary>

```sh
uci set dropbear.@dropbear[0].Interface='lan'
uci commit dropbear
```
</details>
:::

# [パッケージ](https://openwrt.org/packages/start)
:::note
### [母国語サポート](https://openwrt.org/docs/guide-user/luci/luci.essentials#native_language_support)

<details><summary>LuCiの言語パッケージをインストール</summary>

- 対応言語検索
```sh
#! /bin/sh
opkg update
opkg list luci-i18n-base\*
```

- 設定
```sh
#! /bin/sh
I18N='ja'
opkg update
opkg install luci-i18n-base-${I18N}
opkg install luci-i18n-firewall-${I18N}
```
</details>
:::

:::note
### [UCI（TTYD）](https://github.com/tsl0922/ttyd/blob/main/README.md)

<details><summary>ブラウザーでUCIにアクセス</summary>

```sh
#! /bin/sh
I18N='ja'
opkg update
opkg install luci-i18n-ttyd-${I18N}
uci set ttyd.@ttyd[0].ipv6='1'
uci set ttyd.@ttyd[0].command='/bin/login -f root' #自動ログイン
uci commit ttyd
/etc/init.d/rpcd restart
```

- [openwrt.lan:7681](http://openwrt.lan:7681) or [(192.168.1.1:7681)](http://192.168.1.1:7681)
</details>
:::

:::note
### [ファイラー（SFTP）](https://openwrt.org/docs/guide-user/services/nas/sftp.server)

<details><summary>WinSCPでファイルにアクセス</summary>

```sh
#! /bin/sh
opkg update
opkg install openssh-sftp-server
```

クライアント設定（Windows）
- 手動インストール
  - ダウンロード：[WinSCP](https://winscp.net/eng/download.php)
- 自動インストール
  - キー入力：`Win`+`x` > `a` > `はい`
  - 最新版ソフトウェアのインストール
```powershell:powershell:クライアントPC
$psVersion = $PSVersionTable.PSVersion.Major
$LINKS = Invoke-WebRequest "https://winscp.net/eng/download.php"
$LINKS_VERSION = $LINKS.Links | Where-Object {$_.href -like "*WinSCP-*-Setup.exe*"} | Select-Object -ExpandProperty href
$VERSION = ($LINKS_VERSION -split '/')[-2] -replace "WinSCP-([0-9]+\.[0-9]+\.[0-9]+).*", '$1'
Write-Host "Version to install: $VERSION"
$downloadUrl = "https://jaist.dl.sourceforge.net/project/winscp/WinSCP/$VERSION/WinSCP-$VERSION-Setup.exe?viasf=1"
Write-Host "Downloading from: $downloadUrl"
$ONAMAE = (whoami).Split('\')[1]
$destinationPath = "C:\Users\$ONAMAE\Downloads\WinSCP-$VERSION-Setup.exe"
Invoke-WebRequest -Uri $downloadUrl -OutFile $destinationPath
Write-Host "Installing WinSCP..."
Start-Process -FilePath $destinationPath -ArgumentList "/VERYSILENT /NORESTART" -Wait
Invoke-Expression "C:\Users\$ONAMAE\AppData\Local\Programs\WinSCP\WinSCP.exe"
```
- `警告` > `強制的に貼り付け`

- WinSCP設定
  - セッション
    - ホスト名：`192.168.1.1`
    - ユーザー名：`root`
    - パスワード：`設定したパスワード`
    - `ログイン`をクリック

</details>

:::

::: note
### [BusyBoxフルバージョン](https://en.wikipedia.org/wiki/BusyBox)

<details><summary>インストール</summary>

[OpenWrtバージョン](https://busybox.net/downloads/BusyBox.html)

```sh
#!/bin/sh
opkg update
opkg install coreutils
```
</details>
:::

:::note
### [CPU負荷分散](https://openwrt.org/docs/guide-user/services/irqbalance)

<details><summary>インストール</summary>

```sh
#! /bin/sh
opkg update
opkg install irqbalance
uci set irqbalance.irqbalance=irqbalance
uci set irqbalance.irqbalance.enabled='1'
uci commit irqbalance
/etc/init.d/irqbalance start
```
</details>
:::

::: note
### [ネットワーク統計インターフェイス](https://openwrt.org/docs/guide-user/luci/luci_app_statistics)

<details><summary>インストール</summary>

```sh
#! /bin/sh
I18N='ja'
opkg update
opkg install luci-i18n-statistics-${I18N}
/etc/init.d/collectd enable
/etc/init.d/rpcd restart
```

- プラグイン検索
```sh
#! /bin/sh
opkg update
opkg list collectd-mod\*
```
</details>
:::

:::note
### [追加テーマ](https://openwrt.org/docs/guide-user/luci/luci.themes)

<details><summary>インストール</summary>

```sh
#! /bin/sh
opkg update
opkg install luci-theme-openwrt
opkg install luci-theme-material
```
</details>
:::


# トラブル
:::note warn
### 既知の問題

<details><summary></summary>


---

</details>

:::

# 初期化
:::note alert

### [ファクトリーリセット(初期化)](https://openwrt.org/docs/guide-user/troubleshooting/failsafe_and_factory_reset#soft_factory_reset)

<details><summary>リセット</summary>

```bash
# 要注意
firstboot && reboot now
```

`This will erase all settings and remove any installed packages. Are you sure? [N/y]`

```bash:初期化:入力モード
y
```
[デバイスリセットボタン](https://openwrt.org/docs/guide-user/troubleshooting/failsafe_and_factory_reset#reset_button)
デバイスのリセットボタンを10秒押し続ける

</details>

:::

# あとがき
ハードオフにふらっと入ると1500円で売っていたので、思わず買ってしまいました。