最近 fnOS 曝出的漏洞事件(熊已中招)再次敲响了警钟:直接将服务端口暴露在公网无异于裸奔。与其费心维护每个服务的安全性,不如直接收敛攻击面。通过 WireGuard 搭建一条加密隧道,既能“隐形”于公网,又能实现全内网穿透。

  1. 前期准备
    DDNS 解析:使用 Lucky 或其他工具,解析一个域名(例如 wg.geekzs.com)到你的公网 IP。

客户端准备:手机/PC 端下载安装 WireGuard。

密码处理(关键):

准备好你的明文密码。

访问 bcrypt.online 生成 Hash 串。

转义处理:在 Docker Compose 中 $ 是变量符,必须将 Hash 串中所有的 $ 替换为 $$。

例:$2y$10$JhD... 需改为 $$2y$$10$$JhD...,否则容器启动会报错或密码无法识别。

  1. Docker 部署
    在 fnOS 中新建目录 /vol1/1000/app/wireguard,创建 docker-compose.yml。

配置要点:

替换 WG_HOST 为你的域名。

替换 PASSWORD_HASH 为刚才生成的 Hash。

WG_DEFAULT_ADDRESS 建议修改为非家庭常用网段(如 10.8.0.x),避免路由冲突。

YAML

services:
wg-easy:

image: ghcr.io/wg-easy/wg-easy
container_name: wg-easy
environment:
  # ⚠️ 必填:你的公网域名或公网IP
  - WG_HOST=wg.geekzs.com
  
  # ⚠️ 必填:管理后台密码 (Bcrypt Hash),注意 Docker Compose 中 $ 需写成 $$
  - PASSWORD_HASH=$$2y$$10$$JhDfxd5J8ovT0qPUZ.ck0ujdiwkanv35VQpdP9U3p0GWyH17wqbAW
  
  # 网络配置
  - WG_PORT=51820
  - WG_DEFAULT_ADDRESS=10.8.0.x
  - WG_DEFAULT_DNS=223.5.5.5, 223.6.6.6
  - WG_ALLOWED_IPS=0.0.0.0/0, ::/0
  - WG_MTU=1420
  
volumes:
  - ./config:/etc/wireguard
ports:
  - "51820:51820/udp" # 隧道通信
  - "51821:51821/tcp" # Web 管理面板
restart: unless-stopped
cap_add:
  - NET_ADMIN
  - SYS_MODULE
sysctls:
  - net.ipv4.ip_forward=1
  - net.ipv4.conf.all.src_valid_mark=1

启动容器后,访问 http://NAS_IP:51821/ 进入后台(密码为 Hash 前的明文)。

  1. 端口转发
    进入主路由后台,添加端口映射:

外部端口:51820

内部端口:51820

协议:UDP (注意:WireGuard 仅使用 UDP)

  1. 客户端连接
    在 Web 后台点击 New Client,命名(如 iPhone)。

打开手机 WireGuard App,扫描屏幕上的二维码。

断开手机 WiFi,使用 5G 流量测试。开启连接,尝试访问 NAS 内网 IP。

  1. 为什么选择 WireGuard?
    安全性:隐形防御
    端口映射 (5666):像家门临街,虽然有锁,但小偷知道门在哪,随时能尝试撬锁或利用漏洞(如 fnOS 事件)。

WireGuard (51820):在攻击者眼中是“丢包”的黑洞。没有正确的私钥,服务器对任何扫描都不予回应。坏人连门都找不到,无从下手。

功能性:全屋互联
端口映射:要在墙上凿无数个洞。想用 NAS 凿一个,想看监控又凿一个。想用局域网打印机?没映射就无法访问。

WireGuard:直接把你要到了客厅。连上 VPN 等同于设备物理接入了家庭 WiFi。NAS、路由器后台、PC 远程桌面、打印机,想连谁连谁。

维护性:收敛入口
传统方式:维护多个端口,需确保每个服务的 Auth 都足够强壮。

WireGuard:只需守住这唯一的入口。只要隧道安全,内网所有弱密码设备皆安全。

-—————转自大佬的博客https://geekzs.com/authors/saxon