👉 “群晖 + Linux 路由节点 + WireGuard + FRR
一、整体架构(你要实现的其实是这个)
┌───────────────┐
│ 群晖 NAS │
│ WireGuard入口 │
│ 10.13.13.1 │
└──────┬────────┘
│
(VPN隧道)
│
┌──────▼────────┐
│ Linux 路由节点 │ ← 核心控制面
│ WG + FRR + ACL│
│ 10.13.13.2 │
└──────┬────────┘
┌─────────────┼─────────────┐
│ │ │
内网A段 内网B段 云/远程节点
192.168.10.0 10.10.0.0 动态接入
│ 群晖 NAS │
│ WireGuard入口 │
│ 10.13.13.1 │
└──────┬────────┘
│
(VPN隧道)
│
┌──────▼────────┐
│ Linux 路由节点 │ ← 核心控制面
│ WG + FRR + ACL│
│ 10.13.13.2 │
└──────┬────────┘
┌─────────────┼─────────────┐
│ │ │
内网A段 内网B段 云/远程节点
192.168.10.0 10.10.0.0 动态接入
核心设计思想(重点)
你这个方案的本质是三层解耦:
1️⃣ 群晖(控制面入口)
只干一件事:
- 接入客户端(WireGuard)
- 不参与路由决策
- 不做ACL
👉 相当于:VPN Gateway
2️⃣ Linux 路由节点(数据面核心)
跑三样东西:
✔ WireGuard
- 负责隧道
✔ FRRouting
- 跑 BGP / OSPF
- 自动学习路由
✔ ACL(iptables / nftables)
- 控制谁能访问谁(零信任)
👉 相当于:SDN Router / 控制器
3️⃣ 各业务网段
- 不需要改配置
- 路由由 FRR 下发
WireGuard 拆分设计(关键点)
不要做“全互通”,而是:
👉 Hub-Spoke + 路由控制
群晖 wg0.conf(精简)
[Interface]
Address = 10.13.13.1/24
ListenPort = 51820
PrivateKey = xxx
Address = 10.13.13.1/24
ListenPort = 51820
PrivateKey = xxx
[Peer]
# Linux路由节点
PublicKey = xxx
AllowedIPs = 10.13.13.2/32
Linux 路由节点 wg0.conf
[Interface]
Address = 10.13.13.2/24
PrivateKey = xxx
Address = 10.13.13.2/24
PrivateKey = xxx
[Peer]
# 群晖
PublicKey = xxx
Endpoint = 群晖公网IP:51820
AllowedIPs = 10.13.13.1/32
PersistentKeepalive = 25
👉 注意:
AllowedIPs 不要写 0.0.0.0/0!
否则你后面 FRR 没法玩。
FRR(BGP)核心配置
安装:
apt install frr -y
/etc/frr/frr.conf
router bgp 65001
bgp router-id 10.13.13.2
bgp router-id 10.13.13.2
neighbor 10.13.13.1 remote-as 65000
# 宣告本地网络
network 192.168.10.0/24
network 10.10.0.0/24
👉 如果后面有多个节点:
neighbor 10.13.13.3 remote-as 65002
neighbor 10.13.13.4 remote-as 65003
neighbor 10.13.13.4 remote-as 65003
ACL(零信任核心)
这里才是你这个架构的“灵魂”。
示例:只允许访问某个网段
# 允许访问服务器
iptables -A FORWARD -s 10.13.13.0/24 -d 192.168.10.10 -j ACCEPT
iptables -A FORWARD -s 10.13.13.0/24 -d 192.168.10.10 -j ACCEPT
# 禁止访问整个内网
iptables -A FORWARD -s 10.13.13.0/24 -d 192.168.10.0/24 -j DROP
更高级(按用户隔离)
# peer1 只能访问 A网段
iptables -A FORWARD -s 10.13.13.10 -d 192.168.10.0/24 -j ACCEPT
iptables -A FORWARD -s 10.13.13.10 -d 192.168.10.0/24 -j ACCEPT
# peer2 只能访问 B网段
iptables -A FORWARD -s 10.13.13.11 -d 10.10.0.0/24 -j ACCEPT
👉 这就是:
👉 “零信任 VPN”(ZTNA)
不是连进来就全通,而是:
- 谁 → 能访问 → 哪个资源
关键进阶
1️⃣ 多网段自动学习(FRR)
以后你加一个新网段:
network 172.16.1.0/24
👉 所有节点自动知道
2️⃣ 动态节点(像 n2n 一样灵活)
远程节点:
- 连 WireGuard
- 跑 FRR
- 自动加入网络
3️⃣ 替代 n2n(你现在正好在做)
对比:
| 技术 | 特点 |
|---|---|
| n2n | 简单,但不可控 |
| WireGuard | 安全 |
| FRR | 可控路由 |
| ACL | 精细权限 |
👉 合起来 = 企业级 VPN
共有 0 条评论