WireGuard Minecraft 联机教程:从入门到多种方案

本教程将指导您如何使用 WireGuard 和一台公网服务器(VPS),让您和朋友们能流畅地连接到您在家中电脑上开设的 Minecraft 服务器。


两种方案对比

您可以根据自己的需求选择最合适的方案:

模式 谁需要安装 WireGuard 优点 缺点
方案A:公网转发 仅开服的服主 简单方便,玩家像连接普通服务器一样,直接使用公网 IP 延迟略高于方案B,所有玩家的流量都经过公网服务器转发
方案B:全员组网 所有玩家 + 服主 延迟极低,如同局域网联机,连接更安全、稳定 所有玩家都需要进行 WireGuard 的基本配置

新手建议:如果您是第一次尝试,或者希望让朋友们能最简单地加入游戏,强烈推荐从 方案A 开始。


〇、准备工作

在开始之前,您需要:

  1. 一台拥有公网 IP 的云服务器(VPS),并已通过 SSH 登录。本教程以 Debian/Ubuntu 系统为例。
  2. 在您自己的电脑(作为 Minecraft 服务器)上安装好 WireGuard 客户端。
    • Windows/macOS: 从 WireGuard 官网 下载。
    • Linux: 使用包管理器安装 wireguard-tools
  3. 确保您的公网服务器防火墙(或云服务商的安全组)已放行以下端口:
    • UDP 51820 (WireGuard 默认端口)
    • TCP 25565 (Minecraft 默认端口)

一、公网服务器 (VPS) 配置

这部分操作在您的公网服务器上完成。

1. 安装 WireGuard

1
2
sudo apt update
sudo apt install wireguard -y

2. 生成服务器密钥对

1
2
3
4
5
6
# 进入 WireGuard 配置目录
sudo mkdir -p /etc/wireguard
cd /etc/wireguard

# 生成私钥和公钥
wg genkey | sudo tee privatekey | wg pubkey | sudo tee publickey
  • 重要:请记下服务器的公钥,后续配置会用到。可随时使用 sudo cat /etc/wireguard/publickey 查看。
  • 私钥已保存在 /etc/wireguard/privatekey 文件中。

3. 开启内核转发

这会让服务器能够转发网络流量,是实现联机的关键。

1
2
3
4
5
6
# 临时开启
sudo sysctl -w net.ipv4.ip_forward=1

# 永久生效 (取消 net.ipv4.ip_forward=1 前的注释)
sudo sed -i '/net.ipv4.ip_forward=1/s/^#//' /etc/sysctl.conf
sudo sysctl -p

二、方案A:公网转发 (服主配置)

此方案下,只有您(服主)需要配置 WireGuard,您的朋友可以直接连接服务器公网 IP。

步骤 1: 在【本地电脑】上生成密钥

  1. 打开您本地电脑的 WireGuard 客户端。
  2. 点击 添加空隧道...,取个名字(如 mc-server)。
  3. 客户端会自动生成一对密钥。复制界面上显示的【公钥】,我们下一步会用到。

步骤 2: 在【公网服务器】上创建配置文件

创建并编辑 /etc/wireguard/wg0.conf 文件:

1
sudo nano /etc/wireguard/wg0.conf

粘贴以下内容,并替换占位符:

  • <公网服务器私钥>: 填入 sudo cat /etc/wireguard/privatekey 的输出。
  • <本地电脑的公钥>: 填入上一步从您本地 WireGuard 客户端复制的公钥。
1
2
3
4
5
6
7
8
9
10
11
12
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <公网服务器私钥>
# 将所有发往服务器 25565 端口的 TCP 流量,转发给 IP 为 10.0.0.2 的本地电脑
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A PREROUTING -p tcp --dport 25565 -j DNAT --to-destination 10.0.0.2
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D PREROUTING -p tcp --dport 25565 -j DNAT --to-destination 10.0.0.2

[Peer]
# 这是你的本地电脑
PublicKey = <本地电脑的公钥>
AllowedIPs = 10.0.0.2/32

步骤 3: 在【本地电脑】上完成配置

回到您本地电脑的 WireGuard 客户端,编辑刚才创建的隧道配置,替换为以下内容:

  • <本地电脑的私钥>: 客户端已自动填好,无需改动。
  • <公网服务器的公钥>: 填入您在服务器上用 sudo cat /etc/wireguard/publickey 命令查看到的公钥。
  • <你的公网服务器IP>: 填入您 VPS 的实际公网 IP 地址。
1
2
3
4
5
6
7
8
9
10
11
[Interface]
PrivateKey = <本地电脑的私钥>
Address = 10.0.0.2/24
DNS = 1.1.1.1

