【内网穿透Nas】基于Frp实现群晖的远程访问(ssh、DSM、DS file、WebDAV Server)


内网穿透系列文章索引:


内网穿透话题 实际上已经写过很多了,从服务器,到路由器,从硬盘,到计算机、自制监控,穿透应用场景基本覆盖了包括组网、存储、下载、开机在内的各大情形,基本上能够替代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】基于Frp实现群晖的远程访问(ssh、DSM、DS file、WebDAV Server)
【内网穿透Nas】基于Frp实现群晖的远程访问(ssh、DSM、DS file、WebDAV Server)
证书申请完毕后,将证书导入nas中,“控制面板”——“安全性”——“证书”——“新增”——“添加新证书”——“导入证书”同时设置为“默认证书”,将下载下来的证书Apache目录内三项分别上传
【内网穿透Nas】基于Frp实现群晖的远程访问(ssh、DSM、DS file、WebDAV Server)
确认后点击配置,确保全部成为默认证书。

在完成上述准备工作后,可以正式开始了。

一、穿透配置

(1)公网服务器端配置

1. 防火墙开放相应端口:

【内网穿透Nas】基于Frp实现群晖的远程访问(ssh、DSM、DS file、WebDAV Server)

防火墙开放自定义访问端口以及客户端与服务端进行通信的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工作进程。

【内网穿透Nas】基于Frp实现群晖的远程访问(ssh、DSM、DS file、WebDAV Server)
查询进程与结束进程命令

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

【内网穿透Nas】基于Frp实现群晖的远程访问(ssh、DSM、DS file、WebDAV Server)

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】基于Frp实现群晖的远程访问(ssh、DSM、DS file、WebDAV Server)
将配置文件上传至nas自定义目录上。

【内网穿透Nas】基于Frp实现群晖的远程访问(ssh、DSM、DS file、WebDAV Server)
用docker下载与服务端版本一致(0.35.1)的frpc。“docker”——“注册表”——“frpc”——选择合适版本安装

【内网穿透Nas】基于Frp实现群晖的远程访问(ssh、DSM、DS file、WebDAV Server)
下载完成后——“映像”——双击安装——自定义名称——高级设置——卷——导入frpc.ini,装载路径:/etc/frp/frpc.ini ——应用

【内网穿透Nas】基于Frp实现群晖的远程访问(ssh、DSM、DS file、WebDAV Server)
“容器”——“frpc”——“日志”,查看代理是否开启。
【内网穿透Nas】基于Frp实现群晖的远程访问(ssh、DSM、DS file、WebDAV Server)


二、ssh远程访问

【终端机和 SNMP】>【启动ssh功能】>勾选
【内网穿透Nas】基于Frp实现群晖的远程访问(ssh、DSM、DS file、WebDAV Server)
【用户账号】>【开启admin】
【内网穿透Nas】基于Frp实现群晖的远程访问(ssh、DSM、DS file、WebDAV Server)
通过内网ip+22端口,admin用户身份ssh登陆,sudo -i提权至root
【内网穿透Nas】基于Frp实现群晖的远程访问(ssh、DSM、DS file、WebDAV Server)

进行穿透后:对应frpc文档中:

[ssh]
type = tcp
local_ip = 192.168.1.208
local_port = 22
remote_port = 2222

通过公网ip+2222端口,admin用户身份ssh登陆,sudo -i提权至root
【内网穿透Nas】基于Frp实现群晖的远程访问(ssh、DSM、DS file、WebDAV Server)


三、DSM远程访问

【网络】>【DSM设置】>勾选“将HTTP连接自动重新导向到HTTPS”
【内网穿透Nas】基于Frp实现群晖的远程访问(ssh、DSM、DS file、WebDAV Server)

进行穿透后:对应frpc文档中:

[dsm]
type = tcp
local_ip = 192.168.1.208
local_port = 5001
remote_port = 443

通过https://域名形式直接访问,测试:

【内网穿透Nas】基于Frp实现群晖的远程访问(ssh、DSM、DS file、WebDAV Server)

如果出现:
【内网穿透Nas】基于Frp实现群晖的远程访问(ssh、DSM、DS file、WebDAV Server)
检查访问是否未带上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端口。

【内网穿透Nas】基于Frp实现群晖的远程访问(ssh、DSM、DS file、WebDAV Server)
【内网穿透Nas】基于Frp实现群晖的远程访问(ssh、DSM、DS file、WebDAV Server)


五、WebDAV Server远程访问

远程磁盘映射至本地,能够远程通过磁盘访问的方式访问nas,方便文件的管理。首先前往WebDAV Server套件开启https端口5006
【内网穿透Nas】基于Frp实现群晖的远程访问(ssh、DSM、DS file、WebDAV Server)

其次修改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,并将其映射至驱动。
【内网穿透Nas】基于Frp实现群晖的远程访问(ssh、DSM、DS file、WebDAV Server)
【内网穿透Nas】基于Frp实现群晖的远程访问(ssh、DSM、DS file、WebDAV Server)


六、http项目的远程访问

Jellyfin等项目强制http协议访问,双重反向代理可以解决这一问题,这里还是以免费套件WebDAV Server远程访问为例,我们只开放http端口5005。
【内网穿透Nas】基于Frp实现群晖的远程访问(ssh、DSM、DS file、WebDAV Server)
修改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 应用程序门户】>【反向代理服务器】>“如图填写”。
【内网穿透Nas】基于Frp实现群晖的远程访问(ssh、DSM、DS file、WebDAV Server)

这意味着在通过https协议采用“域名+5005端口”的方式访问https协议下nas的5004端口后,nas中的反向代理规则又将https协议下nas的5004这一端口转为http协议下nas的5005端口,换言之,即通过https协议采用“域名+5005端口”的方式最终访问的是http协议下nas的5005端口内容。

安装NetDrive2,用https协议+服务器ip+5005的admin权限连接WebDAV,并将其映射至驱动。

【内网穿透Nas】基于Frp实现群晖的远程访问(ssh、DSM、DS file、WebDAV Server)

【内网穿透Nas】基于Frp实现群晖的远程访问(ssh、DSM、DS file、WebDAV Server)


七、关于nas迁移

迁移网络环境后,服务端无需修改,nas端只需在固定内网ip后,修改frpc.ini文件中local_ip为新局域网下内网ip,并重启docker即可。


至此,本文也就进入尾声了。希望本文能够起到抛砖引玉之效,也欢迎大家的批评交流。新年即将到来,在此也祝各位新年快乐,健康如意!


如果您有任何疑问或者好的建议,期待你的留言、评论与关注!

上一篇:iis部署asp.net core项目只能查看数据,无法新增、删除和修改


下一篇:利用WebDAV获取Shell