强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

Minecraft PaperMC 服务器部署指南 / 10 - 网络配置

10 - 网络配置

10.1 网络基础

10.1.1 Minecraft 网络架构

玩家客户端 ──────── 互联网 ──────── 路由器 ──── 服务端
  |                                              |
  └── TCP 端口 25565 ────────────────────────────┘

局域网模式:
玩家客户端 ──── 局域网 ──── 服务端

10.1.2 默认端口

服务 端口 协议 说明
Minecraft 服务端 25565 TCP 游戏连接
RCON 25575 TCP 远程控制台
Query 25565 UDP 服务器查询
Spark Web 4567 TCP 性能监控面板

10.2 端口配置

10.2.1 修改监听端口

# server.properties

# 游戏端口
server-port=25565

# 监听地址(留空监听所有接口)
server-ip=

# RCON 远程控制
enable-rcon=false
rcon.port=25575
rcon.password=your_strong_password

# Query 协议
enable-query=false
query.port=25565

10.2.2 多服务端端口分配

服务端 1 (Survival):  25565
服务端 2 (Creative):  25566
服务端 3 (MiniGame):  25567
Velocity 代理:        25577 (前端) → 25565/25566/25567 (后端)

10.3 防火墙配置

10.3.1 UFW(Ubuntu/Debian)

# 查看防火墙状态
sudo ufw status

# 启用防火墙
sudo ufw enable

# 允许 Minecraft 端口
sudo ufw allow 25565/tcp comment "Minecraft Server"

# 允许 SSH(重要!不要把自己锁在外面)
sudo ufw allow 22/tcp comment "SSH"

# 允许 RCON(仅限特定 IP)
sudo ufw allow from 你的IP to any port 25575 proto tcp comment "RCON"

# 允许 HTTP(如果使用 Dynmap)
sudo ufw allow 80/tcp comment "Dynmap Web"

# 拒绝所有其他入站
sudo ufw default deny incoming
sudo ufw default allow outgoing

# 查看规则列表
sudo ufw status verbose

# 删除规则
sudo ufw delete allow 25575/tcp

10.3.2 firewalld(CentOS/RHEL/Fedora)

# 查看防火墙状态
sudo firewall-cmd --state

# 允许 Minecraft 端口
sudo firewall-cmd --permanent --add-port=25565/tcp
sudo firewall-cmd --permanent --add-service=ssh

# 允许 RCON(仅限特定 IP)
sudo firewall-cmd --permanent --add-rich-rule='
  rule family="ipv4"
  source address="你的IP"
  port protocol="tcp" port="25575"
  accept'

# 重新加载规则
sudo firewall-cmd --reload

# 查看当前规则
sudo firewall-cmd --list-all

10.3.3 iptables

# 允许 Minecraft 端口
sudo iptables -A INPUT -p tcp --dport 25565 -j ACCEPT

# 允许 SSH
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 允许已建立的连接
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 允许回环
sudo iptables -A INPUT -i lo -j ACCEPT

# 拒绝其他入站
sudo iptables -A INPUT -j DROP

# 保存规则(Debian/Ubuntu)
sudo iptables-save > /etc/iptables/rules.v4

# 保存规则(CentOS/RHEL)
sudo service iptables save

10.3.4 防火墙规则最佳实践

规则 端口 限制 说明
SSH 22 特定 IP 或密钥 远程管理
Minecraft 25565 全局 游戏连接
RCON 25575 特定 IP 远程控制台
Query 25565/UDP 可选 服务器查询
HTTP 80/443 按需 Web 地图等

警告:永远不要开放 RCON 给所有 IP。RCON 使用明文密码,容易被暴力破解。


10.4 路由器端口转发

10.4.1 端口转发步骤

1. 登录路由器管理页面(通常为 192.168.1.1 或 192.168.0.1)
2. 找到端口转发/虚拟服务器设置
3. 添加规则:
   - 外部端口: 25565
   - 内部端口: 25565
   - 内部 IP: 192.168.x.x(服务器局域网 IP)
   - 协议: TCP
4. 保存并重启路由器

10.4.2 常见路由器品牌