[Peer]
# 这是你的公网服务器
PublicKey = <公网服务器的公钥>
Endpoint = <你的公网服务器IP>:51820
AllowedIPs = 10.0.0.0/24
PersistentKeepalive = 25

保存配置。

步骤 4: 启动并验证

  1. 启动服务器端:在公网服务器上执行:
    1
    2
    3
    sudo wg-quick up wg0
    # 设置开机自启
    sudo systemctl enable wg-quick@wg0
  2. 启动客户端:在您本地电脑的 WireGuard 客户端中,点击 启动
  3. 测试连通性:在本地电脑的命令行/终端中执行 ping 10.0.0.1。如果能收到回复,说明隧道已成功建立!
  4. 开始游戏:在本地电脑上启动 Minecraft 服务端。现在,所有玩家(包括您自己)都可以通过输入您的 <公网服务器IP> 来加入游戏了!

三、方案B:全员组网 (服主 + 玩家配置)

此方案下,所有人都需要安装和配置 WireGuard,共同加入一个虚拟局域网。

步骤 1: 为【每个玩家】生成密钥

您需要收集每一位玩家(也包括您自己)的 WireGuard 公钥。让他们:

  1. 安装 WireGuard 客户端。
  2. 添加空隧道...,客户端会自动生成密钥。
  3. 将界面上显示的【公钥】发给您。

步骤 2: 在【公网服务器】上创建配置文件

编辑 /etc/wireguard/wg0.conf 文件,为每个人(服主+所有玩家)添加一个 [Peer] 区块。

  • <公网服务器私钥>: 填入 sudo cat /etc/wireguard/privatekey 的输出。
  • <服主的公钥>, <玩家A的公钥>…: 填入您收集到的每个人的公钥。
  • 为每个人分配一个唯一的 IP 地址,例如服主是 10.0.0.2,玩家A是 10.0.0.3,以此类推。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <公网服务器私钥>

# --- Peer 列表 ---

# 这是服主
[Peer]
PublicKey = <服主的公钥>
AllowedIPs = 10.0.0.2/32

# 这是玩家A
[Peer]
PublicKey = <玩家A的公钥>
AllowedIPs = 10.0.0.3/32

# 这是玩家B
[Peer]
PublicKey = <玩家B的公钥>
AllowedIPs = 10.0.0.4/32

# ...可以继续添加更多玩家

步骤 3: 将【配置信息】分发给服主和玩家

您需要为每个人提供一份他们的专属配置文件。

给服主的配置 (10.0.0.2):

1
2
3
4
5
6
7
8
9
10
[Interface]
PrivateKey = <服主自己的私钥>
Address = 10.0.0.2/24
DNS = 1.1.1.1

[Peer]
PublicKey = <公网服务器的公钥>
Endpoint = <你的公网服务器IP>:51820
AllowedIPs = 10.0.0.0/24
PersistentKeepalive = 25

给玩家A的配置 (10.0.0.3):

1
2
3
4
5
6
7
8
9
10
[Interface]
PrivateKey = <玩家A自己的私钥>
Address = 10.0.0.3/24
DNS = 1.1.1.1

[Peer]
PublicKey = <公网服务器的公钥>
Endpoint = <你的公网服务器IP>:51820
AllowedIPs = 10.0.0.0/24
PersistentKeepalive = 25

注意:每个人的配置中,[Interface] 下的 PrivateKeyAddress 都是独一无二的。[Peer] 部分则完全相同。

步骤 4: 启动并验证

  1. 启动服务器端:在公网服务器上执行 sudo wg-quick up wg0 并设置开机自启。
  2. 启动各客户端:所有玩家在自己的 WireGuard 客户端中填入配置并点击 启动
  3. 测试连通性
    • 所有玩家尝试 ping 10.0.0.1 (公网服务器)。
    • 所有玩家尝试 ping 10.0.0.2 (服主)。
    • 如果都能 ping 通,说明虚拟局域网已建立成功。
  4. 开始游戏:在服主的本地电脑上启动 Minecraft 服务端。现在,所有玩家都可以通过输入服主的虚拟 IP 10.0.0.2 来加入游戏了!

四、最终检查与排错

  • 检查 WireGuard 状态:在任何一台设备上执行 sudo wg (Linux/macOS) 或在客户端界面查看 (Windows),可以看到当前的连接状态和最后一次握手时间。
  • 防火墙问题:如果无法连接,请再次检查公网服务器的防火墙/安全组是否已放行 UDP 51820 和 TCP 25565 端口。同时,检查本地电脑的防火墙是否允许 Java 程序联网。
  • Minecraft 服务器配置:为确保服务器只在安全的虚拟网络内监听,可以在 server.properties 文件中设置 server-ip=10.0.0.2 (仅对方案B推荐)。