事先声明:本贴非引流软广,纯技术交流贴,所需软件、工具及资源等均与作者无任形式利益关联。只因真的好用。并且强烈建议官方也适当考虑采纳该方案(文末有详细建议)。
前言:本文所用到的方案正如标题所写,通过SD-WAN技术实现,如您了解该技术并清楚知道该技术不适用于您当前环境请考虑其他方案。默认视所有访问此贴寻求解决方案用户均为无公网IP用户,如您所在宽带运营商给分配了公网动态IP,请在前置网关拨号设备(光猫、路由器、FTTR、防火墙)配置端口映射进行访问。
缺陷:该方案下白嫖用户仅适合对内(或私有小型团队)需求场景,并不适合对外提供服务分享等场景(如:文件对外分享链接,对外提供web类页面或接口服务等)(提前声明避免耽误查询资料浪费时间)
折腾飞牛OS有一阵子了,在此之前工作需要经常会用到公网进行服务访问需求,如:程序接口对外开放,钱包支付回调等。用过内网穿透,也搞过公网IP通过域名动态DDNS映射内网端口。内网穿透免费稳定好用的少得可怜,其实也好理解,内网穿透通过服务器进行流量转发会产生较高带宽费用,免费用户会存在带宽及连接数量限制,往往大部分用户跨公网访问都有高带宽需求,如访问媒体资源,大文件上传下载等。受限于内网穿透带宽限制,在此情况下并不太适合NAS用户。
一、准备工具
EasyTier: 下载地址 (Github链接,无法访问请使用镜像地址或上科技)
桌面版系统建议下载GUI版本,无桌面系统下载不含GUI字样版本
各文件后缀适用系统:
exe=>windows
deb/AppImage=>Linux
dmg=>macOS
架构指令集对应: 扫盲贴跳转
aarch64/arm64/arm* => ARM架构
x86/x64/amd64 => X86架构
mips/mipsel => mips架构(本文几乎用不到)
二、组网过程示例
以较为常见的需求案例场景为例:假设我们现在要在单位工作网络环境访问家里面飞牛NAS相关服务,受限于家庭宽带运营商没有分配公网IP地址,或企业网络环境中无法使用IPv6服务。

图中线条说明:红色线为组网过程,蓝色线为物理网络逻辑关系,绿色线为P2P连接隧道
建立完P2P隧道链接后,公共节点服务器会自动下发虚拟IPV4地址,默认IP为10.126.126.X网段(可进行手动指定IP网段)。根据虚拟IP地址即可进行远程访问飞牛NAS,如:飞牛OS虚拟IP地址为:10.126.126.1,单位电脑分配地址为:10.126.126.2,此时单位电脑与家中飞牛NAS已经组建成一个专用虚拟网络,根据虚拟IP即可访问飞牛相关服务。
三、使用方法
3.1 GUI版本
以windows系统为例(软件为跨平台构建,Linux、macOS及安卓,操作界面基本一致):
下载对应平台安装包进行安装,安装过程略。
macOS平台在安装过程中系统会弹出一个警告,提示“无法验证开发者”,因为该开源软件并未上架苹果应用商店,打开【系统偏好设置】进入【安全性与隐私设置】在“通用”标签页下,选择“允许从任何来源”或点击【仍然打开】。
首次打开软件点击右上角【Settings】按钮,选择切换中文选项。

填入网络名称及网络密码(注意:此处网络名称尽量保持唯一,中转服务器节点将会根据网络名称及密码相同的节点进行组网)。
关于网络名称命名建议(仅提供命名思路):
规则 |
示例 |
备注 |
FNOS固定开头+FNID |
FNOS10001、FNOS_10001 |
FNID为10001时 |
FNOS固定开头+字母Q+QQ小号 |
FNOSQ123888888 |
QQ小号为123888888 |
FNOS固定开头+所在地区+社区网名 |
FNOS_BEIJING_HUAKAIFUGUI |
地区:北京 网名:花开富贵 |
网站域名 |
fnnas.com |
飞牛OS域名(示例) |
公司名+营业执照编码后6位 |
guangzhoutieren_DH9D5Q |
广州铁刃智造(飞牛OS公司) |
MAC地址 |
00-50-56-C0-00-08 |
示例 |
核心思想只有一个,尽量保持唯一,就类似于游戏或论坛起名一样。
顺带提一句:很多人可能会想到用电话号码或身份证号码混合保证唯一性,强烈不建议这么做,当下互联网环境中注意保护个人隐私,避免暴露个人相关敏感信息。
网络方式选择官方公共服务器或手动填写该开源软件项目社区志愿者贡献的公共节点服务器地址

