Files
FunConnect/docs/NO_PUBLIC_IP.md

219 lines
4.6 KiB
Markdown
Raw Permalink Normal View History

# 无公网 IP 部署方案
如果你的服务器没有公网 IP比如家庭宽带、公司内网可以使用以下方案
## 方案一:使用云服务器(推荐)
购买一台云服务器阿里云、腾讯云、AWS 等),价格低至几十元/月:
```bash
# 在云服务器上一键部署
2026-02-25 20:35:01 +08:00
curl -fsSL https://gt.funmc.cn/xiaobai/FunConnect/raw/main/deploy.sh | bash
```
优点:
- 稳定可靠24小时在线
- 有固定公网 IP
- 部署简单
## 方案二:使用内网穿透工具
### 使用 frp免费开源
1. **在有公网 IP 的服务器上部署 frps**
```bash
# 下载 frp
wget https://github.com/fatedier/frp/releases/download/v0.52.0/frp_0.52.0_linux_amd64.tar.gz
tar -xzf frp_0.52.0_linux_amd64.tar.gz
cd frp_0.52.0_linux_amd64
# 配置 frps.toml
cat > frps.toml << 'EOF'
bindPort = 7000
auth.token = "your_secret_token"
EOF
# 启动
./frps -c frps.toml
```
2. **在内网服务器上部署 frpc + FunMC**
```bash
# 先部署 FunMC
docker-compose up -d
# 配置 frpc.toml
cat > frpc.toml << 'EOF'
serverAddr = "你的frps服务器IP"
serverPort = 7000
auth.token = "your_secret_token"
[[proxies]]
name = "funmc-api"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3000
remotePort = 3000
[[proxies]]
name = "funmc-quic"
type = "udp"
localIP = "127.0.0.1"
localPort = 3001
remotePort = 3001
[[proxies]]
name = "funmc-relay1"
type = "udp"
localIP = "127.0.0.1"
localPort = 7900
remotePort = 7900
[[proxies]]
name = "funmc-relay2"
type = "udp"
localIP = "127.0.0.1"
localPort = 7901
remotePort = 7901
EOF
# 启动 frpc
./frpc -c frpc.toml
```
### 使用 Cloudflare Tunnel免费
适合只需要 HTTP/WebSocket 的场景(不支持 UDP中继功能需要单独处理
```bash
# 安装 cloudflared
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o cloudflared
chmod +x cloudflared
# 登录
./cloudflared tunnel login
# 创建隧道
./cloudflared tunnel create funmc
# 配置
cat > ~/.cloudflared/config.yml << 'EOF'
tunnel: funmc
credentials-file: ~/.cloudflared/<tunnel-id>.json
ingress:
- hostname: funmc.your-domain.com
service: http://localhost:3000
- service: http_status:404
EOF
# 添加 DNS 记录
./cloudflared tunnel route dns funmc funmc.your-domain.com
# 启动
./cloudflared tunnel run funmc
```
**注意**: Cloudflare Tunnel 不支持 UDP中继服务器需要单独使用 frp 或其他方案。
### 使用 Ngrok简单但有限制
```bash
# 安装
curl -s https://ngrok-agent.s3.amazonaws.com/ngrok.asc | sudo tee /etc/apt/trusted.gpg.d/ngrok.asc
echo "deb https://ngrok-agent.s3.amazonaws.com buster main" | sudo tee /etc/apt/sources.list.d/ngrok.list
sudo apt update && sudo apt install ngrok
# 配置 token
ngrok config add-authtoken <your-token>
# 启动(免费版每次地址会变)
ngrok http 3000
```
## 方案三:使用 ZeroTier/Tailscale 组建虚拟局域网
适合小团队内部使用:
### Tailscale
```bash
# 服务器和所有客户端都安装 Tailscale
curl -fsSL https://tailscale.com/install.sh | sh
tailscale up
# 使用 Tailscale 分配的内网 IP 访问
# 例如100.x.x.x:3000
```
### ZeroTier
```bash
# 安装
curl -s https://install.zerotier.com | sudo bash
# 加入网络
sudo zerotier-cli join <network-id>
# 使用 ZeroTier 分配的内网 IP
```
## 方案四:端口映射(如果路由器支持)
如果你的宽带有公网 IP可能是动态的
1. 登录路由器管理页面
2. 找到 "端口映射" 或 "虚拟服务器" 或 "NAT"
3. 添加映射规则:
- 外部端口 3000 -> 内部 IP:3000 (TCP)
- 外部端口 3001 -> 内部 IP:3001 (UDP)
- 外部端口 7900 -> 内部 IP:7900 (UDP)
- 外部端口 7901 -> 内部 IP:7901 (UDP)
4. 使用动态 DNSDDNS获取固定域名
- 花生壳
- No-IP
- DuckDNS
## 配置客户端连接
无论使用哪种方案,都需要更新 FunMC 服务器配置:
```bash
# 编辑 .env 文件
nano /opt/funmc/.env
# 设置为穿透后的公网地址
SERVER_IP=frps服务器IP
# 或者设置域名
SERVER_DOMAIN=funmc.your-domain.com
```
然后重启服务:
```bash
docker-compose restart
```
## 客户端连接流程
1. 客户端启动时会显示服务器连接页面
2. 输入穿透后的地址(如 `frps服务器IP:3000``funmc.your-domain.com`
3. 客户端会自动获取服务器配置
4. 之后每次启动都会自动连接
## 推荐方案
| 场景 | 推荐方案 |
|------|---------|
| 生产环境/公开服务 | 云服务器 |
| 个人/小团队 | frp + 便宜云服务器 |
| 内部测试 | Tailscale/ZeroTier |
| 临时使用 | Ngrok |
---
**魔幻方开发** - 让 Minecraft 联机变得简单