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

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

10 - 网络配置

10.1 网络基础

10.1.1 Minecraft 网络架构

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

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

10.1.2 默认端口

服务端口协议说明
Minecraft 服务端25565TCP游戏连接
RCON25575TCP远程控制台
Query25565UDP服务器查询
Spark Web4567TCP性能监控面板

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 防火墙规则最佳实践

规则端口限制说明
SSH22特定 IP 或密钥远程管理
Minecraft25565全局游戏连接
RCON25575特定 IP远程控制台
Query25565/UDP可选服务器查询
HTTP80/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-IP3 个主机名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 解决动态 IPCloudflare 或 No-IP
DDoS 防护根据需求选择Cloudflare Spectrum 是免费首选
TCP BBR 优化网络性能Linux 内核参数优化
RCON 必须限制 IP明文协议,安全风险高

扩展阅读