Wireguard 校园网 IPv6 折腾记录及最终劝退指南
需求
随着带出的上网设备变多(其实也就手机和平板),再加之科技不稳定导致频繁更换,我决定即便是公网设备也把所有流量转发到我的家庭网络。
当前的网络环境:宿舍有公网 ipv6,没有 v4,同时屏蔽 80/443 端口。
不过要死的是,对于某些关键端口,数据包会被随机丢失,尤其是 3389、51820 等需要长时间连接并传输数据的(不知是教学楼网太差还是本就如此)。实测更改端口可以缓解很多,但保持这些默认端口的话,我感觉会非常不稳。
部署
由于我的软路由性能太弱,因此wg server放在软路由LAN口下的一个Windows主机上。外部网络连接此主机的公网v6地址(通过ddns映射到我的域名)。局域网下产生的流量均由小猫接管并出口,而外部又与局域网建立了wg隧道,从而实现在外也能变成魔法家。
在 Server 上配置
安装 Wireguard。
写配置文件示例如下:
1 | |
配置文件的端口仅作示例,实际部署时,我换到了其它高位端口。
之后,在 Windows 侧开启 ip 转发:
1 | |
此外,还得对 ipv6 进行 ddns 到我的个人域名,这样 Endpoint 就可以固定住了。
Openwrt 侧配置
外部设备发来的包能到达 LAN 后,需要让返回包知道 10.7.0.0/24 应该回 Windows Server。
1 | |
原本我是开了一大堆端口,配置完后安全起见,就可以只允许 WireGuard 端口进站而关闭其他端口了。
1 | |
移动端配置
把所有流量进隧道网关:
1 | |
踩坑
踩坑 1:手机 fakeip 未能成功解析域名
服务端侧日志输出如下:
1 | |
注意到 198.18.0.0/15 这个网段是 RFC 2544 定义的“基准测试”专用地址段,同时结合设备软件环境,不难看出,我的 dns 解析被小哈基咪误劫持了。
首先可以做的是,将手机对端改成诸如 [2409:...]:51820 的 ipv6 地址。
其次,如果不懒,可以试着将ddns域名假如fake-ip-filter。
踩坑 2:误在服务端配置也填写对端 point
这个注意点就好了。
踩坑 3:服务端 peer 的 AllowIPs 不匹配
根因是我 CIDR 前缀写错了。
日志输出:
1 | |
总而言之应该注意:
手机 Interface Address = 10.7.0.2/32
服务端 Peer AllowedIPs = 10.7.0.2/32
踩坑 4:wireguard 奇怪的进程占用问题

通常是因为 Windows 下的 Wireguard-NT 虚拟网卡驱动假死,或者上一次连接未正常释放。图省事可以更改监听端口,修改接口名也行,想要根治就去 Windows 服务列表里重启 WireGuardTunnel$wg-home 服务,或者在设备管理器删掉隐藏的失效网卡。
——
总之经过一系列操作,可以使用内网 IP 访问我的 nginx 测试站:

然后手机把 AllowIPs 改成 10.7.0.0/24, 10.0.0.0/24,表示这两个网段走wireguard。
注意之前踩坑 4,如果网卡名被更改,一定要重新设置数据包转发。
等待测试能访问其他内网电脑(例如 10.0.0.x:80),再把手机 AllowedIPs 改成 0.0.0.0/0,测试全流量回家走哦喷小猫咪。
遇到的问题
弱网环境下雪上加霜
众所周知,也许是教学楼结构问题,也许是基站调度问题,一旦人多,信号就会奇差无比。
但是,一旦遭遇卡顿,经我实测,关闭隧道后就能恢复网络,因此我严重怀疑弱网加剧了我的设备流量不可达性。
校园网连 v6 都没有
一开始我以为是 dns 问题,后来不用域名连接还是连不上,然后,我测了一下,nmd,连不上也难怪了。

