前置要求
- 一台已经安装飞牛OS的主机
- 已经实现ipv6内网穿透(搜索你家光猫型号)
- 有一个被cloudflare接管的域名(买一个很便宜)
主要思路
由于飞牛OS的官方远程连接服务FN Connect仅支持5666端口下的访问,其他应用在外网只能使用ipv6地址才能直接访问,而又不是所有网络环境都支持ipv6,所以我想到使用特殊的反向代理方式,实现所有端口的cloudflare代理直连。
假如我有一个域名domain.com,内网nas地址为192.168.31.100
访问https://5666.domain.com:8443的时候,请求到nas机器的http://192.168.31.100:5666
这样只需要修改子域名就可以实现所有端口的外网ipv4访问,如果有ipv6网络条件还是建议直连,毕竟速度快得多。
操作流程
安装1Panel
安装1Panel主要是为了方便操作,后续不需要可以禁用掉。
安装OpenResty
打开1Panel,应用商店-全部-Web服务器
点击安装,安装时选择外部端口为http对应8080,https对应8443

配置反向代理
进入OpenResty的安装目录

我只给出我这里的路径,你要相对我的路径找到你本地真实路径。
这是主配置文件,我把日志禁用掉了,你可以不改。
/vol1/@appdata/1Panel/1panel/apps/openresty/openresty/conf/nginx.conf
user root;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
error_log /dev/stdout notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
server_tokens off;
#access_log /var/log/nginx/access.log main;
#access_log /dev/stdout main;
#sendfile on;
server_names_hash_bucket_size 512;
client_header_buffer_size 32k;
client_max_body_size 50m;
keepalive_timeout 60;
keepalive_requests 100000;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\.";
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
include /usr/local/openresty/nginx/conf/conf.d/*.conf;
include /usr/local/openresty/1pwaf/data/conf/waf.conf;
}
禁用自带的配置文件,删除或者后缀改掉都可以,新建一个ssl目录存放cloudflare的ssl证书,新建一个 nas_proxy.conf
用来配置反向代理。

ssl目录中有两个文件,这是cloudflare的边缘证书,从cloudflare获取,网上教程很多。

nas_proxy.conf文件内容
/vol1/@appdata/1Panel/1panel/apps/openresty/openresty/conf/conf.d/nas_proxy.conf
server {
listen 8080;
listen [::]:8080;
server_name ~^(?<proxy_port>\d+)\.domain\.com$;
location / {
# 使用纯 Nginx 变量和正则校验
if ($proxy_port !~ ^\d+$) {
return 403;
}
proxy_pass http://127.0.0.1:$proxy_port;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
server {
listen 8443 ssl;
listen [::]:8443 ssl;
server_name ~^(?<proxy_port>\d+)\.domain\.com$;
ssl_certificate /usr/local/openresty/nginx/conf/conf.d/ssl/cloudflare.pem;
ssl_certificate_key /usr/local/openresty/nginx/conf/conf.d/ssl/cloudflare.key;
location / {
# 使用纯 Nginx 变量和正则校验
if ($proxy_port !~ ^\d+$) {
return 403;
}
proxy_pass http://127.0.0.1:$proxy_port;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
这个文件里面的 server_name ~^(?<proxy_port>\d+)\.domain\.com$;
需要改成你的域名。
回到应用商店,重启openresty

这时候你可以在你电脑上配置一个host来验证反向代理是不是生效。
例如你的nas内网地址是192.168.31.100,你的域名是 domain.com
可以配置 192.168.31.100 5666.domain.com
打开浏览器访问 http://5666.domain.com:8080
如果正常请求到飞牛OS管理界面,证明反向代理设置成功。
配置cloudflare
- 泛解析*到你的nas的ipv6地址
- 开启cdn代理
- 如果需要ddns可以另外使用ddns-go配置一下

等待解析成功,访问https://5666.domain.com:8443 应该就可以看到飞牛os管理界面了。
该方案的优缺点
优点
- nas的所有http端口均可以自动穿透,无需根据每个应用单独配置,改域名就行
- cloudflare免费穿透并且自带ssl,省心
缺点
- cloudflare的代理速度较慢
- gotty经我测试不支持,wss链接失败,大佬可以研究一下原因
- 由于所有端口默认穿透,安全性较差,可以通过修改配置,指定一部分端口可通过转发