门店数量增加后,摄像头、收银机、考勤设备、打印机和本地服务往往分散在不同网络中。总部如果依赖公网端口映射逐台访问,会产生端口冲突、暴露面扩大、地址变化难追踪等问题;如果让每个门店彼此全连接,配置数量又会随着门店数量快速增加。
一个更容易维护的方案是“总部作为中心、门店作为节点”的虚拟专用网络。门店只需要与总部建立一条加密隧道,跨门店访问和总部访问都经过统一的路由与审计入口。本文使用 WireGuard 演示这一模型。示例假定总部有一台 Linux 云主机或机房服务器,公网地址为 203.0.113.10,总部内网为 10.10.0.0/24,一号门店内网为 10.21.0.0/24。
文中的公网地址属于文档示例地址,实际部署时必须替换为真实地址。不同 Linux 发行版的软件包名称和防火墙工具可能不同,命令需要结合系统环境调整。
设计原理
WireGuard 为每个节点分配一组密钥,并通过 UDP 传输加密后的 IP 数据包。配置中的 PublicKey 用来识别对端,AllowedIPs 同时承担两项职责:它描述允许从该对端接收的地址范围,也参与出站路由选择。
中心节点可以使用一个独立的隧道网段,例如 10.200.0.0/24。总部节点使用 10.200.0.1,一号门店使用 10.200.0.11。总部配置中,将 10.21.0.0/24 指向门店节点;门店配置中,将总部内网和其他需要经过总部转发的网段指向总部节点。
这里有一个容易忽略的边界:隧道建立成功,不代表业务网段已经打通。数据包还要经过以下路径:
- 客户端把目标地址交给本地路由表。
- WireGuard 根据
AllowedIPs选择对端。 - 对端主机解密后,根据内核路由表转发数据包。
- 目标网段的设备必须知道返回路径,或者由网关执行源地址转换。
如果门店路由器支持添加静态路由,推荐使用明确的双向路由,保留真实源地址。如果无法修改门店网关,可以在门店节点执行受控的 SNAT,但这样会损失部分源地址信息。
地址与权限规划
先为每个节点建立台账,至少记录以下内容:
| 节点 | 隧道地址 | 本地业务网段 | 允许访问的远端网段 |
|---|---|---|---|
| 总部 | 10.200.0.1/24 |
10.10.0.0/24 |
10.21.0.0/24 |
| 一号门店 | 10.200.0.11/24 |
10.21.0.0/24 |
10.10.0.0/24 |
不要让所有节点都使用过大的 AllowedIPs,例如直接配置成 0.0.0.0/0。这种配置会接管默认路由,适用于明确需要全流量回总部的场景,但会改变节点的上网路径、DNS 行为和故障边界。门店互联通常只声明必要的业务网段。
配置中心节点
在支持 WireGuard 的 Linux 系统上安装工具。以 Debian 系为例:
sudo apt update
sudo apt install wireguard
sudo install -d -m 700 /etc/wireguard
umask 077
wg genkey | sudo tee /etc/wireguard/server.key | wg pubkey | sudo tee /etc/wireguard/server.pub
查看中心节点公钥,并通过安全方式交给门店节点配置使用:
sudo cat /etc/wireguard/server.pub
创建 /etc/wireguard/wg0.conf:
[Interface]
Address = 10.200.0.1/24
ListenPort = 51820
PrivateKey = <读取 /etc/wireguard/server.key 的内容>
# 仅在确实需要转发时启用
PostUp = sysctl -w net.ipv4.ip_forward=1
[Peer]
# 一号门店的公钥
PublicKey = <store-01-public-key>
AllowedIPs = 10.200.0.11/32, 10.21.0.0/24
配置文件权限应限制为 root 可读:
sudo chmod 600 /etc/wireguard/wg0.conf
sudo systemctl enable --now wg-quick@wg0
sudo wg show
公网防火墙还需要允许 UDP 51820 入站。这个端口只是示例,实际端口可按安全策略调整。不要把管理端口、数据库端口等业务服务端口直接暴露到公网。
配置门店节点
门店节点生成自己的密钥:
umask 077
wg genkey | sudo tee /etc/wireguard/store.key | wg pubkey | sudo tee /etc/wireguard/store.pub
门店配置示例:
[Interface]
Address = 10.200.0.11/24
PrivateKey = <读取 /etc/wireguard/store.key 的内容>
[Peer]
PublicKey = <总部公钥>
Endpoint = 203.0.113.10:51820
AllowedIPs = 10.10.0.0/24, 10.200.0.0/24
PersistentKeepalive = 25
PersistentKeepalive 对位于 NAT 后面的门店节点通常有帮助,它让节点周期性发送保活流量,从而减少 NAT 映射过期的影响。它不是所有网络都必须配置的选项,具体间隔应根据 NAT 设备和网络策略调整。
把门店公钥和业务网段加入中心节点后,启动门店接口:
sudo chmod 600 /etc/wireguard/wg0.conf
sudo systemctl enable --now wg-quick@wg0
sudo wg show
ip route
打通业务网段
如果门店节点本身就是门店网络的网关,启用 IPv4 转发:
sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -w net.ipv4.conf.all.src_valid_mark=1
长期配置应写入系统的 sysctl 配置文件,并通过系统工具重新加载。不要只依赖启动脚本中的临时命令,否则重启后可能恢复默认值。
推荐的无 NAT 方式是:在门店局域网网关添加静态路由,将 10.10.0.0/24 指向门店 WireGuard 节点的局域网地址;在总部网关添加静态路由,将 10.21.0.0/24 指向总部 WireGuard 节点。这样业务服务器能够看到真实的远端地址,防火墙也可以按门店或设备网段授权。
如果门店网关无法配置路由,可以在门店节点使用 SNAT。下面仅展示规则结构,接口名和内网出口必须按实际情况替换:
sudo nft add table ip wg_nat
sudo nft 'add chain ip wg_nat postrouting { type nat hook postrouting priority 100; policy accept; }'
sudo nft add rule ip wg_nat postrouting oifname "eth1" ip saddr 10.200.0.0/24 ip daddr 10.21.0.0/24 masquerade
生产环境应把规则写入持久化防火墙配置,并限制允许转发的源、目的地址和端口。仅仅打开转发开关,会把隧道节点变成过于宽松的路由器。
上线验证
验证应从底层到业务层逐级进行:
- 在两端执行
wg show,确认存在最新握手时间和收发字节数。 - 从门店节点
ping 10.200.0.1,验证隧道地址连通性。 - 从总部节点访问门店网关或测试主机,例如
ping 10.21.0.1。 - 使用
traceroute或tracepath检查路径是否经过预期节点。 - 最后验证具体业务端口,例如
nc -vz 10.21.0.20 8080。
ICMP 不通不一定意味着业务端口不可用,因为目标主机可能禁用了 ICMP。反过来,隧道握手成功也不能证明 TCP 服务、应用认证和返回路由正常。
常见问题
能握手,但访问不了门店设备
优先检查 AllowedIPs、内核转发开关、两端路由和防火墙转发链。尤其要确认门店设备的默认网关是否知道返回 10.10.0.0/24 的路径。没有返回路由时,使用正确的 SNAT 只能作为受控兼容方案。
wg show 没有最新握手
检查中心节点 UDP 端口是否放行,门店出口是否限制 UDP,Endpoint 是否填写正确,以及系统时间是否严重偏差。若节点位于 NAT 后,检查是否需要 PersistentKeepalive。
配置多个门店后互相串线
中心节点每个门店都必须使用独立的隧道地址和不重叠的业务网段。中心配置中的 AllowedIPs 不能让两个 Peer 声明相同的目标前缀,否则路由归属会变得不明确。
更换设备后无法连接
不要复制旧节点的私钥到新设备。为新节点生成新密钥,并在中心配置中替换公钥与地址映射;确认旧公钥已撤销。密钥文件不应写入代码仓库、工单公开区域或普通日志。
是否需要把所有流量回传总部
只有在总部需要统一出口、统一审计或统一 DNS 时才考虑全流量模式。启用前要评估带宽、延迟、单点故障和地址转换策略。单纯为了访问总部业务网段,不需要接管门店默认路由。
总结
多门店互联的难点不在于启动一个隧道,而在于把地址规划、路由返回、防火墙权限和运维台账同时设计清楚。WireGuard 负责加密和节点识别,Linux 路由负责决定数据包去向,网关配置负责让业务流量形成闭环。
落地时建议先接入一个测试门店,完成握手、隧道地址、业务网段和具体端口四级验证,再复制配置模板扩展节点。每增加一个门店,都应分配唯一地址、独立密钥、明确的允许网段和撤销记录;这样网络规模增长时,故障定位和权限收敛仍然可控。