内网穿透系列文章索引:
- 内网穿透基本原理
- 【内网穿透服务器】远程访问
- 【内网穿透服务器】远程(smb)文件共享
- 【内网穿透服务器】远程FTP服务器共享
- 【内网穿透路由器】远程访问后台
- 【内网穿透硬盘】远程访问
- 【内网穿透计算机】远程访问
- 【内网穿透开机】VNC方式
- 【内网穿透开机】udp广播方式
- 【内网穿透开机】路由器广播方式
- 【内网穿透监控】远程访问
- 【内网穿透Nas】远程访问(本文)
内网穿透话题 实际上已经写过很多了,从服务器,到路由器,从硬盘,到计算机、自制监控,穿透应用场景基本覆盖了包括组网、存储、下载、开机在内的各大情形,基本上能够替代Nas的大部份功能。但是没有Nas穿透的系列始终是不完整的,今天将以群晖系统为例,通过Frp,实现Nas各大服务(包括但不限于ssh服务、DSM服务、移动端DS file、WebDAV Server磁盘映射)的远程访问。
首先梳理出公网想要访问的服务,自定义清楚访问端口:
【ssh】(本地默认端口:22)
自定义访问端口:2222
【DSM服务】(本地默认端口:5000-http 5001-https)
自定义访问端口:443
【DS file】(本地默认端口:5000-http 5001-https)
自定义访问端口:5001
【WebDAV Server】(本地默认端口:5005-http 5006-https)
自定义访问端口:5007【https】
自定义访问端口:5005【http】
#用https的5007访问WebDAV Server的https的5006端口;用https的5005访问WebDAV Server的http的5005端口
【举一反三:http项目】(本地默认端口:x)
自定义访问端口:x【通过https的x端口访问http的x端口】
其次,检查需要提前准备的材料:
- 一台公网服务器(作为FRPS,实现内网穿透);
- Nas一台(作为FRPS)
- 域名解析至公网服务器
- 为域名申请证书,并上传至Nas
根据访问需求,我们需要用到443端口即https服务,因此域名需要申请到https证书。这里以腾讯云为例,我们申请一个免费ssl证书。
证书申请完毕后,将证书导入nas中,“控制面板”——“安全性”——“证书”——“新增”——“添加新证书”——“导入证书”同时设置为“默认证书”,将下载下来的证书Apache目录内三项分别上传
确认后点击配置
,确保全部成为默认证书。
在完成上述准备工作后,可以正式开始了。
一、穿透配置
(1)公网服务器端配置
1. 防火墙开放相应端口:
防火墙开放自定义访问端口以及客户端与服务端进行通信的7000端口、控制台7500端口。
2. 服务端(frps)配置:
服务端(frps)和客户端(frpc)需要相同版本,因此在部署前,需要慎重决定下载的版本号。这里我们用0.35.1这一版本进行部署。
wget https://github.com/fatedier/frp/releases/download/v0.35.1/frp_0.35.1_linux_amd64.tar.gz
tar -zxvf frp_0.35.1_linux_amd64.tar.gz #解压缩:tar xvf 文件名
cd frp_0.35.1_linux_amd64 #进入解压目录
#修改frps.ini文件
sudo vim ./frps.ini
添加以下内容:
[common]
bind_port = 7000 # 客户端与服务端进行通信的端口,即frp服务端口,需与客户端server_port一致
dashboard_port = 7500 # 控制台端口 通过 Dashboard 可以方便的查看 FRP 的状态以及代理统计信息展示 通过 http://[server_addr]:7500 访问 Dashboard 界面,用户名密码默认都为 admin。
#后台保持启动 需要在frp_0.35.1_linux_amd64目录下操作
nohup ./frps -c ./frps.ini &
返回:nohup: ignoring input and appending output to ‘nohup.out’ 代表执行成功,ctrl+c关闭即可;用ps -ef 会在进程中看见frp工作进程。
查询进程与结束进程命令:
ps -ef |grep frpc
kill -9 [进程号]
设置为开机自动启动
sudo vi /lib/systemd/system/frps.service
[Unit]
Description=frps daemon
After=syslog.target network.target
Wants=network.target
[Service]
Type=simple
ExecStart=/root/frp_0.35.1_linux_amd64/frps -c /root/frp_0.35.1_linux_amd64/frps.ini
Restart= always
RestartSec=1min
[Install]
WantedBy=multi-user.target
ExecStart中要配置成自己的路径
#启动frps
systemctl start frps
#将frps设置为开机启动
systemctl enable frps
sudo vi /lib/systemd/system/frps.service 实际上lib或者etc目录皆可。
(2)Nas客户端配置
创建frpc.ini文件添加以下内容(后文会详细说明):
[common]
server_addr = nas.dengxj.net
server_port = 7000
[ssh]
type = tcp
local_ip = 必须填内网地址,不能填127.0.0.1
local_port = 22
remote_port = 2222
[dsm]
type = tcp
local_ip = 192.168.1.208(内网地址)
local_port = 5001
remote_port = 443
[ds_file]
type = tcp
local_ip = 192.168.1.208(内网地址)
local_port = 5001
remote_port = 5001
[https_webdav]
type = tcp
local_ip = 192.168.1.208(内网地址)
local_port = 5006
remote_port = 5007
[http_webdav]
type = tcp
local_ip = 192.168.1.208(内网地址)
local_port = 5004
remote_port = 5005
将配置文件上传至nas自定义目录上。
用docker下载与服务端版本一致(0.35.1)的frpc。“docker”——“注册表”——“frpc”——选择合适版本安装
下载完成后——“映像”——双击安装——自定义名称——高级设置——卷——导入frpc.ini,装载路径:/etc/frp/frpc.ini ——应用
“容器”——“frpc”——“日志”,查看代理是否开启。
二、ssh远程访问
【终端机和 SNMP】>【启动ssh功能】>勾选
【用户账号】>【开启admin】
通过内网ip+22端口
,admin用户身份ssh登陆,sudo -i提权至root
进行穿透后:对应frpc文档中:
[ssh]
type = tcp
local_ip = 192.168.1.208
local_port = 22
remote_port = 2222
通过公网ip+2222端口
,admin用户身份ssh登陆,sudo -i提权至root
三、DSM远程访问
【网络】>【DSM设置】>勾选“将HTTP连接自动重新导向到HTTPS”
进行穿透后:对应frpc文档中:
[dsm]
type = tcp
local_ip = 192.168.1.208
local_port = 5001
remote_port = 443
通过https://域名
形式直接访问,测试:
如果出现:
检查访问是否未带上https头。
四、手机DS file远程访问
DS file远程访问要求格式为域名+端口
的形式,当前nas的5001端口穿透为了服务器的443端口,由于443是https的默认端口,正常登陆将隐藏443的显示,这将导致DS file无法实现远程访问。因此我们可以为nas的5001端口再穿透一个服务器端口,以解决443端口被隐藏的问题。
具体而言,对应frpc文档中:
[ds_file]
type = tcp
local_ip = 192.168.1.208
local_port = 5001
remote_port = 5001
保存后重启【frpc】docker,服务器开放5001端口。
五、WebDAV Server远程访问
远程磁盘映射至本地,能够远程通过磁盘访问的方式访问nas,方便文件的管理。首先前往WebDAV Server套件开启https端口5006
其次修改frpc.ini(对应frpc文档中[https_webdav]),新增穿透;重启docker;服务器放行remote_port端口
[https_webdav]
type = tcp
local_ip = 192.168.1.208
local_port = 5006
remote_port = 5007
开启admin账号,安装NetDrive2,用服务器ip+5007
的admin权限连接WebDAV,并将其映射至驱动。
六、http项目的远程访问
Jellyfin等项目强制http协议访问,双重反向代理可以解决这一问题,这里还是以免费套件WebDAV Server远程访问为例,我们只开放http端口5005。
修改frpc.ini(对应frpc文档中[http_webdav]),新增穿透;重启docker;服务器放行remote_port端口
[http_webdav]
type = tcp
local_ip = 192.168.1.208
local_port = 5004
remote_port = 5005
【Synology 应用程序门户】>【反向代理服务器】>“如图填写”。
这意味着在通过https协议采用“域名+5005端口”的方式访问https协议下nas的5004端口后,nas中的反向代理规则又将https协议下nas的5004这一端口转为http协议下nas的5005端口,换言之,即通过https协议采用“域名+5005端口”的方式最终访问的是http协议下nas的5005端口内容。
安装NetDrive2,用https协议+服务器ip+5005
的admin权限连接WebDAV,并将其映射至驱动。
七、关于nas迁移
迁移网络环境后,服务端无需修改,nas端只需在固定内网ip后,修改frpc.ini文件中local_ip
为新局域网下内网ip,并重启docker即可。
至此,本文也就进入尾声了。希望本文能够起到抛砖引玉之效,也欢迎大家的批评交流。新年即将到来,在此也祝各位新年快乐,健康如意!
如果您有任何疑问或者好的建议,期待你的留言、评论与关注!