WireGuard VPN 隧道配置

本教程详细讲解如何从零搭建 WireGuard VPN,并在其中实现 Samba 文件共享,让 Windows 与 Android 客户端可在虚拟局域网内访问服务器共享目录

先解释一下 WireGuard 服务与命令详细对照表:

[!IMPORTANT]

本文当中的配置文件是:wg0.conf 命名

systemctl基本操作可以跳过不看

命令 / 服务名 作用说明 适用场景 常见输出(或效果) 注意事项
/etc/wireguard/wg0.conf WireGuard 的配置文件路径。wg0 是接口名 默认配置位置(可以有多个,如 wg0.conf、wg1.conf) 文件中定义 [Interface][Peer] 文件名的前缀决定接口名(wg0.conf → 接口 wg0)
wg-quick up wg0 手动启动 WireGuard 接口 wg0(读取 /etc/wireguard/wg0.conf 测试配置是否正确、临时启动 输出类似:[#] ip link add wg0 type wireguard[#] wg setconf wg0 ... ⚠️ 若 systemd 已经启动过,不要重复执行,否则会提示 “wg0 already exists”
wg-quick down wg0 手动关闭接口 wg0(移除虚拟网卡并撤销 NAT 规则) 停止连接、修改配置后重启前使用 输出:[#] ip link delete dev wg0 ⚠️ 这会断开所有连接。建议修改配置后执行 down→up
wg-quick@wg0.service systemd 中对应的服务名(由 wg0.conf 自动映射) 设置为开机自启、统一管理 systemctl 中可查看状态 命名规则固定:wg-quick@配置名.service
systemctl start wg-quick@wg0 启动 wg0 接口并托管为 systemd 服务 生产环境下启动 WireGuard 若成功会输出 “active (exited)” 等价于 wg-quick up wg0,但更规范
systemctl stop wg-quick@wg0 停止 wg0 接口 想关闭隧道或修改配置 状态变为 “inactive (dead)” 等价于 wg-quick down wg0
systemctl restart wg-quick@wg0 先 stop 再 start,一键重启 修改 wg0.conf 后重新加载 重新建立所有连接 推荐方式,安全无残留
systemctl status wg-quick@wg0 查看当前状态 排查连接问题 显示 active/inactive、错误日志 若失败,结合 journalctl -xeu wg-quick@wg0 看详情
systemctl enable wg-quick@wg0 设置 wg0 开机自启 希望系统启动后自动连线 创建符号链接:multi-user.target.wantswg-quick@.service 常配合 --now 同时启动
systemctl disable wg-quick@wg0 取消开机自启 临时关闭自动连接 删除符号链接 不影响当前连接,只影响下次开机
systemctl enable --now wg-quick@wg0 开机自启 + 立即启动 一步完成部署 启动成功后 active 最常用组合命令
systemctl is-enabled wg-quick@wg0 检查是否启用了开机自启 验证配置 输出 enableddisabled -
sudo wg 查看 WireGuard 实时状态 检查握手、流量、Peer 状态 显示每个 Peer 的公钥、传输量、最近握手 不修改任何配置,只读
sudo wg show all 显示所有接口状态 多隧道场景(wg0、wg1等) 多个接口的连接详情 -
ip addr show wg0 查看 wg0 网络接口 确认是否成功创建虚拟网卡 显示 wg0 的 IP(如 10.10.10.1/24) 若无此接口说明没成功 up
sudo ip link del wg0 强制删除残留接口 “wg0 already exists” 报错时 删除接口无输出 慎用,仅当隧道异常卡死时使用
journalctl -xeu wg-quick@wg0 查看 systemd 日志 启动失败排错 显示详细错误(网卡名、iptables、权限) 配置语法错误或网卡名错可在此发现

一、服务器环境准备

[!IMPORTANT]

所有命令均是在root用户下执行的

1. 安装 WireGuard
1
2
apt update
apt install -y wireguard wireguard-tools
2. 生成密钥对
1
cd /etc/wireguard
1
umask 077
1
wg genkey | tee server_private.key | wg pubkey > server_public.key

查看密钥:

1
2
cat server_private.key #私钥
cat server_public.key #公钥

[!IMPORTANT]

假如服务器的密钥为:

公钥:222222222
私钥:111111111

3.开放服务器安全组规则(如果不需要samba可跳过)
端口号 协议 用途说明 方向 备注
51820 UDP WireGuard VPN 隧道通信端口 入站 / 出站 必须在安全组中开放 UDP 51820
137 UDP Samba NetBIOS 名称解析 入站 / 出站 Windows 共享依赖
138 UDP Samba NetBIOS 数据报服务 入站 / 出站 旧版 SMB 通信使用
139 TCP Samba NetBIOS 会话服务 (SMB over NetBIOS) 入站 / 出站 SMB1/SMB2 文件共享使用
445 TCP Samba 直接文件共享 (SMB over TCP) 入站 / 出站 新版 Windows 文件共享核心端口

4. 编辑服务器配置
1
vim /etc/wireguard/wg0.conf
1
2
3
4
5
6
7
8
[Interface]
Address = 10.10.10.1/24
ListenPort = 51820
PrivateKey = 111111111(服务器私钥server_private.key)

# 开启转发与 NAT
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
5. 保持 ip_forward + NAT 恒定(永久启用 IP 转发功能)
1
echo "net.ipv4.ip_forward=1" | tee -a /etc/sysctl.conf
1
sysctl -p
6. 启动 WireGuard
1
systemctl enable --now wg-quick@wg0

运行状态:

1
systemctl status wg-quick@wg0

确认监听端口:

1
wg show

二、客户端配置

1.Windows 客户端

安装 WireGuard 官方客户端

1
https://download.wireguard.com/windows-client/wireguard-installer.exe

在客户端点击「添加隧道」→「添加空白隧道」→ 自动生成密钥

示例

1
2
3
4
5
6
7
8
[Interface]
PrivateKey = <Windows私钥,自动生成的>
Address = 10.10.10.2/24

[Peer]
PublicKey = 222222222(服务器公钥)
Endpoint = <服务器公网IP>:51820
AllowedIPs = 10.10.10.0/24

在服务器添加 Windows客户端 Peer

1
vim /etc/wireguard/wg0.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[Interface]
Address = 10.10.10.1/24
ListenPort = 51820
PrivateKey = 111111111(服务器私钥server_private.key)

# 开启转发与 NAT
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

# 添加:------------------------------------------------👇------------------------------------------------
# Windows 客户端
[Peer]
PublicKey = Windows客户端公钥(上面图片红框内容)
AllowedIPs = 10.10.10.2/32
# 每 25 秒自动发一个空包(keepalive) 给服务器,防掉线
PersistentKeepalive = 25

保存并重启服务:

1
systemctl restart wg-quick@wg0
2.Android 客户端

安装应用:WireGuard(Play 商店 / F-Droid)

打开软件 → 点击加号 → 手动创建

在服务器添加安卓客户端 Peer

1
vim /etc/wireguard/wg0.conf
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.10.10.1/24
ListenPort = 51820
PrivateKey = 111111111(服务器私钥server_private.key)

# 开启转发与 NAT
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

# Windows 客户端
[Peer]
PublicKey = Windows客户端公钥
AllowedIPs = 10.10.10.2/32
# 每 25 秒自动发一个空包(keepalive) 给服务器,防掉线
PersistentKeepalive = 25

# 添加:------------------------------------------------👇------------------------------------------------
# 安卓客户端
[Peer]
PublicKey = 安卓客户端公钥(上面图片红框内容)
AllowedIPs = 10.10.10.3/32
# 每 25 秒自动发一个空包(keepalive) 给服务器,防掉线
PersistentKeepalive = 25
1
systemctl restart wg-quick@wg0
CIDR 地址与 WireGuard 配置总结表:
类型 示例 说明
网络范围 10.10.10.0/24 表示整个子网(包含 .0.255 的所有地址)
网络号(Network ID) 10.10.10.0 网络的起点,不能分配给设备
服务器地址 10.10.10.1 可分配地址,通常用作 VPN 服务端
客户端地址 10.10.10.210.10.10.3 可分配给客户端设备
广播地址(Broadcast) 10.10.10.255 网络的广播目标,不能分配给设备
CIDR 关键点解释:
概念 含义 示例 说明
/24 掩码 255.255.255.0 10.10.10.0/24 同一网段最多 254 个主机
/32 单一 IP 地址 10.10.10.2/32 表示“仅此一台主机”
网络号对齐规则 网络号必须与掩码对齐 10.10.10.0/24
10.10.10.1/24
.1/24 无效,因为 .1 不是合法的网络号
10.10.10.1/24 错误原因 表示“以 .1 为网络号的网段”,违反对齐规则 会导致 WireGuard 报错(Android 最严格)
WireGuard 正确配置示例:
角色 段落 正确配置 说明
服务器 [Interface] Address = 10.10.10.1/24 服务器在该子网中
服务器 [Peer] (客户端) AllowedIPs = 10.10.10.2/32 仅允许该客户端地址
客户端 [Interface] Address = 10.10.10.2/24 客户端属于同一子网
客户端 [Peer] (服务器) AllowedIPs = 10.10.10.0/24 可访问整个 VPN 子网,包括服务器 10.10.10.1
总结:

10.10.10.0/24 是整个 VPN 网段
服务器 10.10.10.1 只是其中的一台主机
因此凡是使用 /24 时,网络号必须以 .0 结尾


三、Samba 文件共享配置(不需要可跳过)

1. 安装 Samba
1
apt install -y samba
2. 配置用户

[!IMPORTANT]

huishao用户名,替换自己的用户

1
adduser huishao(如果已有用户可不创建,可跳过)
1
smbpasswd -a huishao(添加用户到组,必须)
3. 编辑配置文件
1
vim /etc/samba/smb.conf

[!IMPORTANT]

以下配置不固定,可随机设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[global]
workgroup = WORKGROUP
server string = Samba Server
security = user
map to guest = Bad User
server min protocol = SMB2
client min protocol = SMB2
ntlm auth = yes

[opt]
path = /opt
browseable = yes
writable = yes
read only = no
guest ok = no
public = no
valid users = huishao
force user = huishao
create mask = 0777
directory mask = 0777
comment = Full Access to /opt

保存并测试:

1
2
testparm
systemctl restart smbd nmbd

四、客户端访问共享

1.Windows

在资源管理器中输入:

1
\10.10.10.1\opt
2.Android

安装「X-plore 文件管理器」或「Solid Explorer」
选择 → 网络 → 添加 SMB →
主机:10.10.10.1


WireGuard VPN 隧道配置
https://huishao.fun/WireGuard配置/
作者
huishao
发布于
2025年10月10日
许可协议