日報 2026.04.19

最終更新日

Comments: 0

エリート飯。

石膏ボードアンカーの3Dプリント用モデルメモ。

1日1捨てちょっとだけやる。
そういやVRダンレボ用に買ったシマノのマリンシューズが微妙にサイズがデカくてスポスポするので一回も使用せず島流し。

Redmi pad 2 4GへのLineageOS導入やる。
そういや自宅環境にもGithub Copilot Proプラン入れた。AIおもしろすぎてゲームやってる暇無い…。

質問のみなのでコーディングAI使うまでも無いのですが、まあ頼って手順出してもらいます。


準備

  1. 端末内データを全部バックアップします。
  2. Windows 11にAndroid Platform Toolsを入れます。
  3. Xiaomiのブートローダーアンロック手順を済ませます。
  4. 端末用の純正Fastboot ROMをダウンロードして展開します。
  5. GSIのLineageOSイメージをダウンロードし、.img.xzなら展開して.imgにします。
  6. Treble Infoで以下を確認します。
    • Architecturearm64
    • SlotA/B
    • 動的パーティション対応か
  7. 純正ROM展開フォルダから少なくともvbmeta.imgvbmeta_system.imgを取り出します。

Windows 11側の準備

  1. Google公式のPlatform Toolsを入手して、たとえばC:\platform-toolsに展開します。
  2. そのフォルダに以下を置くと作業しやすいです。
    • vbmeta.img
    • vbmeta_system.img
    • LineageOS-xx-xxxx-GSI.img
  3. コマンドプロンプトかPowerShellを、そのフォルダで開きます。
  4. adb devicesfastboot devicesが使える状態にします。

ブートローダーアンロック
Xiaomi端末では、だいたい以下が必要です。

  1. 開発者向けオプションを有効化
  2. OEM unlockingUSB debuggingを有効化
  3. Miアカウントを端末に紐付け
  4. PCでMi Unlock Toolを使ってアンロック
  5. 待機期間が要求されたら待つ

ここは機種依存があるので、端末側でアンロック済みになるところまで先に終わらせてください。

GSIの選び方
情報1にある分類は、だいたいこう見て問題ありません。

  • vanilla: Googleアプリなし
  • gapps: Googleアプリ入り
  • EROFS: 圧縮・読み取り専用寄り。軽いことがあるが、機種相性が出ることがある
  • EXT4: 互換性重視で扱いやすいことが多い

最初の1回なら、無難なのはarm64-abEXT4版です。Googleサービスが必要ならgapps、不要ならvanillaです。

導入手順
端末をUSB接続した状態で進めます。

  1. 端末をfastbootモードに入れます
    電源オフ後、音量下 + 電源で入ることが多いです。
  2. PCで認識確認
  1. 検証を無効化しつつvbmetaを書き込み
  1. fastbootdへ再起動
  1. systemへGSIを書き込み
  1. データ消去
    初回はほぼ必須です。前のOSデータが残ると起動しないことがあります。
  1. 再起動

初回起動はかなり時間がかかることがあります。5分から10分程度は様子を見ます。

失敗しやすい点

  • arm64-abではないGSIを焼く
  • vbmetaを書かずに起動して検証エラーになる
  • fastbootモードのままsystemを書こうとして失敗する
    system書き込みはfastbootdで行うのが重要です
  • -wを省略して旧データが残り、ブートループする
  • 純正ROMのvbmeta.imgと、今の端末世代が合っていない

うまく起動しない場合

  1. まずもう一度fastbootdに入り、systemの再書き込みとfastboot -wをやり直します。
  2. それでもダメなら、確保しておいた純正Fastboot ROMへ戻します。
  3. 戻すときはXiaomi用の純正Fastboot復旧手順を使います。GSI導入前にこれを確認しておくのが安全です。

この機種で特に確認したいこと
Redmi Pad 2 4Gという表記に対して、情報1の純正ROMリンクは別機種名に見えます。ここは雑に進めない方がいいです。最低限、以下は一致確認してください。

  1. 実機の正確な機種名
  2. codename
  3. Treble Infoのarm64-ab判定
  4. 純正Fastboot ROMがその機種用であること

必要なら次に、Windows 11でそのままコピペできる形の「実行コマンド一覧」と、「純正ROMへ戻す手順」も整理します。


まずは、Android Platform Toolsの導入。
Windowsの場合は SDK Platform-Tools for Windows をダウンロード を選んでplatform-toolsダウンロード、Program Filesとかに配置してPATH環境変数通す。

