前置要求
- 一台已经安装飞牛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链接失败,大佬可以研究一下原因
 
- 由于所有端口默认穿透,安全性较差,可以通过修改配置,指定一部分端口可通过转发