AIと対話してポート開放できない自宅からゲームサーバーを建てた時のメモ
※AIに書かせたので検証しながら進めてください
低速クラウド — 自宅サーバー間 複合インフラ構成 & ゲームサーバー転送 構築手順書
1. 概要・システム構成
本システムは、低速クラウド(VPS等)上に配置した Coolify(管理画面) から、自宅サーバー上のリソースを統合管理・デプロイしつつ、ゲームサーバーの高速通信を実現するハイブリッド構成です。
通信の性質(TCP/Web管理 vs UDPゲーム通信)に応じて Cloudflare Tunnel と WireGuard Tunnel を使い分けています。
【 インターネット / 管理者 】
│
┌──────────────────────┴──────────────────────┐
│ (Web / SSH / HTTP 通信) │ (ゲーム用 UDP/TCP 通信)
▼ ▼
【 Cloudflare Edge 】 【 低速クラウド (10.200.0.1) 】
│ │
│ Cloudflare Tunnel │ WireGuard Tunnel
│ (cloudflared) │ (iptables DNAT)
│ │
└──────────────────────┬──────────────────────┘
▼
【 自宅サーバー (10.200.0.2) 】
・ Coolify Worker / コンテナ群
・ cloudflared デーモン
・ ゲームサーバー (パルワールド等)
2. 役割分担とネットワーク設計
| 役割 | 採用技術 | 対象通信 / ポート | 目的・理由 |
|---|---|---|---|
| Web アプリ公開 | Cloudflare Tunnel | HTTP / HTTPS (80, 443) | SSL自動化、DDoS保護、IP非公開化 |
| Coolify ↔ 自宅 SSH管理 | Cloudflare Tunnel | SSH (22) | 外部ポート開放なしで Coolify から自宅サーバーを制御 |
| ゲームサーバー通信 | WireGuard Tunnel | 8211/UDP, TCP 27015/UDP, TCP |
Cloudflare が非対応(または有料)の UDP 通信を低速クラウド経由で直通化 |
-
VPN 内 IP 帯域:
10.200.0.0/24(※ Docker 標準ブリッジdocker0:10.0.0.0/16との衝突を避けるため10.200帯を使用)
3. Cloudflare Tunnel による SSH 制御 & Coolify 連携設定
Coolify(低速クラウド上)から自宅サーバーへ安全に SSH 接続・デプロイを行うため、自宅サーバー側で手動の cloudflared 設定および Coolify コンテナ内での SSH プロキシ設定を行います。
① 自宅サーバー側:cloudflared の手動セットアップ
-
cloudflaredインストール & 認証:
# インストール後、ログイン
cloudflared tunnel login
# トンネル作成
cloudflared tunnel create home-server-tunnel
-
~/.cloudflare/config.ymlの作成:
tunnel: <TUNNEL_ID>
credentials-file: /root/.cloudflare/<TUNNEL_ID>.json
ingress:
# SSH 接続用ホスト名
- hostname: ssh-home.your-domain.com
service: ssh://localhost:22
# デプロイ後の Web アプリ用(ワイルドカードや個別ドメイン)
- hostname: "*.your-domain.com"
service: http://localhost:80
- service: http_status:404
- DNS レコード割り当て & サービス化:
cloudflared tunnel route dns home-server-tunnel ssh-home.your-domain.com
sudo cloudflared service install
sudo systemctl start cloudflared
② Cloudflare Zero Trust:アクセスポリシーの設定
- Cloudflare Zero Trust 管理画面 ➔ Access ➔ Applications を開きます。
-
ssh-home.your-domain.comに対する Self-hosted Application を作成。 - Access Policy を設定し、Coolify からのアクセス認証を有効化(Service Token または特定アクセス制限の付与)。
③ Coolify(コンテナ内)側:SSH プロキシ設定
低速クラウド側の Coolify(coolify のコンテナに入って操作)が ssh-home.your-domain.com 経由で自宅サーバーにアクセスできるよう、SSH クライアント設定(~/.ssh/config)に cloudflared プロキシを組み込みます。
Coolify サーバー内の SSH 設定ファイル(または Coolify の Server 設定パネル)に以下を記述:
Host home-server
ProxyCommand cloudflared access ssh --hostname %h
そしてssh home-serverをしておきcloudflareのアクセス認証を通しておく(ポリシーによる)
またcoolifyにおいてcloudflare tunnelのタブからhereを押してenabledにしておく
これにより、Coolify 管理画面から「自宅サーバー」を宛先として正常に SSH 疎通・コントロールが可能になります。
4. 低速クラウド側:WireGuard & iptables 設定 (10.200.0.1)
UDP ポート(ゲームサーバー等)を通すための WireGuard および転送設定です。
① OS パケット転送の有効化
sudo sysctl -w net.ipv4.ip_forward=1
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
② /etc/wireguard/wg0.conf
[Interface]
Address = 10.200.0.1/24
PrivateKey = <クラウド側の秘密鍵>
ListenPort = 51820
# --- 起動時に 8211 / 27015 (UDP/TCP) を自宅サーバー(10.200.0.2)へ転送 ---
PostUp = iptables -t nat -A PREROUTING -p udp --dport 27015 -j DNAT --to-destination 10.200.0.2:27015
PostUp = iptables -t nat -A PREROUTING -p tcp --dport 27015 -j DNAT --to-destination 10.200.0.2:27015
PostUp = iptables -t nat -A PREROUTING -p udp --dport 8211 -j DNAT --to-destination 10.200.0.2:8211
PostUp = iptables -t nat -A PREROUTING -p tcp --dport 8211 -j DNAT --to-destination 10.200.0.2:8211
PostUp = iptables -A FORWARD -d 10.200.0.2 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
# --- 停止時にルール削除 ---
PostDown = iptables -t nat -D PREROUTING -p udp --dport 27015 -j DNAT --to-destination 10.200.0.2:27015
PostDown = iptables -t nat -D PREROUTING -p tcp --dport 27015 -j DNAT --to-destination 10.200.0.2:27015
PostDown = iptables -t nat -D PREROUTING -p udp --dport 8211 -j DNAT --to-destination 10.200.0.2:8211
PostDown = iptables -t nat -D PREROUTING -p tcp --dport 8211 -j DNAT --to-destination 10.200.0.2:8211
PostDown = iptables -D FORWARD -d 10.200.0.2 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o wg0 -j MASQUERADE
[Peer]
PublicKey = <自宅サーバー側の公開鍵>
AllowedIPs = 10.200.0.2/32
5. 自宅サーバー側:WireGuard 設定 (10.200.0.2)
/etc/wireguard/wg0.conf:
[Interface]
Address = 10.200.0.2/24
PrivateKey = <自宅サーバー側の秘密鍵>
[Peer]
PublicKey = <クラウド側の公開鍵>
Endpoint = <低速クラウドのパブリックIP>:51820
AllowedIPs = 10.200.0.0/24
PersistentKeepalive = 25
6. はまりポイント・ナレッジ集
- Docker (
docker0) と VPN 空間の IP 衝突
-
10.0.0.xを VPN に使うと Docker の標準ブリッジ帯域と重複し、ip route get 10.0.0.2がdev docker0を向いて通信不可になる。VPN は10.200.0.x等で構築すること。
- Coolify からの Cloudflare 経由 SSH
- 自宅サーバーで
cloudflaredを立てるだけでなく、Coolify 側(SSH クライアント側)にもProxyCommand cloudflared access ssh ...の設定が入っていないと SSH ハンドシェイクに失敗する。
- ゲーム用 UDP 転送における TCP ルールの必須化
- パルワールド等のゲームサーバーは UDP 通信だけでなく、サーバーブラウザ一覧やセッション確立(クエリ)に TCP を使用するため、
iptablesでは UDP と TCP の両方を DNAT 転送する必要がある。