Xiaomiのブートローダーアンロック。adb環境はAndroid Platform Tools導入時に入ってるのでパス。

上記手順を諸々すすめてたのですが…なんとMiアンロックするにはMiアカウント作ってからデバイスと連携してまさかの「「「30日」」」経過する必要があることが判明。Xiaomi頭おかしいんか?

あとMIUI ROM Flashing Toolはブログで詳細されている方法は結論としていらなかった。

以下でMi Unlock ToolをダウンロードしてPCで使用。
Fastbootモードにして起動してUSB接続すると、driverが認識しないので同梱の”MiUsbDriver.exe”というやつを起動したら勝手にインストールされて認識した。

とにかく30日経過するまで進められなくてクソすぎるが別案が全く無いらしいので観念して待機。別のことして遊ぶしか無い。

foobar2000のプレイリストを他デバイスに同期するプラグイン作ったけど、

wpd:経由で同期する時にスタックして進まない事が多いので一旦観念してホスト環境に同期用のファイル出力してからnextcloudで同期する方式でやってみます。ホスト環境は2重で容量喰いますが、まあストレージ余裕あるんで…。

nextcloudは自宅TrueNASで構築済みなので同期するのは余裕。
問題は同期先のAndroid端末にnextcloudアプリ入れて同期するだけなんだが…Android用nextcloudアプリが、まあ~クソで同期先ローカルパスも選べないし同期スケジュールも設定できないしwifi時のみ同期もできないし極めつけにフォルダ単位の同期することすらできない。なにこれ?
同様の悩みがredditにも上がってるっぽいけど、「何が不満なの?」とか言ってるやつどういう目的でnextcloud使ってんのか完全に不明。コレ何もできんやろ。

ということで紹介されてたFolderSyncとかいうアプリ使ってみたけどコレ完璧っぽい。
まさにやりたい事が出来たのですが、まさかの問題nextcloudの接続先設定がhttpsしか対応してない臭い。これはhttps対応していないワシのnextcloud環境が悪い。やります。

現在の状況と環境を教えて対応手順全部Codexに教えてもらいます。

前提

  • Nextcloud は現在 http://192.168.100.20:30027 でアクセス可能
  • 外部からは現状 http://brain-thunder.jp:30027 でアクセスできる
  • 今後は https://cloud.brain-thunder.jp でアクセスできるようにする
  • TrueNAS 管理画面は外部公開しない
  • TrueNAS 管理画面は RTX810 の VPN 経由だけでアクセスする

構成方針

  • cloud.brain-thunder.jp を外部公開用の Nextcloud URL にする
  • Let’s Encrypt の証明書で HTTPS 化する
  • TrueNAS SCALE 上にリバースプロキシを入れる
  • RTX810 で外部 80/443 を TrueNAS に転送する
  • Nextcloud 本体は内部 HTTP のまま動かす
  • TrueNAS 管理画面は 443 以外のポートに変更し、外部には公開しない

最終的なアクセス先

  • Nextcloud: https://cloud.brain-thunder.jp
  • Nextcloud 内部転送先: http://192.168.100.20:30027
  • TrueNAS 管理画面: VPN 接続後に LAN 内からアクセス

手順 1: DNS を作成する

DNS 管理画面で次の A レコードを作成する。

  • ホスト名: cloud
  • FQDN: cloud.brain-thunder.jp
  • 値: 自宅回線のグローバル IP アドレス

補足:

  • まだ brain-thunder.jp を使っていてもよいが、Nextcloud 用は cloud.brain-thunder.jp に統一する
  • Cloudflare を使っている場合は、最初は DNS only にしておく

手順 2: TrueNAS 管理画面の HTTPS ポートを変更する

TrueNAS 管理画面が 443 を使っていると、同じ TrueNAS 上でリバースプロキシが 443 を使えない。
そのため、TrueNAS 管理画面のポートを変更する。

例:

  • 変更前: https://192.168.100.20
  • 変更後: https://192.168.100.20:444

実施内容:

  1. TrueNAS 管理画面に LAN 内からログインする
  2. 管理 UI の HTTPS ポートを 444 に変更する
  3. 保存する
  4. 以後は https://192.168.100.20:444 で管理画面に入る

注意:

  • 外部には 444 を絶対に公開しない
  • この時点で 443 はリバースプロキシ用に空ける

手順 3: Nextcloud の内部アクセスを確認する

Nextcloud の内部アクセス先として、次が使えることを確認する。

  • http://192.168.100.20:30027

ブラウザで LAN 内から開き、Nextcloud のログイン画面が表示されることを確認する。