至此,填写完网络名称及密码点击【运行网络】其实已经可以完成最简单的组网了,But......手下留情
组网后默认网络列表中主机名会显示系统默认设备名称,如:DESKTOP-8RTY9AP(Windows系统)、localhost(安卓设备)、huakaifugui-MacBook-Pro.local(macOS系统)。对于没有进行系统设备名称规划的绝大部分用户非常不友好,不太容易区分各个设备,所以我们要在高级设置中配置下主机名。
在高级设置选项右侧点击【+】按钮展开,在下方主机名处填写设备自定义名称。

设置好后主机名后,点击右上角【-】位置收回或鼠标滚轮滑动页面最下方,然后点击【运行网络】完成该设备组网。

加入网络后,页面节点信息列表会显示当前专网下各设备,其中路由状态为 relay字样的为正在与该设备进行打洞组网中(正在连接中,还没准备好),连接时间视网络复杂情况延长,通常几秒内。
唉?等等! 不对呀,那我这才完成1个节点,我飞牛OS怎么配置? 别着急,继续往下翻,参考3.2.1 Docker Compose(飞牛OS更适用于此方式)
3.2 无GUI版本
3.2.1 Docker Compose(飞牛OS更适用于此方式)
docker-compose.yml文件:
services:
easytier:
restart: always
labels:
com.centu**inklabs.watchtower.enable: 'true'
privileged: true
mem_limit: 0m
container_name: easytier
hostname: easytier
network_mode: host
volumes:
- /etc/easytier:/root
environment:
- TZ=Asia/Shanghai
image: easytier/easytier:latest # 国内用户可以使用 m.daocloud.io/docker.io/easytier/easytier:latest
command: -i <ip> --network-name <用户> --network-secret <密码> -p tcp://<服务器地址>:11010 --hostname=<主机名称>
飞牛OS中Docker部署
登陆飞牛后台WEB管理页面,打开【Docker】应用,点击左侧【Compose】选项,项目管理页面中点击右侧【新增项目】按钮。

在弹出的创建项目窗口中 填写项目名称,如:SDWAN,然后选择一个路径存放位置,来源选择“创建docker-compose.yml”并在下方粘贴上面的 docker-compose.yml 文件代码(请使用代码块右上方复制按钮复制可保留完整代码格式,yml文件对缩进有严格要求)。
修改最后一行的 command属性代码 将对应<>包裹的标签内容进行替换,注意不包含括号本身,如: 需替换成10.126.126.1,替换时留意左右空格不要误删。
勾选左下方【创建项目后立即运行】选项,点击【确定】按钮完成创建。
完整示例:
command: -i 10.126.126.1 --network-name FNOS10001 --network-secret 123456 -p tcp://public.easytier.top:11010 --hostname=飞牛NAS

图中项目名称SDWAN不符合命名要求,请替换为小写字母开头
返回单位电脑侧GUI页面查看飞牛OS已经连接成功(PS:不是真的让你跑去单位的电脑测看GUI页面的节点列表,可以先在本地网络环境中组网测试)

访问虚拟网络IP地址,成功连通

3.2.2 命令行方式运行(适用于软路由、盒子或容器内部等特殊场景)
命令行程序的压缩包中包含三个可执行程序:
easytier-core
:EasyTier 的核心程序
easytier-cli
:EasyTier 管理程序,启动 easytier-core 后,可以使用 easytier-cli 查看虚拟网信息
easytier-web
: 用于自建 EasyTier 的 Web 控制台后端,一般情况下无需自建,使用官方提供的 Web 控制台即可
命令示例(win、mac下同理):
./easytier-core -i 10.126.126.1 --network-name FNOS10001 --network-secret 123456 -p tcp://public.easytier.top:11010 --hostname=飞牛NAS
更多配置参数可使用 easytier-core --help 查看全部配置项
3.2.3 Linux 一键脚本
wget -O /tmp/easytier.sh "https://raw.githubusercontent.com/EasyTier/EasyTier/main/script/install.sh" && bash /tmp/easytier.sh install
四、高可用多节点方案
当手里存在多个具有公网IP地址服务器或多个云服务商服务器资源时,可以自建私有节点服务器使其互为对等节点组建集群,连接集群中的任意节点,即可发现彼此。
组网拓扑结构:

