群晖NAS再再折腾

(frp方案网络结构图)

 

frpc连接至frps,建立起一条数据通道(图中蓝色的虚线),根据配置,任何对公网服务器的某个端口的访问都经由这条通道告知frpc,再由frpc转为对局域网内某台主机(NAS)的访问,最后将访问结果原路返回给用户,原理和quickconnect.to是相似的。

 

必要的准备

 

要达成这个方案,就需要一台有公网IP地址的主机,通常是云主机。个人要搞一台有不错带宽的云主机,价格还是挺高的,可以考虑几个人拼一台主机,这样成本就下来了,带宽也能得到比较充分的利用,或者本来就有自己的公网主机的话那就更好了。

 

除了公网主机之外,图中我画的frpc是放在电脑主机或者路由器上,这是啥意思呢?

 

frpc是客户端,要想随时能够访问自己的NAS,客户端和服务器端这条数据通道是不能断的,要一直运行着,如果NAS支持安装frpc,我想应该没问题,直接把frpc放在NAS上,但实际上我没在群晖的套件中心里找到frpc,所以只好部署在NAS之外的设备上,另外:我不太确定用docker是否可行,谁如果用docker部署了frpc在NAS上的话可以在下面留言说明。

 

根据前面说的,如果frpc部署在电脑里,电脑要一直开着机,这个开销挺大的,所以最好的做法,就是把frpc部署在路由器里。并不是所有的路由器都支持安装应用。我家使用的路由器是ASUS的RT-AC86U,自己刷一个“梅林固件”,就可以在上面安装应用了,其中就有frpc,这个过程并不难,网上找一下即可,支持梅林固件的路由器还是挺多的。

 

群晖NAS再再折腾插图

(梅林固件的“软件中心”管理界面)

 

但配置阶段我建议还是用电脑,因为你肯定会遇到一些问题,你需要不断查看日志和调整,等你调试好了,再把配置贴到路由器里即可。

 

额外的,还需要一个域名,最好有,一来美观好记,二来可以启用https,三来可以用不同域名来区分不同的访问。域名可以到阿里云上注册一个,比如叫 jiangguogang.club,这种域名还是很便宜的,头一年特价,甚至只需要一元钱,体验比DDNS那些二级域名好很多。

 

OK,总结回来,必要的准备就是:

  • 一台有公网IP地址的主机,简称公网主机,假设主机IP地址为123.123.123.123
  • 支持梅林固件的路由器(能够安装frpc)
  • 一个域名,以jiangguogang.club为例

规划

 

确定自己需要哪些服务之后,做一下规划,最直接有效的方法就是画一张规划图,以我为例,我将自己的需求先列一下:

  • 对https://jiangguogang.club的访问会返回一个“Welcome”的信息
  • 对https://jiangguogang.club/photo的访问会转至NAS的相册,局域网的地址是http://192.168.1.200/photo
  • 对https://dms.jiangguogang.club的访问会转至NAS的管理界面,局域网地址是http://192.168.1.200:5000
  • 对https://webdav.jiangguogang.club的访问会转至NAS的WebDAV服务,局域网地址是http://192.168.1.200:5005
  • 对https://router.jiangguogang.club的访问会转至我的ASUS路由器,局域网地址是http://192.168.1.1
  • 所有使用http的访问都会被重定向至https

需求明确。由于本人对NGINX反向代理比较熟悉,所以公网主机统一用NGINX对外提供服务,这样配置https也比较方便,用户的请求到达主机之后,是由NGINX转到frps,再经过数据通道,抵达frpc,由frpc执行本地的请求。

群晖NAS再再折腾插图1

 

(应用程序关系图)

 

为了更清晰,弄一张表格出来:

用户 NGINX frps frpc
https://jiangguogang.club   直接返回”Welcome”  
https://jiangguogang.club/photo   转127.0.0.1:5002 TCP通道转frpc   转192.168.1.200:80  
https://dms.jiangguogang.club 转127.0.0.1:5000 TCP通道转frpc 转192.168.1.200:5000  
https://webdav.jiangguogang.club   转127.0.0.1:5005 TCP通道转frpc 转192.168.1.200:5005
https://router.jiangguogang.club 转127.0.0.1:5003 TCP通道转frpc 转192.168.1.1:80

部署及配置NGINX

 

部署nginx的步骤略。

 

记得防火墙打开80和443端口。

 

/etc/nginx/conf.d/jiangguogang.conf

