TL-WR902ACを、macOS標準のtftpは使わずに、OpenWrt化

https://openwrt.org/toh/tp-link/tl-wr902ac_v3 に手順はあるが macOS Venturaでちょっと苦労したのでメモ。


## デバイスとmacOSとの接続方法

macOS <--USBのLAN--> TL-WR902AC

のように直結。TL-WR902AC本体のスイッチは真ん中（Share Hotspot）にしておく。

## アドレス固定

マニュアルにあるように、192.168.0.66にせよ、と。それに従う。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74571/2f500f3a-ed2b-96bd-91b7-b28c2c2e5884.png)


## tftpサーバー

macOS標準のやつだと、ログが出ないので動いてるかどうか非常にわかりづらい。

https://openwrt.org/docs/guide-user/troubleshooting/tftpserver

に記載のある。dnsmasqを使う。

```
% brew install dnsmasq
```

```
% sudo $(brew --prefix dnsmasq)/sbin/dnsmasq --log-debug --log-facility=/tmp/tftp.log  --keep-in-foreground -i en6 -p 0 -z --enable-tftp --tftp-root /tmp
Password:
```

`en6` ってのは個々人によって異なるはず。USB LANのデバイスをifconfigで探して、192.168.0.66のものを指定する。

別ターミナルでログを監視する。

```
% sudo tail -f /tmp/tftp.log
Feb 27 03:30:26 dnsmasq[39535]: started, version 2.89 DNS disabled
Feb 27 03:30:26 dnsmasq[39535]: compile time options: IPv6 GNU-getopt no-DBus no-UBus no-i18n no-IDN DHCP DHCPv6 no-Lua TFTP no-conntrack no-ipset no-nftset auth no-cryptohash no-DNSSEC loop-detect no-inotify dumpfile
Feb 27 03:30:26 dnsmasq-tftp[39535]: TFTP root is /tmp  
```

## ファームウェアを配置

https://openwrt.org/toh/tp-link/tl-wr902ac_v3#installation

のファームウェアをリネームしてTFTPサーバーのルートに配置する。

```
wget https://downloads.openwrt.org/releases/22.03.3/targets/ramips/mt76x8/openwrt-22.03.3-ramips-mt76x8-tplink_tl-wr902ac-v3-squashfs-tftp-recovery.bin -O tp_recovery.bin
sudo mv tp_recovery.bin /tmp/tp_recovery.bin
```

## 接続テスト

```
% tftp 127.0.0.1
tftp> get tp_recovery.bin
Received 8149903 bytes in 0.5 seconds
tftp> quit
```

サーバーログに

```
Feb 27 03:30:37 dnsmasq-tftp[39535]: sent /tmp/tp_recovery.bin to 127.0.0.1
```

こんなのが出ればOK。

## いざ

リセットボタンを爪楊枝で押しながら、USBをさす。

```
Feb 27 03:46:28 dnsmasq-tftp[41825]: sent /tmp/tp_recovery.bin to 192.168.0.2
```

こんなアクセスログが来たら成功。

しばらくしたら 192.168.1.1 でルーターが起動する。

## 生まれ変わったルーターへアクセス

USB LANを通常のDHCPでIPアドレス取得に戻す

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74571/59a5a7f7-7f33-15e0-084b-d4b2792f9ba8.png)

(もしもIPが自動で取れなかったら、手動でIP192.168.1.2, サブネットマスク255.255.255.0, ルーター192.168.1.1を指定する)

あとは、ブラウザで `192.168.1.1` 。OpenWrtこんにちは！

初期パスワードは空なので、すぐにパスワードは設定する！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74571/16b9e22f-e1d0-8f01-d203-aee253cd5245.png)

## WAN側からSSHできるようにする

マンゴールーターなどとは異なり、TP-WR902ACはLAN端子が１個でWANとLANを兼ねた作りになっている。
これが若干やっかいで、

* USB-LANでPCと直接つないでルーター起動すると、APモードっぽい感じになる
* 家の基幹ルーターのLANとTP-WR902ACのLANを接続すると、**勝手にブリッジモードで起動**する

のような動作をする。上位ルータがDHCPサーバー機能を持っている場合には、ブリッジとして振る舞うのは賢いなーと思う反面、ひとたびLAN側を上位ルーターにつないでしまうとOpenWrtの管理画面にアクセスできなくなってしまうので結構困る。なので、DHCP設定とファイアウォールの設定だけすぐにやる。

Wireless画面で

* すべてのWiFiをとりあえずenabledにし、何かしら電波を吹く状態にする

Interfaces画面で

* 既存のLANをDHCP Clientに変更
  * DHCP機能をオフ
  * ファイアーウォールのエリアをwanに指定

FirewallのTraffic Rulesタブ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74571/813d4883-d843-b244-87c9-d4b22a49fea8.png)

ここで外からの22番ポートへのアクセスを許可する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74571/7ff65203-952f-6922-69bd-ca29a0cbf091.png)

再起動すれば、上位ルーターの方から

```
ssh root@192.168.xxx.yy -L 8080:127.0.0.1:80
```

のようにSSHで接続できるし、ポートフォワードすれば、 `localhost:8080` にアクセスするとWeb UIが開ける。


## (参考)special thanks

https://qiita.com/tautology/items/57db11ecd042b1bd3f87

## 容量が足りない？

ちなみにこのルーターはストレージが**8MB**しかない(ギガじゃないよ。メガ)うえに、LANポートも一個だけだ。

WPA2 Enterprise (EAP-TLS)を試そうとおもったのだけど、容量が足りずfreeradius3を入れられなかった。

つまりこのルーター、OpenWrt化したところで、ほとんど単機能のルーターとして使うことしかできない…。