手順 4: TrueNAS SCALE に Nginx Proxy Manager を入れる

Apps から Nginx Proxy Manager をインストールする。

推奨ポート:

  • 管理画面: 30081
  • HTTP: 80
  • HTTPS: 443

インストール後、LAN 内から次で管理画面を開けるようにする。

  • http://192.168.100.20:30081

手順 5: RTX810 でポート転送する

RTX810 で、外部から来た 80/443 を TrueNAS に転送する。

転送ルール:

  • 外部 TCP 80192.168.100.20:80
  • 外部 TCP 443192.168.100.20:443

目的:

  • 80 は Let’s Encrypt の証明書取得用
  • 443 は実際の HTTPS アクセス用

注意:

  • 30027 は今後外部公開しなくてよい
  • 444 は転送しない
  • TrueNAS 管理画面は公開しない

手順 6: Nginx Proxy Manager にログインする

LAN 内から次へアクセスする。

  • http://192.168.100.20:30081

初回ログイン後、管理者アカウントのパスワードを変更する。


手順 7: Proxy Host を作成する

Nginx Proxy Manager で Proxy Hosts を追加する。

設定内容:

  • Domain Names: cloud.brain-thunder.jp
  • Scheme: http
  • Forward Hostname / IP: 192.168.100.20
  • Forward Port: 30027
  • Cache Assets: OFF
  • Block Common Exploits: ON
  • Websockets Support: ON

この設定の意味:

  • 外から来た https://cloud.brain-thunder.jp へのアクセスを受ける
  • 内部では http://192.168.100.20:30027 の Nextcloud へ流す

手順 8: Let’s Encrypt の証明書を取得する

作成した Proxy Host の SSL タブで次を設定する。

  • SSL Certificate: Request a new SSL Certificate
  • Email Address: 自分のメールアドレス
  • Use a DNS Challenge: OFF
  • Force SSL: ON
  • HTTP/2 Support: ON
  • HSTS Enabled: 任意
  • Agree to the Let’s Encrypt Terms of Service: ON

そのまま保存する。

成功すると:

  • cloud.brain-thunder.jp 用の証明書が取得される
  • ブラウザ警告なしで HTTPS が使えるようになる

手順 9: Nextcloud の config.php を修正する

Nextcloud の config.php に以下を設定する。

補足:

  • trusted_domainscloud.brain-thunder.jp を許可する設定
  • trusted_proxies は Nginx Proxy Manager を信頼する設定
  • overwritehostoverwriteprotocol は URL 生成を HTTPS に固定する設定

注意:

  • 既存の config.php にすでに値がある場合は、置き換えではなく必要に応じて追記する
  • trusted_proxies には、Nextcloud から見たリバースプロキシの IP を入れる

手順 10: Nextcloud を再起動する

TrueNAS SCALE の Apps 画面から Nextcloud を再起動する。

目的:

  • config.php の設定を確実に反映するため

手順 11: 動作確認を行う

次の順番で確認する。

  1. LAN 内から http://192.168.100.20:30027 が開く
  2. LAN 内から http://192.168.100.20:30081 が開く
  3. 外部から http://cloud.brain-thunder.jp にアクセスすると HTTPS へ転送される
  4. 外部から https://cloud.brain-thunder.jp へアクセスできる
  5. 証明書警告が出ない
  6. Nextcloud ログイン後も URL が https://cloud.brain-thunder.jp のままになっている

TrueNAS 管理画面はどう使うか

TrueNAS 管理画面は外部公開しない。
外出先から使いたい場合は、RTX810 の VPN で自宅 LAN に接続してから開く。

VPN 接続後のアクセス例:

  • https://192.168.100.20:444

公開しないポート

外部に公開しないもの:

  • 30027
  • 444
  • TrueNAS 管理画面そのもの

外部に公開するもの:

  • 80
  • 443

よくある失敗

1. Let’s Encrypt の証明書取得に失敗する

原因候補:

  • cloud.brain-thunder.jp の DNS が正しいグローバル IP を向いていない
  • RTX810 で 80 が正しく転送されていない
  • Nginx Proxy Manager が 80 で待ち受けできていない

2. Nextcloud にアクセスすると「信頼されていないドメイン」と出る

原因候補:

  • config.phptrusted_domainscloud.brain-thunder.jp が入っていない

3. ログイン後に HTTP に戻る

原因候補:

  • overwriteprotocolhttps になっていない
  • overwritehost が未設定

4. Nginx Proxy Manager が 443 で動かない

原因候補:

  • TrueNAS 管理画面がまだ 443 を使っている

