背景众所周知，将任何设备直接暴露于公网都会显著增加受攻击风险，对于家用物联网、NAS这类设备并不适合直接开放到公网上。而在年初飞牛OS就被曝存在路径穿越漏洞，任何暴露于公网的飞牛设备（包括使用fn Connect 内网穿透服务 ）均存在被入侵风险，攻击者可绕过所有身份验证，直接读取任意文件。但对于平时有公网访问需求的情况下，仅开放局域网内访问是不现实的。在各种访问家庭内网的方案中，考虑到安全性与便捷性的平衡，最终采用了动态公网 IPv6 + DDNS + SS 这一方案。方案简介该方案仅开放一个高强度加密的单端口，攻击者无法直接扫描到内网服务，如飞牛 Web 管理页、SMB 等，极大降低了攻击面部署前需确认家庭宽带拥有公网 IPv4 或 IPv6部署过程DDNS0.准备域名如果还没有域名，可以购买一个1.创建专用子用户，添加DNS管理权限以阿里云为例，创建一个RAM用户1，并在权限管理中新增授权，添加DNS管理权限( AliyunDNSFullAccess )，用于更新DNS解析记录2.创建 AccessKey进入对应RAM用户的管理页面，找到 AccessKey 模块开始创建 AccessKey ，获取 AccessKey ID 和 AccessKey Secret3.飞牛配置DDNS进入 系统设置 > 远程访问 > DDNS 模块，新增DDNS选择服务商、输入域名，并将上一步获取到的 AccessKey ID 和 AccessKey Secret 填入完成配置后可点击 测试连接 确认是否配置成功SS服务端部署SS服务直接使用飞牛自带的Docker管理界面部署，傻瓜式操作0.镜像下载从镜像仓库中搜索获取镜像 shadowsocks-libev 并下载1.创建容器到本地镜像中，找到刚下载的镜像文件，点击创建容器实例2.配置容器配置容器端口映射参数配置环境变量，主要关注以下参数{ "SERVER_ADDR":"::", "SERVER_PORT":8910, "PASSWORD":"atfield", "METHOD":"aes-256-gcm", }SERVER_ADDR 配置监听本机IPv6和IPv4地址SERVER_PORT 服务监听端口PASSWORD 加密通信密码METHOD 采用的加密算法将网络模式( network_mode ) 配置为 host勾选“开机自动开启”选项完成以上配置后运行SS客户端配置YAML 配置文件完成服务部署后，该对现有客户端的配置文件进行修改适配以 CFW 配置为例，在现有配置文件添加修改以下内容proxies 添加代理节点，与服务端配置相对应proxies: - name: home type: ss server: ddns.example.com port: "8910" cipher: aes-256-gcm password: atfieldserver 改为DDNS配置的域名proxy-groups 添加策略组proxy-groups: - name: HOME type: select proxies: - homerules 添加规则rules: - IP-CIDR,192.168.1.0/24,HOME,no-resolve将目标 IP 地址为 192.168.1.0/24 的数据包路由到 HOME，该地址需改为 NAS 所在内网网段Bypass Domain/IPNet 配置bypass 检查绕过代理规则移除需要代理的局域网网段配置，确保请求能正常走代理进入 Settings > System Proxy 页面点击 Bypass Domain/IPNet 右边 Edit 小字打开编辑界面根据实际网段修改，确保局域网网段没有出现在 bypass 列表bypass: # - 192.168.* # - 192.168.1.*飞牛OS防火墙启用防火墙进入 系统设置 > 安全性 > 防火墙 模块，启用防火墙在 高级设置 > 局域网 中，勾选 默认允许访问 选项将出入站策略修改为默认拒绝修改入站规则添加入站规则，开放 ss-server 端口的TCP 和 UDP 入站流量，并启用规则将其它所有入站规则都禁用，确保仅开放 ss-server 服务对应的端口验证完成以上配置后，在 CFW 客户端中前往 Proxies 模块，找到对应 home 节点，点击 Check 测试节点是否可用TUN模式以上配置仅对走系统代理的应用生效，因此如网络驱动器映射这类场景是无法访问到 NAS 的。对应此类场景，我们还可以使用工作在网络层的 TUN Mode 来接管系统所有流量，实现全局代理 由于主账号 AccessKey 有资源完全的权限，一旦泄露风险巨大，为了保证权限最小化不建议使用 ↩