Pelican Panel/Wings をドメインで公開して Minecraft に接続する手順(VPS 経由・ローカル側ポート開放不可)
Pelican Panel/Wings をドメインで公開して Minecraft に接続する手順(VPS 経由・ローカル側ポート開放不可)
この手順では、VPS を公開入口として使い、frp(Fast Reverse Proxy)でローカル VM(Wings ノード)へ安全にトンネルします。Cloudflare は DNS を管理します(HTTP 以外はプロキシ不可のため DNS のみ)。最終的に、mc.cloudru.jp などのドメインで Minecraft Java サーバに接続できるようにします。
- Panel は
pelican.cloudru.jpで公開済み(Cloudflare)。 - VPS: 公開 IP 例
158.51.109.155。 - ローカル VM(Pelican/Wings):
192.168.110.6。パネルの Address 表示が192.168.110.6:25568などになっている。 - ローカル側はルータ/NATのため、外部からのポート開放は不可。
重要: Pelican の「Allocations」はノード上の“IP アドレスとポート”の割当です。ここに「ドメイン名」は表示されません(仕様)。ドメインは DNS で解決され、入口(VPS)へ到達後、
frp経由で Wings に転送されます。
ゴール
-
mc.cloudru.jpで Minecraft Java に接続可能(標準ポート 25565 を推奨)。 - Pelican の Allocations に
0.0.0.0:25565(または使用中のポート)を追加し、該当サーバへ割り当て。
クイックスタート(5分版・変数化)
以下の変数に自環境の値を設定して読み替えてください。
-
MC_DOMAIN: 接続ドメイン(例:mc.cloudru.jp) -
VPS_PUBLIC_IP: VPS のグローバル IP(例:158.51.109.155) -
FRP_TOKEN: 強固な乱数トークン(非公開) -
PRIMARY_PORT: 公開ポート(例:25570) -
ALLOW_RANGE: 許可レンジ(例:25565-26064または25500-25999) -
LOCAL_WINGS_IP: ローカル Wings IP(例:192.168.110.6) -
LOCAL_MC_PORT: コンテナのローカル Minecraft ポート(例:25565/25570)
手順の流れ(要点のみ):
- Cloudflare DNS(DNS only)で
MC_DOMAIN → VPS_PUBLIC_IPを設定。必要なら SRV でポートを隠す。 - VPS に
frpsを導入し、bind_port=7000とallow_ports=ALLOW_RANGEを設定。 - ローカル VM に
frpcを導入し、remote_port=PRIMARY_PORTをLOCAL_WINGS_IP:LOCAL_MC_PORTへ転送。 - Pelican のノードに
0.0.0.0:ALLOW_RANGEを Allocation。対象サーバへPRIMARY_PORTを割り当て Primary に設定。 - 外部到達テスト
nc -vz MC_DOMAIN PRIMARY_PORT、Minecraft クライアントでMC_DOMAIN:PRIMARY_PORTに接続。
構成概要
- Cloudflare DNS:
mc.cloudru.jpを VPS の A レコードに向ける(Proxied: Off / DNS only)。 - VPS:
frps(サーバ)を稼働。制御ポート7000/tcpでクライアントを受け、公開ポート25565/tcpを開ける。 - ローカル VM:
frpc(クライアント)が VPS へ常時接続。VPSの25565をローカルの192.168.110.6:<minecraft_port>に転送。 - Pelican/Wings: 該当ポートをサーバへ割当(Allocations)。
1) Cloudflare DNS の設定
- Cloudflare ダッシュボード →
cloudru.jp。 - A レコードを追加:
- Name:
mc - IPv4 address:
158.51.109.155(VPS の公開 IP) - Proxy status: DNS only(グレー雲)
- Name:
- (任意)SRV レコードでポートを隠す場合:
- Type: SRV
- Service:
_minecraft - Proto:
_tcp - Name:
play(例) - Target:
mc.cloudru.jp - Port:
25565(または 25568 を使うなら 25568) - Priority:
0, Weight:5
注: Cloudflare のオレンジ雲(HTTP 逆プロキシ)は Minecraft の TCP を処理できません。非 HTTP は DNS only を使います。Cloudflare Spectrum を使う場合は別途契約が必要です。
2) VPS(frps サーバ)のセットアップ
以下は Debian/Ubuntu 例。別 OS はバイナリを置き換えてください。
frps のインストール
sudo mkdir -p /opt/frp && cd /opt
sudo wget https://github.com/fatedier/frp/releases/download/v0.60.0/frp_0.60.0_linux_amd64.tar.gz
sudo tar xzf frp_0.60.0_linux_amd64.tar.gz
sudo mv frp_0.60.0_linux_amd64 frp
設定 /etc/frp/frps.ini
[common]
bind_port = 7000
authentication_method = token
token = ${FRP_TOKEN}
; 公開可能ポートを絞る(推奨)
allow_ports = ${ALLOW_RANGE}
; 例: 25565,25570 / 25500-25999 / 25565-26064
; 注: allow_ports は "許可範囲" の指定であり、frpc が該当 remote_port を作成・接続したときだけ
; frps 側に待受が生成されます。範囲指定だけでは自動公開されません。
systemd ユニット /etc/systemd/system/frps.service
[Unit]
Description=frp server (frps)
After=network.target
[Service]
Type=simple
ExecStart=/opt/frp/frps -c /etc/frp/frps.ini
Restart=always
[Install]
WantedBy=multi-user.target
起動とファイアウォール
sudo ufw allow 7000/tcp
# 500ポート範囲をまとめて許可(Ubuntu/UFW)
sudo ufw allow 25500:25999/tcp
# 25565から500ポートの場合はこちら
# sudo ufw allow 25565:26064/tcp
sudo systemctl daemon-reload
sudo systemctl enable --now frps
3) ローカル VM(frpc クライアント)のセットアップ
frpc のインストール
sudo mkdir -p /opt/frp && cd /opt
sudo wget https://github.com/fatedier/frp/releases/download/v0.60.0/frp_0.60.0_linux_amd64.tar.gz
sudo tar xzf frp_0.60.0_linux_amd64.tar.gz
sudo mv frp_0.60.0_linux_amd64 frp
設定 /etc/frp/frpc.ini
Minecraft の実ポートに合わせて LOCAL_MC_PORT を設定します。
[common]
server_addr = ${VPS_PUBLIC_IP} ; または MC_DOMAIN(DNS only)
server_port = 7000
authentication_method = token
token = ${FRP_TOKEN}
[minecraft-${PRIMARY_PORT}]
type = tcp
local_ip = ${LOCAL_WINGS_IP}
local_port = ${LOCAL_MC_PORT}
remote_port = ${PRIMARY_PORT}
注意:
frpcは「1セクション = 1公開ポート」です。単一の[minecraft]セクションでは範囲一括割当はできません。複数サーバを同時公開する場合は、ポートごとにセクションを追加するか、末尾の「10) 追加: frpc を使って 25500-25999 を一括公開する(自動生成)」のスクリプトで自動生成してください。
systemd ユニット /etc/systemd/system/frpc.service
[Unit]
Description=frp client (frpc)
After=network.target
[Service]
Type=simple
ExecStart=/opt/frp/frpc -c /etc/frp/frpc.ini
Restart=always
[Install]
WantedBy=multi-user.target
起動
sudo systemctl daemon-reload
sudo systemctl enable --now frpc
ログ確認:
journalctl -u frpc -f(接続成功/失敗を確認)。
4) Pelican(Wings)での Allocations 設定
- パネル左メニュー → Admin → Nodes → ローカルノード選択 → Allocations。
- 「Create Allocation」で以下を追加:
- IP Address:
0.0.0.0(全インターフェイスで待受) - Ports:
25500-25999(例。まとめて500ポートを割当可能)
または25565-26064(25565から500ポート開始の例)
- IP Address:
- 対象サーバ → Network → 追加した Allocation を割り当て、Primary に設定。
注: ここに「mc.cloudru.jp」は表示されません。Allocations は Wings ノード上の IP/ポート に対する割当であり、ドメインは DNS レベルで入口(VPS)に向ける設計です。
5) 動作確認
- まず VPS で待受を確認:
sudo ss -lntp | grep 25565
- ローカル VMで
frpcが接続済みかログ確認:
journalctl -u frpc -f
- 外部クライアントから接続テスト(Linux/macOS例):
nc -vz mc.cloudru.jp 25565
- Minecraft クライアントで
mc.cloudru.jpに接続(SRV を設定した場合はplay.cloudru.jpのみでも可)。
6) よくある躓きポイントと対処
- Cloudflare の「オレンジ雲」を有効にすると非 HTTP トラフィックが遮断されます。DNS only にしてください。
-
frpsのallow_portsを設定しているのに別ポートを指定すると失敗します。公開するポートだけを列挙。 - Wing 側ポートがコンテナに割り当てられていないと接続できません。サーバの Network タブで割当済みか確認。
- Bedrock Edition(UDP)を使う場合は、
type = udpのエントリを追加し、19132/udpなどを同様に転送します(Cloudflare は UDP もプロキシ不可のため DNS only)。
7) 任意: ポート番号を隠したい(SRV レコード)
-
mc.cloudru.jpで 25568 を使いつつ、play.cloudru.jpでポート無し接続を可能にする例:- A:
mc.cloudru.jp→ VPS158.51.109.155(DNS only) - SRV:
_minecraft._tcp.play.cloudru.jp→ Target:mc.cloudru.jp, Port:25568 - クライアントは
play.cloudru.jpのみで接続可能。
- A:
8) 仕様上の補足(Allocations とドメイン)
- Pelican/Wings の Allocations は ノードのローカルインターフェイス(例:
192.168.110.6,172.17.0.1,0.0.0.0)のみを表示します。DNS 名は選択できません。 - ドメインを使いたい場合は、DNS → VPS(公開入口)→
frpでローカルへ転送、というレイヤ分離で実現します。 - もし VPS 側で Wings を動かす場合は、VPS ノードの Allocations として公開 IP を直接選べます(別ノード構成)。
9) まとめ
- Cloudflare DNS で
mc.cloudru.jpを VPS に向ける(DNS only)。 - VPS に
frps、ローカル VM にfrpcを設定し、25565(または任意ポート)をトンネル。 - Pelican で
0.0.0.0:<port>をサーバに割り当て。 - クライアントはドメインで接続可能。Allocations にドメインは表示されないのが正常。
10) 追加: frpc を使って 25500-25999 を一括公開する(自動生成)
大量のポートをまとめて公開したい場合は、frpc.ini のプロキシセクションを自動生成します。以下は 25500-25999 の 500 ポートをすべて同じローカルサーバ(例: 192.168.110.6:25565)へ転送する例です。
10.1 単一ローカルサーバへ 500 ポートを一括転送
TOKEN="<同じトークン>"
ADDR="158.51.109.155"
LOCAL_IP="192.168.110.6"
LOCAL_PORT=25565 # 必要なら 25568 などに変更
START=25500
END=25999
sudo tee /etc/frp/frpc.ini > /dev/null <<EOF
[common]
server_addr = ${ADDR}
server_port = 7000
authentication_method = token
token = ${TOKEN}
EOF
for p in $(seq ${START} ${END}); do
sudo tee -a /etc/frp/frpc.ini > /dev/null <<EOF
[minecraft-${p}]
type = tcp
local_ip = ${LOCAL_IP}
local_port = ${LOCAL_PORT}
remote_port = ${p}
EOF
done
sudo systemctl restart frpc
注: この方法は「同じローカルサーバへ複数ポートで到達可能」にする用途です。複数サーバを公開したい場合は次の CSV 方式を使います。
10.2 複数サーバ(IP/ポート)を CSV で一括生成
-
マッピングファイルを作成(例
/etc/frp/mappings.csv)。各行はremote_port,local_ip,local_port。25501,192.168.110.6,25565 25502,192.168.110.6,25568 25575,192.168.110.6,25575 -
生成スクリプトを実行:
TOKEN="<同じトークン>" ADDR="158.51.109.155" MAP="/etc/frp/mappings.csv" sudo tee /etc/frp/frpc.ini > /dev/null <<EOF [common] server_addr = ${ADDR} server_port = 7000 authentication_method = token token = ${TOKEN} EOF while IFS="," read -r remote ip port; do [ -z "${remote}${ip}${port}" ] && continue sudo tee -a /etc/frp/frpc.ini > /dev/null <<EOF [minecraft-${remote}] type = tcp local_ip = ${ip} local_port = ${port} remote_port = ${remote} EOF done < "${MAP}" sudo systemctl restart frpc
10.3 Pelican 側の割当
- ノードの Allocations で
IP: 0.0.0.0,Ports: 25500-25999を作成済みであれば、各サーバに必要なポート(CSVのremote_port)を割り当ててください。
10.4 VPS ファイアウォール
sudo ufw allow 25500:25999/tcp
# Bedrock(UDP)も扱うなら
sudo ufw allow 25500:25999/udp
10.5 運用上の注意
-
frpsのallow_ports = 25500-25999に一致しないポートは公開されません。 - ポート重複(同じ
remote_portの二重定義)は失敗します。CSV で一意性を担保してください。 - 生成後は
journalctl -u frpc -fで接続状況を確認し、ss -lntp(TCP)/ss -lnup(UDP)で待受を確認します。
11) 運用チェックリスト(再現用)
- Cloudflare: A レコードが DNS only、SRV の Target/Port が正しい
- frps:
allow_portsに公開したいポートが含まれる、systemctl is-active frpsが active - frpc:
token一致、remote_portが意図した値、systemctl is-active frpcが active - Firewall: VPS で
PRIMARY_PORT/tcpが許可されている - Pelican: ノードに
0.0.0.0の割当があり、対象サーバにPRIMARY_PORTが割当&Primary - コンテナ: サーバが Running、Address が
0.0.0.0:PRIMARY_PORT(例:0.0.0.0:25570)
12) 検証例(成功パターン)
- サーバ
mc02をPRIMARY_PORT=25570で起動(Address:0.0.0.0:25570)。 - 外部到達テスト:
nc -vz MC_DOMAIN 25570→succeeded。 - Minecraft クライアント:
MC_DOMAIN:25570で入室可能。
Discussion