品牌 设置路径
TP-Link 高级设置 → NAT 转发 → 虚拟服务器
华为 更多功能 → 网络设置 → 端口映射
小米 高级设置 → 端口转发
ASUS 高级设置 → WAN → 虚拟服务器/端口转发
Netgear 高级 → 高级设置 → 端口转发

10.4.3 验证端口是否开放

# 从外部测试端口
# 使用在线工具:https://www.yougetsignal.com/tools/open-ports/

# 或使用命令行
nc -zv your_public_ip 25565

# 使用 nmap
nmap -p 25565 your_public_ip

# 使用 curl
curl -s https://api.mcsrvstat.us/2/your_public_ip:25565

10.5 DDNS 动态域名

家用宽带通常没有固定公网 IP,需要 DDNS 来自动更新域名解析。

10.5.1 常用 DDNS 服务

服务 免费额度 域名格式 说明
No-IP 3 个主机名 xxx.ddns.net 老牌服务
Dynu 无限 xxx.dynu.net 免费额度大
Cloudflare 无限 你的域名 需自有域名
阿里云 DDNS 需域名 你的域名 国内首选
花生壳 1 个 xxx.oray.com 国内老牌

10.5.2 Cloudflare DDNS 脚本

#!/bin/bash
# cloudflare-ddns.sh - Cloudflare 动态 DNS 更新脚本

# ============ 配置 ============
CF_API_TOKEN="your_cloudflare_api_token"
CF_ZONE_ID="your_zone_id"
CF_RECORD_NAME="mc.yourdomain.com"
CF_RECORD_ID=""      # 首次留空,运行后自动获取

# ============ 获取当前公网 IP ============
CURRENT_IP=$(curl -s https://api.ipify.org)
echo "当前公网 IP: ${CURRENT_IP}"

# ============ 获取记录 ID ============
if [ -z "$CF_RECORD_ID" ]; then
    CF_RECORD_ID=$(curl -s -X GET \
        "https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/dns_records?type=A&name=${CF_RECORD_NAME}" \
        -H "Authorization: Bearer ${CF_API_TOKEN}" \
        -H "Content-Type: application/json" \
        | python3 -c "import json,sys; print(json.load(sys.stdin)['result'][0]['id'])")
    echo "记录 ID: ${CF_RECORD_ID}"
fi

# ============ 更新 DNS 记录 ============
curl -s -X PUT \
    "https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/dns_records/${CF_RECORD_ID}" \
    -H "Authorization: Bearer ${CF_API_TOKEN}" \
    -H "Content-Type: application/json" \
    --data "{
        \"type\": \"A\",
        \"name\": \"${CF_RECORD_NAME}\",
        \"content\": \"${CURRENT_IP}\",
        \"ttl\": 60,
        \"proxied\": false
    }" | python3 -m json.tool

echo "DNS 更新完成: ${CF_RECORD_NAME}${CURRENT_IP}"
# 每 5 分钟更新一次
crontab -e
*/5 * * * * /opt/minecraft/scripts/cloudflare-ddns.sh >> /var/log/ddns.log 2>&1

10.6 DDoS 防护

10.6.1 DDoS 攻击类型

攻击类型 说明 影响
SYN Flood 大量 TCP SYN 包 耗尽连接表
UDP Flood 大量 UDP 包 耗尽带宽
连接 Flood 大量合法连接 耗尽服务端资源
协议攻击 利用 Minecraft 协议 崩服或卡顿
放大攻击 利用 Query 协议 反射放大

10.6.2 基础防护措施

# 1. 启用 TCP SYN Cookie
echo 1 | sudo tee /proc/sys/net/ipv4/tcp_syncookies

# 2. 调整 TCP 连接队列
echo 65535 | sudo tee /proc/sys/net/ipv4/tcp_max_syn_backlog
echo 65535 | sudo tee /proc/sys/net/core/somaxconn

# 3. 启用 fail2ban
sudo apt install fail2ban

10.6.3 fail2ban 配置

# /etc/fail2ban/jail.d/minecraft.conf