5. 外部から全くつながらない

原因候補:

  • 自宅回線が CGNAT
  • 二重ルーター
  • RTX810 の NAT 設定不足
  • ISP 側で 80/443 が制限されている

この構成のメリット

  • Nextcloud だけを安全に公開できる
  • URL が分かりやすい
  • ブラウザ警告なしで HTTPS 化できる
  • TrueNAS 管理画面を直接インターネットへ出さずに済む
  • 将来的に notes.brain-thunder.jp など別サービスも同じ仕組みで追加できる

まとめ

この構成で使う URL は次の通り。

  • 公開用 Nextcloud: https://cloud.brain-thunder.jp
  • Nextcloud 内部転送先: http://192.168.100.20:30027
  • TrueNAS 管理画面: https://192.168.100.20:444 を VPN 接続後に利用

公開するのは 80/443 のみ。
TrueNAS 管理画面は公開しない。
Nextcloud だけを Let’s Encrypt で HTTPS 化する。


長いけどとりあえずhttpsで公開できるまでやりました。詰まった部分メモ。
Nginx Proxy Manager が Deployning で止まる。ログの状態は以下。

ここで止まるなら辛抱強く待つ。それだけ。

なんかのパッケージインストールしてるところで停止していた。
以下のHost Networkをチェックしたら解決。

80ポートを使う権限がない?以下エラーが無限ループ。

これに関してはNPM(Nginx Proxy Manager)の使用ポートを高番ポートに変更して対処した。

管理画面 81 -> 30081
HTTP 80 -> 30080
HTTPS 443 -> 30443

設定変更してNPM再起動したら無事にDeployingから進行して起動した。
https://192.168.100.20:30081 でアクセスすると管理画面が出るところまでかくにん!

最終的に https://cloud.brain-thunder.jp でアクセスできる必要があるのでポートフォワーディングする必要がある。これはルーター(RTX810)で設定します。

1. DNS に cloud.brain-thunder.jp を作る

DNS 管理画面で A レコードを追加します。

  • ホスト名: cloud
  • FQDN: cloud.brain-thunder.jp
  • 値: 自宅回線のグローバル IP

補足:

  • brain-thunder.jp 本体ではなく、Nextcloud 用に cloud.brain-thunder.jp を使います
  • Cloudflare を使っているなら最初は DNS only にしてください

2. RTX810 で外部 80 / 443 を NPM の高番ポートへ転送する

今は NPM が内部で高番ポート待受なので、RTX810 で外部標準ポートをそこへ流します。

設定方針はこれです。

  • 外部 TCP 80 → 192.168.100.20:30080
  • 外部 TCP 443 → 192.168.100.20:30443

重要なのはここです。

  • Let’s Encrypt の HTTP-01 認証は「外部から見て 80 番で届く」ことが必要
  • 内部で 30080 に変換されていても問題ありません
  • 利用者は最終的に https://cloud.brain-thunder.jp でアクセスします
  • 30081 は管理画面用なので外部公開しません

3. NPM 管理画面に LAN 内から入る

LAN 内から次へアクセスします。

http://192.168.100.20:30081
ここで NPM の管理画面に入れることを確認してください。

4.Proxy Host を作成する

