尝试在尽可能安全的情况下,利用当下热门的ZeroTrust概念,同时隐藏家庭服务器的IP,来公开Minecraft(Bedrock)服务器
不好意思
这篇文章是我匆忙准备这个活动的思考整理,所以很凌乱。非常抱歉。
如果您有任何问题或建议,比如这里应该怎么做更好之类的意见,都欢迎随时留言。
构成图
我所做的事情
-
- さくらのVPSを契約
リバースプロキシとWebアプリを1個動かすだけなので最小スペック(メモリ1G/ストレージ50GB/100Mbps)を月額990円で契約
本当はWebARENA Indigoでストレージだけ20GBの同スペックVPSが349円(349円!?!?)で提供されてるのでこっちを使いたいが、プリペイド系クレジットカードとかデビッド弾く設定だったので断念(NTTPCさん…この歳までクレカ作ってない僕にも救いはありませんか…?)
Cloudflareでドメインを取得
Proxyさせたときにアクセス元IPを拾う方法をまだ調べていないので、当座DNSOnlyモードでリバースプロキシのグローバルIPへ飛ばさせている(要改善)
VPS上で作成したFlaskアプリケーションをCloudflareTunnel経由で公開
FlaskでTrustMasterアプリケーションを作成
ブラウザからawsのグローバルIPチェックにリクエストを送信し、グローバルIPを取得
取得したグローバルIPをFlaskにGETで通知
受け取ったFlaskはその内容をwhitelistに追記する
Flaskへのアクセスはコンテナ内に留めて、同じスタックのnginxから、かつ特定ドメインでのアクセス時のみアクセス許可する(後述するBedrockリバースプロキシ用のnginxとは処理が別)
WireGuardで自宅サーバーへのVPNを構築
nginxでUDPリバースプロキシを構築
nginxでUDPのプロキシを通すには専用のオプションを付けてビルドしないと行けないため、まずはそのコンテナ構築
構築したUDP対応のnginxでwhitelistの内容に沿ったIPフィルタリングを行う
TrustMaster通过Cloudflare Tunnel连接到VPS上的Flask,而nginx则通过Cloudflare DNS设置直接连接到Bedrock Server。
由于bedrock域名在DNSOnly模式下公开,无法隐藏VPS的IP地址,尽管本来就是为了这个目的而有的VPS。只要Cloudflare Tunnel支持UDP,并且我能够仔细研究Cloudflare DNS的代理模式来从nginx中获取原始IP地址并实施,VPS和家庭服务器都能完全隐藏IP地址。(有点过于安全)
已知的问题 (Yǐ zhī de
-
- nginxでconfigを動的に読み込むためには有償版のnginx plusを使わないといけないらしい
-
- 新しくユーザーが追加される度にnginx restartが必要となる。このシステム経由でログインしてるユーザーは、別のユーザーが新規にwhitelistの登録操作(に伴うnginx -s reload)したときに切断される
-
- PCからだとめっちゃラグい
- 何故かiOS版とか今回検証用に購入したAndroid版とかからだと全然遅延を感じずに遊べるのに、PCから遊ぶとラグい。(チェスト開いたりエリトラ中のロケット花火が実行されるまで1~2秒くらいかかるという典型的な遅延状態)それぞれ同じ回線から接続しても同様の事象が再現するので、クライアント依存っぽい。
请在参考资料中查阅。
构建适用于nginx的UDP版本
Nginx的UDP配置如何进行?
構築WireGuard