☁️

CloudFlare Tunnel の設定と Private network 接続時セキュリティ考察メモ

2023/05/17に公開

生成系 AI 計算代行とか CG 計算とか, つよつよ GPU で計算する必要がある web サービスを公開したい.

でもクラウドとかの GPU インスタンス高杉...

自宅や事務所などの GPU で計算させたい...

参考情報

https://zenn.dev/waddy/articles/g-domains-cloudflare-tunnel

https://zenn.dev/hiroe_orz17/articles/f8f35075dea4cf

https://zenn.dev/sinmai/articles/0d76eb16070565

ありがとうございます.
(ちなみに OCI の ARM サーバは現時点(2023/05)では空きがないようで, リリース確保できませんでした... )

構成

今回は, つよつよ GPU のある環境はネットワーク回線がよわよわだったり, 複数の拠点にタスク投げたりも考慮して, VPS(Global IP あり) 経由で行うことにします.

ドメインは取得済みとします.

CloudFlare Tunnel を利用し, ドメインを VPS の IP に転送します.

VPS では nginx で http リクエストをうけ, 各 private network な拠点に転送するなどします.
(ユーザー(インターネット側)からは https で通信している)

VPS と GPU サーバの拠点は Tailscale(or Wireguard)で暗号化通信するものとします.

                                   VPS
                                 +--------+                           +------+
internet <- CloudFlare Tunnel -> |  nginx | <= Tailscale/Wireguard => | GPU  |
                                 +--------+                           +------+

設定は他記事の通りでいけました.

サービスへの接続は HTTPS 化いる?

VPS 上の CloudFlare Tunnel の config.yml は他の記事のように, こんな感じです.

ingress:
  - hostname: mydomain.domain.com
    service: http://localhost:8080
  - service: http_status:404

あとは VPS 上に nginx なりで http サーバ建てればそこに繋いでくれます!

CloudFlare Tunnel の各紹介記事ではだいたいは http のサービスに流す設定になっています.
https にしなくとも, 基本大丈夫なのではないかなと思います...

VPS で Tunnel -> http にデコードする段階で一度平文になるが, セキュリティや firewall シッカリしていれば外部から VPS にはアクセスできないため.
DDoS 対策なども CloudFlare 側でやってくれますし...

さらに, SSL 証明書は CloudFlare で管理してくれるので, Let's Encrypt など設定しなくてもよいです.

よりセキュリティ必要な場合は, ssh ポートに流すこともできるので, ssh を使う手もあるでしょうか.
(VPS or GPU 拠点(たとえばどこかの計算機センターとか)の admin 権限がなかったりポート制限があったりなどで Tailscale/Wireguard 動かせないときとか)

nginx などのプロセスを Docker や runC などで sandbox 実行するのも手かもしれません.
あとは CloudFlare Zero Trust 設定を頑張るとか?

ちなみに https サーバをオレオレ証明書(localhost)で作って, service を https に流すようにしたら CommonName とかあたりでエラーでました. なんかいろいろうまく設定しないとダメそうです.

Tunnel は QUIC 通信?

CloudFlare Tunnel の設定で, 常に https で通信 + Brotli 圧縮にする設定にしたら, QUIC になってました.

# cloudflared のログ
... location=NRT protocol=quic

https://blog.cloudflare.com/getting-cloudflare-tunnels-to-connect-to-the-cloudflare-network-with-quic/

なんか頑張れば QUIC のパケットのまま GPU 拠点に転送というのもできるやも?

Discussion