1.前言
实现内网穿透的过程是折腾NAS中最麻烦的一部分,这里单独拿出来作为一个记录。
首先,讲一下我的配置,猫盘刷黑群晖DS119j系统,由于猫盘是arm架构,所以无法使用docker,只能实现一些基础功能。
其次,想可以在外地也访问家中的猫盘黑群晖系统,有两种方案:
1.从运营商申请固定IP,直接与NAS映射。
2.购买云服务器,赠送公网IP,通过frp实现内网穿透。
方案1最为简单,但是运营商说由于转为公网IP,电信公司会监控家中网络,我听着有些犹豫,所以就放弃了。
方案2比较折腾,但我恰好有一个阿里云服务器,所以就来折腾这个。
2.具体实施
内网穿透有很多种方案,我这里使用的是常见的frp方案。我们首先大致了解一下他的原理:
frp 主要由 客户端(frpc) 和 服务端(frps) 组成,服务端通常部署在具有公网 IP 的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。 内网服务由于没有公网 IP,不能被非局域网内的其他用户访问。 用户通过访问服务端的 frps,由 frp 负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信。
首先,下载frp的文件https://github.com/fatedier/frp/releases,现在最新的是0.35.1版本。这里一定要注意,由于frp的文件中包含服务器端和客户端,所以要根据自己的具体机器架构选择版本,云服务器是X86架构,装了ubuntu系统,所以选择下载frp_0.35.1_linux_amd64.tar.gz。而我的NAS机器是arm架构,并且似乎不支持64位,所以选择下载frp_0.35.1_linux_arm.tar.gz。
接下来进行配置,首先是对于服务器端。
3.服务器端
打开filezilla,在root下新建一个文件夹frp,并将frp_0.35.1_linux_amd64.tar.gz解压出来文件夹中的两个文件上传进该文件夹:
frps frps.ini
修改其中的frps.ini,改为:
[common] bind_port = 7000 vhost_http_port = 8000 token = key dashboard_port = 7500 dashboard_user = chen dashboard_pwd = chen
接着找到阿里云服务器防火墙配置,将7000和8000端口设置为开放,不然会无法访问。
保存,打开PUTTY连接到云服务器。然后将frps复制到/usr/bin/目录下,使得他可以被执行:
sudo cp frps /usr/bin/
接下来执行frps,并使其工作在后台,这样putty关闭后服务一样能启动:
cd frp/ nohup frpc -c frpc.ini &
万一要更新配置文件,可以杀死这个进程再启动:
ps -aux|grep frp| grep -v grep kill -9 xxx
此时服务器端已经配置完成。
4.客户端
登录黑群晖,打开File Station套件,在里面的共享目录下,新建一个文件夹,文件夹名称为frp。
打开解压出来的frp_0.35.1_linux_arm.tar.gz目录,准备将里面的frpc、frpc.ini两个文件上传到刚才创建的frp文件夹中。
上传之前修改frpc.ini的内容为:
[common] server_addr = xxx server_port = 7000 token = key [dsm] type = tcp local_ip = 127.0.0.1 local_port = 5001 remote_port = 443
然后进行上传。
接下来进入黑群晖,打开控制面板-任务计划,新增-触发的任务-用户定义的脚本,常规选项卡里的任务名称填写frp,事件选择开机,任务设置选项卡里的运行命令-用户定义的脚本框里输入:
/volume1/NASshare/frp/frpc -c /volume1/NASshare/frp/frpc.ini
请注意:/volume1/NASshare/frp/frpc这是我的frpc的路径,你要改成自己的,请用File Station进入找到这个文件,右键属性可以看到路径,并自己替换一下。
勾选刚才添加的frp计划任务,点菜单中的保存。然后右键frp计划任务-运行。
然后再点击这个任务,找到动作-运行结果。如果没有看到结束时间证明客户端在运行。
接着,访问https://xxx(xxx是你云服务器的公网IP),弹出来这个网页不被信任,选择继续访问,就可以访问到你的NAS了。
以上,我们就实现了外地访问家中NAS的功能了。