本文最后更新于9 天前,其中的信息可能已经过时,如有错误请发送邮件到859811039@qq.com
本教程适用于飞牛NAS等搭载fnOS系统的设备,涵盖公网远程访问(DDNS+域名)和局域网访问(本地DNS)两种核心场景,通过域名配合DNS配置,实现无需记忆复杂IP地址、安全稳定的访问体验。教程兼顾新手友好性,步骤清晰可落地,同时标注关键注意事项和常见问题排查。
一、前期准备
在开始配置前,需完成以下基础准备工作,避免后续操作卡顿:
- 飞牛设备:确保已正常开机、联网,能通过局域网IP登录后台(默认一般为
192.168.x.x)。 - 域名:已注册并完成实名认证(推荐腾讯云、阿里云等主流服务商,支持免费DDNS;也可选择eu.org等免费域名)。
- 网络环境:
- 公网访问需具备公网IP(IPv4或IPv6均可,IPv6更易获取且无需端口映射);
- 局域网访问需确保所有设备在同一局域网段;
- FRP穿透需准备一台拥有公网IP的服务器(云服务器或VPS均可)。
- API凭证(公网访问用):从域名服务商获取AccessKey ID/Secret(如腾讯云的SecretId/SecretKey、阿里云的AccessKey),用于授权飞牛设备自动更新DNS解析。
- 工具准备:飞牛设备需安装Docker(用于部署dnsmasq、Nginx及FRP客户端);公网服务器需准备FRP软件(从FRP GitHub下载对应系统版本)。
二、场景一:公网远程访问(推荐原生DDNS+域名)
适合需要在外网(如公司、出差地)访问飞牛设备的场景,核心利用飞牛原生DDNS功能自动同步公网IP与域名的映射,无需手动更新解析。
步骤1:域名服务商基础配置
- 登录域名管理平台(以腾讯云为例),进入「云解析DNS」控制台,确认域名已完成实名认证(未实名无法解析)。
- 获取API凭证:进入账号中心→「API密钥管理」,创建并保存SecretId和SecretKey(后续配置需用到,请勿泄露)。
- (可选)申请免费SSL证书:在域名平台申请免费HTTPS证书(如腾讯云SSL、阿里云SSL),下载PEM格式证书文件(含fullchain.pem和privkey.pem),用于后续安全访问。
- 飞牛15版本开始以后的飞牛获取证书,可以选择从Let’sEncrypt获取。
步骤2:飞牛设备原生DDNS配置
- 登录飞牛设备后台:在局域网内通过浏览器访问
http://飞牛局域网IP:端口(默认端口可在设备说明书中查询),输入账号密码登录。 - 进入DDNS配置页面:依次点击「控制面板」→「远程访问」→「DDNS」→「新增」。
- 填写配置信息:
- 服务商:选择你的域名托管平台(如「腾讯云」「阿里云」);
- 主机名/域名:填写完整域名(如
nas.yourdomain.fun); - 用户名/ID:填入步骤1获取的SecretId(腾讯云)或AccessKey ID(阿里云);
- 密码/秘钥:填入对应的SecretKey或AccessKey Secret;
- IP类型选择:有公网IPv4则开启「外部IPv4」并设为「自动」;有IPv6则开启「外部IPv6」;无公网IPv4则关闭,避免冲突。
- 测试并保存:点击「测试连接」,显示「测试成功」说明配置通路正常,点击「确定」保存设置。此时飞牛会自动在域名服务商后台创建解析记录,无需手动添加。
步骤3:SSL证书配置(可选,提升安全性)
- 在飞牛后台依次点击「设置」→「安全性」→「证书」→「新增」。
- 上传证书文件:将下载的fullchain.pem(证书链)和privkey.pem(私钥)分别对应填入,点击「确定」保存。
- 关联远程访问:在「证书→服务配置」中,选择「远程访问备用」,关联刚上传的域名证书。
- 飞牛15版本开始以后的飞牛获取证书,可以选择从Let’sEncrypt获取。
步骤4:路由器端口转发(仅公网IPv4需要)
若使用公网IPv4访问,需在路由器中配置端口转发,将外部访问端口映射到飞牛设备的内部端口:
- 登录路由器管理后台(通常为
192.168.1.1或192.168.0.1)。 - 找到「端口转发」「虚拟服务器」或「NAT映射」功能,添加转发规则:
- 外部端口:自定义(如8080,避免使用80、443等常用端口,防止被运营商屏蔽);
- 内部IP:飞牛设备的局域网IP(如192.168.0.107);
- 内部端口:飞牛设备的访问端口(默认HTTP端口或HTTPS端口);
- 协议:选择「TCP」或「TCP+UDP」。
- 保存规则,确保路由器防火墙未拦截该外部端口。
步骤5:公网访问测试
- 断开局域网网络(如手机切换为流量),打开浏览器输入:
- HTTP访问:
http://你的域名:外部端口(如http://nas.yourdomain.fun:8080); - HTTPS访问:
https://你的域名:HTTPS端口(如https://nas.yourdomain.fun:443,需完成步骤3证书配置)。
- HTTP访问:
- 能正常打开飞牛登录页面,说明公网访问配置成功。
三、场景二:局域网访问(本地DNSS+域名,无需公网IP)
适合仅在局域网内访问飞牛设备的场景(如家庭、办公室),通过部署本地DNS服务器,实现用自定义域名访问设备内的各类项目(如Emby、QBittorrent),无需记忆IP和端口。
步骤1:Docker部署dnsmasq和Nginx
- 登录飞牛后台,进入「应用中心」,搜索并安装「Docker」。
- 创建Docker配置文件:在飞牛存储目录中新建文件夹(如
/vol1/docker/dns-nginx),内部创建「nginx」和「dnsmasq」两个子文件夹,分别用于存放Nginx和dnsmasq的配置文件。 - 编写docker-compose.yml文件:在
/vol1/docker/dns-nginx目录下创建该文件,内容如下(需替换路径为你的实际路径):services:nginx:image: nginx:1.25.1container_name: nginxvolumes:- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf- ./nginx/conf/conf.d:/etc/nginx/conf.d- ./nginx/html:/usr/share/nginx/html- ./nginx/log:/var/log/nginxports:- 80:80networks:- networkrestart: unless-stoppeddnsmasq:image: jpillora/dnsmasq:1.1.0container_name: dnsmasqvolumes:- ./dnsmasq/opt/dnsmasq.conf:/etc/dnsmasq.confenvironment:- HTTP_USER=root- HTTP_PASS=123456 # 后续访问dnsmasq管理页的密码,可修改ports:- 53:53/udp- 5380:8080networks:- networkdepends_on:- nginxrestart: unless-stoppednetworks:network:driver: bridge - 启动容器:在Docker后台导入上述docker-compose.yml文件,点击「启动」,等待Nginx和dnsmasq容器正常运行。
步骤2:配置本地DNS(dnsmasq)
- 访问dnsmasq管理页:在浏览器输入
http://飞牛局域网IP:5380,输入账号root和密码123456(对应docker-compose.yml中的配置)登录。 - 修改dnsmasq配置:在配置编辑区添加以下内容(替换为你的域名和飞牛IP):
log-queriesresolv-file=/etc/resolv.confserver=114.114.114.114 # 公共DNS,可保留server=223.5.5.5strict-order# 核心解析规则:将自定义域名指向飞牛IPaddress=/yourdomain.com/192.168.0.107 # 替换为你的域名和飞牛局域网IPaddress=/emby.yourdomain.com/192.168.0.107 # 二级域名,对应飞牛内的Emby服务address=/qbittorrent.yourdomain.com/192.168.0.107 # 二级域名,对应QBittorrent服务stop-dns-rebind - 保存配置:点击「Save」保存,dnsmasq会自动重启生效。
步骤3:配置路由器DHCP(统一局域网DNS)
为避免每台设备手动设置DNS,需在路由器中配置DHCP,让局域网设备自动获取本地DNS(即飞牛IP):
- 登录路由器管理后台,找到「DHCP服务器」设置。
- 修改DNS服务器:将「首选DNS服务器」改为飞牛设备的局域网IP(如192.168.0.107);「备用DNS服务器」可留空或设为公共DNS。
- IPv6设置(可选):若开启IPv6,需将IPv6的首选DNS改为飞牛IPv6地址,获取协议设为SLAAC,关闭DHCPv6(避免DNS冲突导致安卓设备无法访问)。
- 保存设置,重启路由器(部分路由器无需重启即可生效)。
步骤4:配置Nginx反向代理(映射服务端口)
通过Nginx将不同二级域名映射到飞牛内的对应服务端口,实现无端口访问:
- 在
./nginx/conf/conf.d目录下新建配置文件(如fnos.conf),内容如下:server {listen 80;server_name fnos.yourdomain.com; # 飞牛管理页二级域名location / {proxy_pass http://192.168.0.107:5666; # 替换为飞牛管理页的实际IP和端口proxy_http_version 1.1;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}# 新增Emby服务映射(示例)server {listen 80;server_name emby.yourdomain.com;location / {proxy_pass http://192.168.0.107:8096; # Emby默认端口proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection keep-alive;proxy_set_header Host $host;}} - 重启Nginx容器:在Docker后台找到nginx容器,点击「重启」使配置生效。
步骤5:局域网访问测试
在局域网内的任意设备(电脑、手机)浏览器中输入:
- 飞牛管理页:
http://fnos.yourdomain.com - Emby服务:
http://emby.yourdomain.com
能正常打开对应服务页面,说明局域网域名访问配置成功。
四、场景三:公网远程访问(无公网IP,FRP穿透方案)【强烈添加新人用户,可惜需要购买有公网的服务器】
适合家庭宽带无公网IP(多数运营商默认不分配公网IP)的场景,核心通过FRP(Fast Reverse Proxy)内网穿透工具,将飞牛设备服务通过公网服务器暴露至互联网,配合域名实现稳定访问。FRP需分别部署服务端(公网服务器)和客户端(飞牛设备),推荐用Docker部署客户端以简化操作并保障开机自启。
步骤1:FRP服务端配置(公网服务器)
- 下载FRP软件:登录公网服务器,从FRP GitHub Releases下载对应系统版本(如Linux x86_64),解压后获取
frps(服务端程序)和frps.ini(服务端配置文件)。 - 编辑服务端配置文件:打开
frps.ini或者frps.toml(新版本是后面这个),填入以下基础配置(可根据需求调整端口和认证信息):[common] bind_port = 7000 # FRP服务端监听端口,用于与客户端通信 token = frp@123456 # 客户端连接认证令牌,建议修改为复杂密码 dashboard_port = 7500 # 管理面板端口(可选) dashboard_user = admin # 管理面板账号(可选) dashboard_pwd = admin123 # 管理面板密码(可选) - 启动FRP服务端:执行命令启动服务端,建议配置为系统服务确保开机自启:
# 临时启动(测试用)./frps -c frps.ini# 配置为Linux系统服务(长期使用)sudo nano /etc/systemd/system/frps.service在服务文件中填入以下内容(替换路径为实际FRP存放路径):[Unit]Description=FRP Server ServiceAfter=network.target[Service]Type=simpleExecStart=/path/to/frps -c /path/to/frps.iniRestart=on-failure[Install]WantedBy=multi-user.target执行以下命令启用并启动服务:sudo systemctl daemon-reloadsudo systemctl start frpssudo systemctl enable frps - 开放服务器端口:在云服务器控制台的安全组中,开放7000(FRP通信端口)、7500(管理面板端口,可选)及后续映射的服务端口(如8081)。
步骤2:飞牛设备FRP客户端配置(Docker部署)
- 创建FRP客户端配置文件:在飞牛存储目录中新建
/vol1/docker/frp文件夹,在该目录下创建frpc.ini配置文件,内容如下(替换对应参数):[common] server_addr = x.x.x.x # 公网服务器的公网IP server_port = 7000 # 与FRP服务端bind_port一致 token = frp@123456 # 与服务端token一致 use_encryption = true # 启用传输加密(提升安全性) use_compression = true # 启用数据压缩(提升传输效率) # 飞牛管理页穿透配置(映射HTTP服务) [feiniu-web] type = http local_ip = 127.0.0.1 # 飞牛本地IP(固定为127.0.0.1,Docker容器内访问宿主) local_port = 5666 # 飞牛管理页默认端口(可根据实际修改) remote_port = 8081 # 公网服务器暴露的端口(自定义,避免被屏蔽) custom_domains = nas.yourdomain.fun # 绑定的域名(需与后续DNS解析一致) - 用Docker启动FRP客户端:登录飞牛Docker后台,点击「创建容器」,按以下参数配置:镜像:搜索并选择
snowdreamtech/frpc(轻量稳定的FRP客户端镜像); - 容器名称:自定义为
frpc-feiniu; - volumes挂载:添加挂载项,本地路径选择
/vol1/docker/frp(看自己的文件保存目录设置),容器路径填写/etc/frp或者/etc/frp/frpc.toml【后面这个是新版本的frp配置】(映射配置文件目录); - 重启策略:选择「除非停止」(确保飞牛重启后自动恢复穿透服务);
- 点击「创建」启动容器,查看容器日志确认无报错(显示「start proxy success」即为正常)。
步骤3:域名解析配置(配合FRP访问)
- 登录域名管理平台(如腾讯云、阿里云),进入「云解析DNS」控制台;
- 添加解析记录:新建一条A记录,主机记录填写
nas(对应frpc.ini中的custom_domains前缀),记录值填写公网服务器的公网IP,TTL设置为10分钟(快速生效); - 保存记录,等待5-10分钟让解析生效。
步骤4:FRP穿透访问测试
- 断开局域网网络(如手机切换为流量),打开浏览器输入:
http://nas.yourdomain.fun:8081(域名+公网暴露端口); - 若能正常打开飞牛登录页面,说明FRP穿透配置成功;
- (可选)SSL证书配置:若需HTTPS访问,可在公网服务器部署Nginx反向代理,将HTTP请求转为HTTPS,或直接在FRP服务端配置HTTPS(参考FRP官方文档)。
四、常见问题排查
- 域名解析不生效?
- 等待TTL生效:DNS解析变更后需等待5-10分钟(TTL设置为10分钟更易生效);
- 清除本地DNS缓存:Windows运行
ipconfig /flushdns,Linux运行systemd-resolve --flush-caches; - 检查DDNS状态:飞牛后台DDNS列表若显示「异常」,重新核对API凭证和域名拼写。
- 公网访问提示403/404?
- 403:检查飞牛设备防火墙是否拦截外部端口,或访问权限是否设置正确;
- 404:确认端口转发规则中的内部端口与飞牛服务端口一致,域名解析记录正确。
- 安卓设备无法通过IPv6访问?
- 关闭路由器DHCPv6,开启SLAAC和RDNS,确保安卓设备能获取到飞牛的IPv6 DNS地址。
- HTTPS访问提示不安全?
- 检查证书格式:确保上传的是PEM格式完整证书链(含中间证书);
- 证书域名匹配:确认证书绑定的域名与访问域名一致。
- FRP穿透连接失败?
- 端口未开放:检查公网服务器安全组是否开放7000端口及映射的服务端口;
- 配置不匹配:核对frps.ini与frpc.ini中的server_port、token是否一致;
- 网络限制:部分运营商可能屏蔽7000等常用端口,可修改为10000以上端口重试;
- 容器问题:查看飞牛FRP客户端容器日志,确认配置文件路径映射正确。
五、注意事项
- API凭证安全:请勿向他人泄露SecretId/SecretKey等API信息,避免域名被恶意解析;
- 免费证书续期:免费SSL证书有效期通常为3个月,需提前在域名平台续期并重新上传至飞牛设备;
- 端口选择:避免使用80、443、8080等常用端口(部分运营商会屏蔽),选择10000-65535之间的端口更稳定;
- IPv6优势:若家庭宽带支持IPv6,优先使用IPv6解析,无需配置端口转发,访问更便捷安全;
- FRP安全配置:必须设置token认证,避免未授权设备连接;建议启用use_encryption和use_compression参数,提升传输安全性和效率;
- 公网服务器维护:定期更新FRP软件版本修复安全漏洞;监控服务器带宽和流量,避免因流量过载导致访问卡顿;
- FRP多服务映射:若需穿透飞牛内多个服务(如Emby、QBittorrent),可在frpc.ini中新增多个服务段落,配置不同的服务名称、local_port和custom_domains。





