3.2 KiB
3.2 KiB
Synology Proxy 過去の失敗原因と対策 (Recap)
ユーザー様より「なぜSynology経由だとうまくいかなかったのか?」というご質問を頂きました。 過去のエラーログと構成状況に基づく分析結果は以下の通りです。
1. 最大の原因:「自宅の壁 (Network Accessibility)」
以前の構成では、アプリの設定が以下のような ローカルIPアドレス になっていました。
// 以前の設定 (イメージ)
static const String proxyUrl = 'http://192.168.31.89:8080';
- 何が起きたか:
- 自宅のWi-Fiに繋いでいる時: OK 🟢 (繋がる)
- 会社のWi-Fi / 電車の4G回線: NG ❌ (繋がらない)
- 症状:
- 外出先でアプリを開くと「タイムアウト」や「接続拒否」エラーが発生。
- これを回避するためにポート開放やVPNなどを検討しましたが、設定が複雑で不安定になりがちでした。
2. 第2のハードル:「セキュリティ制限 (HTTP vs HTTPS)」
AndroidやiOSの最新OSは、暗号化されていない通信 (HTTP) をデフォルトでブロックします。
- 問題点: 自宅サーバーに正式なSSL証明書 (
https://) を設定するのは、ドメイン取得や証明書更新などの手間が非常に大きいです。 - 結果: アプリ側で
android:usesCleartextTraffic="true"といったセキュリティ緩和設定を入れる必要があり、リリース審査的にも好ましくない状態でした。
3. 第3の壁:「往復のレイテンシ (Double Hop)」
[スマホ] --(画像)--> [Synology] --(画像)--> [Google Gemini]
- ボトルネック:
- 自宅のインターネット回線(特に上り/アップロード速度)が遅い場合、スマホから画像を受け取ってGoogleに投げるまでの時間が倍増します。
- 画像サイズが大きいと、ここで10秒〜20秒の待ち時間が発生し、アプリが「応答なし」と判断して切断してしまうケースがありました。
✅ 今回の解決策: Cloudflare Tunnel
今回提案している「Phase 2: Container Manager + Cloudflare Tunnel」構成では、これらが全て解決します。
- 脱・ローカルIP:
cloudflaredコンテナが自動でトンネルを掘り、https://ai-proxy.example.comのような固定の公開URLを発行してくれます。- → 会社からも電車からも繋がります。
- 自動HTTPS化: Cloudflareが勝手にSSL証明書を貼ってくれるので、アプリからは完全に安全な
https通信として見えます。- → セキュリティエラーが出なくなります。
- 速度対策:
- これでも「自宅回線の上り速度」依存は残りますが、アプリ側の実装で「画像の圧縮(Resize)」を適切に行うことで回避可能です(実装済み)。
結論
前回の失敗は「技術的な不可能」ではなく、「ネットワーク経路(アクセス権)の問題」 でした。 Cloudflare Tunnel を導入することで、この経路問題はきれいに解消されます。