server { server_name jiangguogang.club; location / { add_header Content-Type text/plain; return 200 'Welcome! I am Jiang Guogang.'; #直接返回字符串 } location /photo/ { proxy_pass http://127.0.0.1:5002; #转至本地的5002端口 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; proxy_cache_bypass $http_upgrade; } #启用https,证书来自于Let's encrypt. 建议使用Certbot,具体参考Let's encrypt的官网 listen 443 ssl; ssl_certificate /etc/letsencrypt/live/jiangguogang.club/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/jiangguogang.club/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; } server { server_name dsm.jiangguogang.club; location / { proxy_pass http://127.0.0.1:5000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; proxy_cache_bypass $http_upgrade; } listen 443 ssl; ssl_certificate /etc/letsencrypt/live/dsm.jiangguogang.club/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/dsm.jiangguogang.club/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; } server { server_name webdav.jiangguogang.club; location / { proxy_pass http://127.0.0.1:5005; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; proxy_cache_bypass $http_upgrade; } listen 443 ssl; ssl_certificate /etc/letsencrypt/live/webdav.jiangguogang.club/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/webdav.jiangguogang.club/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; } server { server_name router.jiangguogang.club; location / { proxy_pass http://127.0.0.1:5003; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; proxy_cache_bypass $http_upgrade; } listen 443 ssl; ssl_certificate /etc/letsencrypt/live/router.jiangguogang.club/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/router.jiangguogang.club/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; } #下面的配置的意思是:对http的访问将会重定向至https server { if ($host = photo.jiangguogang.club) { return 301 https://$host$request_uri; } listen 80; server_name photo.jiangguogang.club; return 404; } server { if ($host = webdav.jiangguogang.club) { return 301 https://$host$request_uri; } listen 80; server_name webdav.jiangguogang.club; return 404; } server { if ($host = dsm.jiangguogang.club) { return 301 https://$host$request_uri; } listen 80; server_name dsm.jiangguogang.club; return 404; } server { if ($host = jiangguogang.club) { return 301 https://$host$request_uri; } listen 80; server_name jiangguogang.club; return 404; } server { if ($host = router.jiangguogang.club) { return 301 https://$host$request_uri; } listen 80; server_name router.jiangguogang.club; return 404; }

nginx的配置应该还是很直截了当的,需要说明的我也用注释在上面说明了。

 

最好设置为开机自动启动。

 

frps部署及配置

 

由于我们的frpc是直接通过路由器的“软件中心”安装的,版本是确定的,服务器的版本要和此版本一致,不能直接下载最新版,这个一定要注意。

 

下载地址当然是github:https://github.com/fatedier/frp/releases

 

这个服务器端非常的小巧精悍,除了一个配置文件之外,就只有一个可执行文件了,将其放在服务器的某个目录下,如:/usr/local/frps/

 

其配置文件去除了各种注释之后,内容也不多,/usr/local/frps/frps.ini

[common] #服务器监听端口7000 bind_port = 7000 #服务器web管理界面的访问端口 dashboard_port = 7001 #服务器web管理界面用户名 dashboard_user = admin #服务器web管理界面密码(记得改成你的) dashboard_pwd = 123456 #日志文件 log_file = ./frps.log #日志等级 log_level = info #日志保留天数 log_max_days = 3 #客户端访问token(记得改成你的) token = 654321 #服务器端允许客户端请求的端口范围是5000到5009 allow_ports = 5000-5009 max_pool_count = 5 max_ports_per_client = 0 authentication_timeout = 900 #使用多路复用 tcp_mux = true

注意:

1,让防火墙允许7000和7001端口,5000-5009不必打开,因为这都是本地直接使用的端口

2,让frps自动启动(推荐通过systemd来实现)

3,启动参数:/usr/local/frps/frps -c /usr/local/frps/frps.ini,表示使用frps.ini这个配置文件

4,注意查看日志文件,日志文件就在/usr/local/frps目录下,注意确保目录有写入权限

 

frpc配置

 

frpc是位于路由器上的应用。其实路由器本身也是台Linux主机,你可以打开路由器的ssh上去看看,但我还是建议在配置的frpc的时候,先用你自己的电脑尝试,这样更方便一些。什么?你没有Linux?有虚拟机吗?没有?WSL了解一下。

 

我最后的配置文件是这样的:

[common] #服务器的地址(公网) server_addr = 123.123.123.123 #服务器的监听端口 server_port = 7000 #服务器的token(改成你的) token = 654321 #日志文件配置,调试的时候就靠这个了 log_file = /var/log/frpc.log log_level = info log_max_days = 3 #启用多路复用 tcp_mux = true #协议,除了TCP之外还有一个经过改进的协议,但我这边使用时候遇到了点问题,还是用TCP吧 protocol = tcp #不要登录失败就退出 login_fail_exit = false #应用名称 [dsm] #http是基于TCP协议的,我统一都当成TCP来处理好了 type = tcp #本地IP地址 local_ip = 192.168.1.200 #本地端口 local_port = 5000 #服务器上要打开的端口 remote_port = 5000 #使用加密 use_encryption = true #使用压缩 use_compression = true [photo] type = tcp local_ip = 192.168.1.200 local_port = 80 remote_port = 5002 use_encryption = true use_compression = true [webdav] type = tcp local_ip = 192.168.1.200 local_port = 5005 remote_port = 5005 use_encryption = true use_compression = true [router] type = tcp local_ip = 192.168.1.1 local_port = 80 remote_port = 5003 use_encryption = true use_compression = true

注意:

1,注意查看日志调试,你不可能一点问题都没遇到的,见招拆招吧

2,你要实现确定LAN里的各个Web服务本地可用,如果出现问题,要懂得顺藤摸瓜,定位问题所在

3,调试好了之后,把配置放到路由器的frpc里,路由器虽然提供了图形界面,但我觉得不好用,不如直接弄配置文件

 

最后

 

本文似乎省略了不少内容,是的,比如nginx具体如何安装?防火墙具体如何设置?certbot具体怎么用?如何刷梅林固件?我不打算都写上,否则本文就可能膨胀为“如何使用Linux”了。凡是有能力折腾frp的人,我相信都能通过搜索来解决那些小问题,都能见招拆招。

 

我当然知道还有别的配置方法,我提供的方法仅仅是其中一种可行的,如果大家觉得有什么更好的方法,可以在评论区留言。

 

原文链接:https://www.cnblogs.com/guogangj/p/10891483.html

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享