写在前面
上次ipv6+阿里云DDNS发出后发现,大家貌似都很关注访问内网nas的问题,但是有的朋友即没有内网ip也没有ipv6还有办法访问内部的NAS设备么?(这里还是要插播一句,你如果只是用那么群晖的几大件,ds video、audio、drive这些,其实quick connect就已经够用了,稳定性和速度都能满足要求了),方法其实还是有的,比如花生壳一类的内网传透服务商,但这些都是收费的。这次给大家介绍如何自己搭建内容穿透服务器,这次用到的工具是FRP(https://github.com/fatedier/frp),当然也有一定的门槛,就是必须要有可连公网的设备,我这次用到的是一台阿里云ECS,最最低配版,但价格也不便宜,好像也接近1k/年,当然这个本身就是单位用来做服务器的,算是白嫖,如果你也正好有台这样的设备,推荐使用这个方案。当然如果你是学生党,也可以用学生价入一台ECS,这样你就拥有一台有固定公网ip的虚拟主机了,虽然每个月也要花钱,但肯定比花生壳能做的事情多多了。网上找了一下,价格真的好好好便宜呀,当然这个是网图,不是实时价格,但应该也差不多这个价了。
下面正式开始配置FRP服务器,FRP服务的配置分为服务器端和客户端两步。服务器端就是你拥有公网ip的服务器,客户端就是需要做穿透的nas。服务器的环境是linux,如果你是window系统,配置文件的设置是一样的。
1)FRP下载
FRP可以直接在github主页上下载,进入realease页面(https://github.com/fatedier/frp/releases),选择跟自己系统匹配的文件下载就行了。下载后解压,会发现有frpc, frps, frpc.ini, frps.ini 及其它几个文件(如果是windows版,会看到frpc.exe, frps.exe, frpc.ini, frps.ini )。这里frps和frps.ini分别是客户端的程序和配制文件;frpc和frpc.ini分别是客户端的程序和配制文件。分别将frps文件及配套的配置文件拷贝到服务器上,将frpc文件及配套的配置文件拷贝到客户机上。第一步就完成。
2)服务器端配置
定位到frps所在文件夹,配置过程主要在ini文件中进行,如果是linux的服务器端,可以直接用vi命令来修改,如果是windows端用记事本一类的文本编辑器就可以了。配置文件设置如下:
`bind_port = 6000 #服务端口
vhost_http_port = 5000 #web端口
vhost_https_port = 9000 #https web端口
subdomain_host = www.nideyuming.cn #域名
custom_404_page = /root/frp_0.33.0_linux_amd64.tar.gz/404.html
dashboard_port = 7500 #后台端口 admin adminadmin
dashboard_user = admin #后台用户
dashboard_pwd = admin #后台密码`
修改后的结果如图:
这里面几个端口号都可以根据需要修改,但注意一定不要跟其它端口冲突。主要包括服务器端口设置(我设置的6000),web访问端口(这里设置的5000,因为nas登录一般都是5000方便记忆),https web访问接口,还有后台端口,这个不设置也能用,但还是建议设置一下,这个可以查看frp服务设置与连接情况。其实还可以设置token进一步增加安全性,这里就不设置了,有需要的可以自行去查找相关教程。
另外还要注意看一下,这里用到的端口需要到防火墙打开,如果使用的是阿里云的服务器,则直接到安全组去设置。这里需要开放刚刚设置里用到的端口。同时还需要把ssh访问接口也打开,后面会用到。因为20端口已被服务器的ssh占用,这里可设置为220。
3)服务器端运行
首先定位在frps所在目录,使用如下命令运行frp服务
nohup ./frps -c frps.ini &
这里采用的是后台运行的方式,运行结果会显示在nohup.out文件中,使用如下指令查看运行状态
tail -f nohup.out
由于我的服务器上已经配置过了,再次配置会提示冲突,这里就不截图了。
4)客户端配置
下面要配置客户端,同样首先定位到frpc所在文件夹,修改frpc.ini文件
`[common]
server_addr = xx.xx.xx.xx #服务器ip地址
server_port = 6000 #前面设置的服务器端口
[ssh] #首先配置ssh
type = tcp
local_ip = 192.168.1.69 #本地nas的ip地址
local_port = 22 #ssh使用的本地端口
remote_port = 220 #远程端口,注意这个端口必须在防火墙开放
#公网访问内部web服务器以http方式
[nas1] #nas1的dsm管理页面配置
type = http
local_port = 5000
custom_domains = nas1.nideyuming.cn #用nas1.nideyuming.cn:5000 访问DSM
[qb1] #qBittorrent
type = http
local_port = 9000 #qBittorrent本地端口
custom_domains =qb1.nideyuming.cn #用qb1.nideyuming.cn:5000 访问
[tr1] #Transmission
type = http
local_port = 9001 #Transmission本地端口
custom_domains =tr1.nideyuming.cn #用tr1.nideyuming.cn:5000 访问
[jf1] #jellyfin
type = http
local_port = 9002 #jellyfin本地端口
custom_domains = jf1.nideyuming.cn #用jf1.nideyuming.cn:5000 访问`
上面的配置文件设置了ssh登录、dsm管理、qBittorrent、Transmission和jellyfin的内网穿透,可以直接抄去用,当然端口要设置成你正在使用的端口,另外域名也需要修改。可以看到这里qb, tr, jf都是使用的服务器的5000端口,而服务器是通过域名来区分穿透到哪个客户端端口的。所以这里需要同时设置几个二级域名的解析,这个设置不复杂,截个图吧。
5)客户端运行
首先定位在frpc所在目录,使用如下命令运行frp服务
nohup ./frpc -c frpc.ini &
运行结果同样会显示在nohup.out文件中,使用如下指令查看运行状态
tail -f nohup.out
同样由于我已经配置过了,会提示冲突
现在就可以通过二级域名加5000端口来访问相关网页了,测试一下访问dsm和jellyfin的访问效果
访问没有问题,操作也还算流畅,但试了下通过frp看jellyfin上的电影,由于是丐版的1M带宽服务器,效果不太理想,因为frp是需要通过服务器来转发数据的(frp也提供了一个p2p的穿透模式,也去试用了,效果不理想),所以还是建议主要用于ssh,dsm等不需要大量数据交换的穿透。
6)frps后台
再看一下frps的后台运行情况,在地址框中输入www.nideyuming.cn:7500
,跳出账号密码窗口,输入之前设置的admin,就可以进入后台了。TCP里显示着是ssh的穿透代理,我这边有两台设备,设置了两个,分别采用220和222端口;Http里显示的是web端的代理,可以看到这里都是5000端口。
7)结语
从流程看其实并不复杂,修改一下配置文件,直接运行就可以了。修改配置文件的时候需要注意端口号不能填错,也不要混淆本地端口和服务器端口。最后的最后,不要忘记在防火墙中开放相关端口。
ps:如果有多台nas都想穿透怎么办?参照上面客户端的设置,但注意[nas1]里的内容需要修改成[nas2],只要不重复就行。