NPM で Proxy Hosts を追加します。
転送先は今の Nextcloud です。

    設定は次のとおりです。

    Domain Names: cloud.brain-thunder.jp
    Scheme: http
    Forward Hostname / IP: 192.168.100.20
    Forward Port: 30027
    Block Common Exploits: ON
    Websockets Support: ON
    意味はこうです。

    外から来た cloud.brain-thunder.jp へのアクセスを NPM が受ける
    NPM が内部の http://192.168.100.20:30027 へ流す

    5. Let’s Encrypt 証明書を取得する

    作成した Proxy Host の SSL タブで次を設定します。

    Request a new SSL Certificate
    メールアドレス入力
    Force SSL を有効
    HTTP/2 Support を有効
    Agree to the Let’s Encrypt Terms of Service を有効
    そのまま保存します。

    ここで成功する条件は次です。

    cloud.brain-thunder.jp が正しいグローバル IP を向いている
    RTX810 で外部 80 が 192.168.100.20:30080 へ転送されている
    NPM が 30080 で正常に動いている
    もしここで失敗したら、最優先で疑うのは 80番転送 と DNS です。

    6. Nextcloud の config.php を直す

    Nextcloud はリバースプロキシ配下になるので、URL 生成と許可ドメイン設定が必要です。

    最低限、次を入れます。

    補足:

    • trusted_domains は Nextcloud が受け付けるホスト名
    • trusted_proxies は NPM を信頼する設定
    • overwriteprotocol がないと HTTPS 運用でも HTTP に戻ることがあります

    もし既存の設定があるなら、消すのではなく必要な値を追加してください。


    7. Nextcloud を再起動する

    config.php 反映のため、TrueNAS SCALE の Apps 画面から Nextcloud を再起動します。


    8. 動作確認する

    確認順はこの順が安全です。

    1. LAN 内で http://192.168.100.20:30081 が開く
    2. LAN 内で http://192.168.100.20:30027 が開く
    3. 外部から http://cloud.brain-thunder.jp へアクセスすると HTTPS へ転送される
    4. 外部から https://cloud.brain-thunder.jp へアクセスできる
    5. 証明書警告が出ない
    6. Nextcloud ログイン後も URL が https://cloud.brain-thunder.jp のまま

    この時点でやらないこと

    今は次は不要です。

    • 30027 の外部公開継続
    • 30081 の外部公開
    • TrueNAS 管理画面の外部公開

    外に出すのは最終的に 80/443 だけです。
    30027 は最終的に閉じてよいです。


    次に詰まりやすい点

    証明書取得に失敗する

    原因の大半は次です。

    • DNS がまだ反映されていない
    • RTX810 の 80 -> 30080 転送が未設定
    • Cloudflare のプロキシが有効

    Nextcloud で「信頼されていないドメイン」

    trusted_domains に cloud.brain-thunder.jp が入っていません。

    ログイン後に HTTP に戻る

    overwriteprotocol または overwritehost が不足しています。


    今のあなたが次にやるべき順番

    1. DNS に cloud.brain-thunder.jp を作る
    2. RTX810 で 80 -> 30080 と 443 -> 30443 を設定する
    3. NPM で Proxy Host を作る
    4. NPM で Let’s Encrypt 証明書を取得する
    5. Nextcloud の config.php を更新する
    6. 外部から https://cloud.brain-thunder.jp を確認する

    必要なら次に、RTX810 側の設定だけを、あなたの今の構成向けにもう少し具体的に書きます。


    ポートフォワーディング(静的IPマスカレード)設定の時にRTX810だとどうやって別ポートへの転送書くんや?と思ったら 以下のように “入力ポート=転送ポート” の形式で書けば良いっぽい。

    諸々設定して

    内部から確認
    http://192.168.100.20:30081 で NPM 管理画面が開く
    https://192.168.100.20:30443 にアクセスして NPM が応答する

    外部から確認
    https://cloud.brain-thunder.jp にアクセスして NPM が応答する

    のを確認!よかった。

    次は外部からの接続画面でNPMで https://cloud.brain-thunder.jp にアクセスした時にnextcloudの画面が出るようにする。手順的には先ほどの 3.以降の対応を行う。

    そしてやっとこ外部から https://cloud.brain-thunder.jp にアクセスしたらnextcloudの画面が出てちゃんと使えるようになった事を確認!よかった。

    ここで問題があり、内部LANから https://cloud.brain-thunder.jp にアクセスした時はポートフォワードされないのでnextcloudの画面が出ない。
    これは cloud.brain-thunder.jp に対してはRTX810に内部向けDNSを設定してるから 443→30443 のポート変換が出来てないからですね。困った。

    対処として cloud.brain-thunder.jp の内部向けDNS設定を外すとグローバルIP解決になるので外側からのアクセスになって正しくポート変換が行われてnextcloudが表示されるようになった。
    しばらくこの運用で行こうと思うけど…これって一度外部経由してるからアクセス速度低下してない?

    サーベイするとヘアピンNATという機能があって、グローバルIP宛先でも暗黙的な経路でパケット転送をLAN内で完結するためオーバーヘッドが極小で通信できるっぽい。

    でも残念ながらこのヘアピンNAT、RTX810は未対応だった。対応機器中古で探しますか…。
    それかNPMをTrueNASでやるんじゃなくてちゃんと専用機用意してやるとか?
    というかNPMをそもそも80/443運用で起動できるように設定できるかチャレンジするのがええか…。インフラ経験が年齢に伴っておらず学び続けなければならない。

    エリート飯。チカメキントキの刺身、間違いなく連子鯛よりも旨味がある。

    ■今日の #明るいイケメン化計画 #揺るぎなき信念のRPG
    疲労コンパイルのためサボりです。

    ■ 今日の1日1捨て


    ■ 今日の楽器
    ちょっとだけVRドラムマニア

    おわい

    シェアする