赞
踩
内网穿透系列文章索引:
内网穿透话题 实际上已经写过很多了,从服务器,到路由器,从硬盘,到计算机、自制监控,穿透应用场景基本覆盖了包括组网、存储、下载、开机在内的各大情形,基本上能够替代Nas的大部份功能。但是没有Nas穿透的系列始终是不完整的,今天将以群晖系统为例,通过Frp,实现Nas各大服务(包括但不限于ssh服务、DSM服务、移动端DS file、WebDAV Server磁盘映射、emby)的远程访问。
【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端口 【emby】(本地默认端口:80096-http 不支持-https) 自定义访问端口:80096【https双重反代以访问http】 【举一反三:http项目】(本地默认端口:x) 自定义访问端口:x【通过https的x端口访问http的x端口】
根据访问需求,我们需要用到443端口即https服务,因此域名需要申请到https证书。这里以腾讯云为例,我们申请一个免费ssl证书。
证书申请完毕后,将证书导入nas中,“控制面板”——“安全性”——“证书”——“新增”——“添加新证书”——“导入证书”同时设置为“默认证书”,将下载下来的证书Apache目录内三项分别上传
确认后点击配置
,确保全部成为默认证书。
防火墙开放自定义访问端口以及客户端与服务端进行通信的7000端口、控制台7500端口。
服务端(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目录皆可。
创建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 [emby] type = tcp local_ip = 192.168.1.208(内网地址) local_port = 8097 remote_port = 8096
将配置文件上传至nas自定义目录上。
用docker下载与服务端版本一致(0.35.1)的frpc。“docker”——“注册表”——“frpc”——选择合适版本安装
下载完成后——“映像”——双击安装——自定义名称——高级设置——卷——导入frpc.ini,装载路径:/etc/frp/frpc.ini ——应用——“容器”——“frpc”——开启
“容器”——“frpc”——“日志”,查看代理是否开启。
设置容器开机自启动:
1.ssh登陆
2. sudo -i 切换root用户
3.使用docker ps命令,查看容器id
4.使用命令:docker update --restart=always 容器id
【终端机和 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设置】>勾选“将HTTP连接自动重新导向到HTTPS”
进行穿透后:对应frpc文档中:
[dsm]
type = tcp
local_ip = 192.168.1.208
local_port = 5001
remote_port = 443
通过https://域名
形式直接访问,测试:
如果出现:
检查访问是否未带上https头。
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,方便文件的管理。首先前往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,并将其映射至驱动。
Jellyfin、emby等媒体项目强制http协议访问,双重反向代理可以解决这一问题,这里以免费套件emby远程访问为例。
修改frpc.ini(对应frpc文档中[emby]),新增穿透;重启docker;服务器放行remote_port端口
[emby]
type = tcp
local_ip = 192.168.1.208
local_port = 8097
remote_port = 8096
【应用程序门户】>【反向代理服务器】>“如图填写”。
这意味着在通过https协议采用“域名+8096端口”的方式访问https协议下nas的8097端口后,nas中的反向代理规则又将https协议下nas的8097这一端口转为http协议下nas的8096端口,换言之,即通过https协议采用“域名+8096端口”的方式最终访问的是http协议下nas的8096端口内容。
迁移网络环境后,服务端无需修改,nas端只需在固定内网ip后,修改frpc.ini文件中local_ip
为新局域网下内网ip,并重启docker即可。
至此,本文也就进入尾声了。希望本文能够起到抛砖引玉之效,也欢迎大家的批评交流。新年即将到来,在此也祝各位新年快乐,健康如意!
如果您有任何疑问或者好的建议,期待你的留言、评论与关注!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。