网络拓扑图
随便找了个AI帮我画了下,我也没细看,反正意思大差不差吧。
graph TD
%% 定义样式
classDef mobile fill:#e1f5fe,stroke:#0277bd,stroke-width:2px;
classDef tunnel fill:#fff9c4,stroke:#fbc02d,stroke-width:2px,stroke-dasharray: 5 5;
classDef server fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px;
classDef router fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px;
classDef lan fill:#eceff1,stroke:#455a64,stroke-width:2px;
subgraph Mobile_Side [移动端 / 弱网环境]
Phone[📱 手机/平板<br/>WireGuard Client]:::mobile
DNS_Check{DNS 解析检查}:::tunnel
Note_WeakNet[⚠️ 弱网/基站调度差<br/>建议开启 PersistentKeepalive]:::tunnel
end
subgraph Internet [公网 IPv6 传输层]
ISP_Campus[校园网/教学楼<br/>IPv6 Only / 无 V4]:::tunnel
DDNS[🌐 DDNS 域名解析<br/>wg.example.com]:::tunnel
Firewall_Rule[🛡️ OpenWrt 防火墙<br/>仅放行 UDP:51820]:::tunnel
end
subgraph Home_Network [家庭网络核心]
OpenWrt[OpenWrt 路由器<br/>LAN Gateway: 10.0.0.1]:::router
subgraph Routing_Table [关键路由配置]
Route_Static[📍 静态路由:<br/>10.7.0.0/24 → 10.0.0.237]:::server
end
WinServer[💻 Windows Server<br/>WireGuard Endpoint: 10.7.0.1]:::server
subgraph Win_Config [Windows 关键配置]
IP_Forward[🔄 IP Forwarding Enabled<br/>HKLM IPEnableRouter=1]:::server
WG_Interface[wg-home 接口<br/>MTU: 1280]:::server
end
end
subgraph LAN_Destinations [内网目标资源]
Nginx_Test[🌐 Nginx 测试站<br/>10.0.0.x:80]:::lan
Other_PC[🖥️ 其他内网电脑<br/>10.0.0.x]:::lan
end
%% 连接关系 - 已修复括号导致的解析错误
Phone -->|"1. 发起握手 UDP"| DNS_Check
DNS_Check -->|"2. 解析 IPv6 地址"| DDNS
DDNS -->|"3. 加密隧道流量"| ISP_Campus
ISP_Campus -->|"4. 到达 WAN 口"| Firewall_Rule
Firewall_Rule -->|"5. 转发至 LAN"| OpenWrt
OpenWrt -->|"6. 查路由表匹配 10.7.0.0/24"| Route_Static
Route_Static -->|"7. 下一跳指向 WinServer"| WinServer
WinServer -->|"8. 启用转发和 NAT"| IP_Forward
IP_Forward -->|"9. 访问内网资源"| Nginx_Test
IP_Forward -->|"10. 全流量代理"| Other_PC
%% 注释说明
Note_WeakNet -.->|影响稳定性| Phone
WG_Interface -.->|绑定端口| WinServer
那该怎么办?
通过上述折腾不难看出:虽然 WireGuard 是一个极其优秀的协议,但它只适合运行在网络环境相对干净、确定的两端之间。 像我学校教学楼这种烂网,不套隧道都不太能建立起相对稳定的网络连接,更何况还要开魔法做策略路由,更何况还会遇到QoS,简直雪上加霜。
这个时候不妨尝试DERP机制,代表的有:Tailscale 和 ZeroTier。
不过由于主啵没有稳定的国内服务器作为DERP中继节点,就没有尝试上述方案,敬请期待喵。
尾声
这次折腾属实费了我一整个下午,也在课上花费了不少时间来回捣鼓。虽然过程挺令人头大的,但当我成功访问Nginx的那一刻,还是非常高兴。此次折腾没准能为我今后探索GuaiTech网络链路生态作铺垫。