配置方法:
具有公网IP充当服务器角色的节点,互相指向其余节点,以上图拓扑结构为例:
1.1.1.1服务器命令行加入参数:
-p tcp://2.2.2.2:11010 tcp://3.3.3.3:11010
2.2.2.2服务器命令行加入参数:
-p tcp://1.1.1.1:11010 tcp://3.3.3.3:11010
3.3.3.3服务器命令行加入参数:
-p tcp://1.1.1.1:11010 tcp://2.2.2.2:11010
以1.1.1.1节点为例,完整参数应为:
-i <节点虚拟ip> --network-name <网络名称> --network-secret <网络密码> -l tcp://0.0.0.0:11010 -p tcp://2.2.2.2:11010 tcp://3.3.3.3:11010 --hostname=aliyun-cloud
docker部署方式:上面参数加入docker-compose文件中command属性后
一键脚本及服务方式启动,依赖配置文件参考如下:
hostname = "aliyun-cloud"
instance_name = "default"
ipv4 = "<节点虚拟IP>"
dhcp = false
listeners = [
"tcp://0.0.0.0:11010",
"udp://0.0.0.0:11010",
"wg://0.0.0.0:11011",
"ws://0.0.0.0:11011/",
"wss://0.0.0.0:11012/",
]
mapped_listeners = []
exit_nodes = []
rpc_portal = "0.0.0.0:15888"
[network_identity]
network_name = "<网络名称>"
network_secret = "<网络密码>"
[[peer]]
uri = "tcp://1.1.1.1:11010"
[[peer]]
uri = "tcp://2.2.2.2:11010"
[[peer]]
uri = "tcp://3.3.3.3:11010"
五、共创及呼吁
5.1 公共共享节点贡献
如果你手中有闲置或测试服务器资源,并且希望为其他飞牛用户贡献用于无公网 IP 组网的公共共享节点,方便其他无公网 IP 的飞牛用户组网。可在下方进行回帖,将你的服务器连接贴出。方便大家进行查询。当然这需要你的节点具有一定的稳定性和带宽(如果不做中转服务器仅用于P2P握手连接只需极少的带宽占用即可)。
如果希望为 EasyTier 社区贡献公共服务器,可以通过官网联系管理员,他们将告知你如何将你的节点添加到社区共享节点列表中。
5.2 后续计划
后续如果共享服务器资源较多,考虑到贴内查询不太便利,会基于EasyTier-GUI开源项目做二次开发用于自动获取共享服务器资源节点,同时将会给贡献者提供服务器资源提交页面(当然此项需要官方给与一定资源支持,飞牛产品大大如果看到了有兴趣可以Cue我下~)
5.3 搭建共享节点
不带任何参数启动 EasyTier,该节点就可作为公共服务器使用(不需要 root 权限),更多搭建详细说明,请移步EasyTier官方文档
easytier-core
六、更多扩展玩法
搭建SDWAN组网除了访问飞牛资源以外其实还可以实现更多功能,比如在家种访问公司各类OA业务系统(当然此行为需要遵守公司相关规定,获得公司允许)提高工作效率、异地监控组网、多人联机打局域网单据游戏、远程桌面访问(现在免费的限制太多了),有公网低配服务器的也可以把一些服务资源存放在家中飞牛NAS里做反向代理、映射等等。
致官方的建议:
1、搭建飞牛社区自己的公共节点,用于社区用户通过公共节点进行组网,这样可信度较高,而且不转发仅用于握手不需要很高的带宽成本支出。
2、官方发起呼吁并在社区为贡献服务器节点资源用户提供一个页面用于提交共享节点,并收集共享节点添加到节点列表供用户进行页面查询。
3、Docker中上架EasyTier应用(已提交应用接入申请),方便用户使用。
4、基于EasyTier-GUI开源项目,构建飞牛社区用户专属的SDWAN组网程序,可以自动拉取官方及社区用户共享的公共节点列表。此项如果感兴趣并支持,本人可以尽一份微薄力量协助改造。
最后附 EasyTier官网地址:https://easytier.cn/