Nas-QNAP-系列06-FRP内网穿透

Posted by

在最初内网穿透需求出来的时候,因为自身没有云服务器,所以直接选择了其它方案:natapp见Nas-QNAP-系列01-内网穿透。该方案用了这么久,其实整体还好,没有啥问题。后面有一次逛论坛,发现了有其它更加成熟的方案了:frp,稍微尝试了一下,还挺方便的。

而最终促使我放弃原方案来自于一个这样的事情:2022年初的时候,我在natapp上针对3条隧道分别续费了一年,后面2月份的时候,因为其中一个隧道的服务计划有变停用了,所以我给对方发了邮件,问能不能退款,结果回复是:

实属心塞,失望的不是不能退款,而是服务态度。于是当即就决定等今年其它隧道过期了之后,就再也不用了。

时间来到了2023年2月,这段时间再次看了下到期日期,是时候了,于是这次调整下内网穿透的方案,改用frp。

要求:frp分为服务端(frps)与客户端(frpc),首先这里需要一个云服务器,用来做frp的服务端(frps),而本地的nas则作为frp的客户端(frpc)。frp的相关文档见:https://gofrp.org/

第一步,云服务器和nas端分别下载并解压frp。

第二步,服务端与客户端分别设置配置,这里保证两边的token设置一致。服务端的vhost_http_port设置为5055(可以按需配置,这里和客户端的local_port其实是没有关系的,它仅仅表示服务端转发http的端口)。bind_port表示服务端配置的frp的端口号;server_addr和server_port分别是客户端填写对应服务端的IP地址和端口号。全部的配置也可以参考软件里面的全部参数配置。下面可以参考一下截图配置:

服务端配置
客户端配置

第三步:云服务器为frp配置自启动,当前我选择的是通过systemd的方案。因为软件下载后它直接自带的有service的相关配置,大家只需要按照自己的软件启动路径修改下就行了。修改完后,执行:systemctl enable frps,这样就可以配置开机自启动了。然后执行:systemctl start frps,进行启动。如果发现启动失败,可以通过查看systemd的日志查看错误信息(可以通过:journalctl -e -u frps,查看错误。当初我因为服务端的配置里写的日志路径错误造成启动失败,后面调整为完整的日志路径地址,启动才正常)

frps.service创建位置
通过journalctl查看错误,发现是配置里的日志问题

第四步:云服务器安全组需要开启相应的端口,这里面除了要允许本身frps的bind_port端口外,还需要开启vhost_http_port对应的端口,这样才能保证客户端的服务正常。

第五步:客户端nas开启服务,nohup ./frpc -c ./frpc.ini > ./frpc.log 2>&1 &

第六步:云服务器配置对应的域名及解析方式,我直接在我原有的nas域名下删除natapp的cname解析后,新增了一个A类型的记录,指向云服务器的IP即可。到这里其实已经可以通过nas域名+vhost_http_port端口访问本地Nas服务了。

第七步:云服务器通过nginx配置,将nas域名直接通过反代的方式指向到vhost_http_port,这样就可以省略端口号,核心配置可参考如下

server {
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:5555;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_max_temp_file_size 0;
        proxy_redirect off;
        proxy_read_timeout 240s;
    }
}

第八步:配置HTTPS,这里我直接采用了certbot的方式,直接在云服务器上选择对应的域名进行加密处理,关于certbot,大家可以看这里:https://certbot.eff.org/。至此,所有的配置都已完毕

整个过程下来,关于frp的配置还是挺简单的,各个参数可以直接在官方的文档上都有指出,包括如何绑定域名、http转https都有提及到,还是挺省心的。如此一来,原来用于natapp的费用可以完全省略掉了!并且传输速度也完全是自己内部环境影响,只要保证自己nas所在的网络环境的上下行就好了(当然,也依赖你的云服务器的上下行)~~

One comment

  1. 今天本地开发测试,需要提供一个地址供公网访问测试,之前一直都直接使用natapp了,每次1个月出9块钱,这次突然提出一个疑问,服务器都有frp了,还搞啥每次付9块来开通内网穿透。。。索性开了一个子域名以后专门用来本地对外测试

Leave a Reply

您的电子邮箱地址不会被公开。 必填项已用*标注