[minecraft]
enabled = true
filter = minecraft
action = iptables-allports[name=minecraft]
logpath = /opt/minecraft/paper/logs/latest.log
maxretry = 5
findtime = 300
bantime = 3600
# /etc/fail2ban/filter.d/minecraft.conf

[Definition]
failregex = ^.*Connection reset by.*<HOST>.*$
            ^.*<HOST>.*lost connection.*$
ignoreregex =
sudo systemctl restart fail2ban
sudo fail2ban-client status minecraft

10.6.4 云 DDoS 防护服务

服务 价格 防护能力 说明
Cloudflare Spectrum 免费起 推荐,支持 TCP 代理
TCPShield 免费起 Minecraft 专用
CosmicGuard 付费 游戏专用
AWS Shield 按量 云服务商防护
OVH DDoS 内置 服务器自带

10.6.5 Cloudflare Spectrum 配置

# Spectrum 可以代理 Minecraft 的 TCP 流量
# 1. 登录 Cloudflare 控制台
# 2. 进入 Spectrum 页面
# 3. 添加应用:
#    - 应用类型: Minecraft
#    - 源 IP: 你的服务器 IP
#    - 源端口: 25565
#    - 边缘端口: 25565
# 4. 更新 DNS 记录指向 Spectrum

10.7 网络性能优化

10.7.1 TCP 优化

# /etc/sysctl.conf

# 增大 TCP 缓冲区
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

# 启用 TCP BBR 拥塞控制
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

# 启用 TCP Fast Open
net.ipv4.tcp_fastopen = 3

# 应用设置
sudo sysctl -p

10.7.2 验证 BBR

# 检查 BBR 是否启用
sysctl net.ipv4.tcp_congestion_control
# 输出应为:net.ipv4.tcp_congestion_control = bbr

# 检查 BBR 模块
lsmod | grep bbr

10.8 SSL/TLS 与加密

10.8.1 Minecraft 协议加密

Minecraft 协议本身已内置加密(正版登录时),但以下场景需要额外加密:

  • RCON 连接(明文传输)
  • Web 面板(HTTP → HTTPS)
  • 代理与后端通信

10.8.2 Velocity 代理加密

# velocity.toml

[advanced]
# 启用现代密钥交换
modern-key-encryption = true
# 启用玩家信息转发
player-info-forwarding = "modern"
# 密钥文件
forwarding-secret-file = "forwarding.secret"

10.9 IPv6 配置

10.9.1 启用 IPv6

# server.properties
server-ip=::
# 或指定 IPv4/IPv6 双栈
# server-ip=0.0.0.0 (仅 IPv4)
# 检查 IPv6 连通性
ping6 your_server_ipv6

# 防火墙允许 IPv6
sudo ufw allow from ::/0 to any port 25565 proto tcp

10.10 网络诊断

10.10.1 诊断命令

# 检查端口监听
ss -tlnp | grep 25565
netstat -tlnp | grep 25565

# 检查网络连接数
ss -s

# 检查带宽使用
iftop -i eth0

# 测试到服务器的延迟
ping your_server_ip
mtr your_server_ip

# 测试 Minecraft 连接
# 使用 mcsrvstat
curl -s https://api.mcsrvstat.us/2/your_server_ip:25565 | python3 -m json.tool

10.10.2 常见网络问题

问题 可能原因 解决方案
连接超时 防火墙/端口未转发 检查防火墙和路由器设置
连接被重置 服务器过载或崩溃 检查服务器状态和日志
高延迟 网络拥塞或路由问题 使用 MTR 追踪路由
间歇性断开 网络不稳定 检查服务器网卡和交换机
连接数限制 Too many connections 调整 max-players 和连接限流

10.11 本章小结

要点 说明
防火墙是最基本的保护 UFW/firewalld 必须配置
端口转发用于家庭网络 路由器需要配置转发规则
DDNS 解决动态 IP Cloudflare 或 No-IP
DDoS 防护根据需求选择 Cloudflare Spectrum 是免费首选
TCP BBR 优化网络性能 Linux 内核参数优化
RCON 必须限制 IP 明文协议,安全风险高

扩展阅读