最近从一款游戏(台服MapleStory枫之谷)退坑,手头上回收了一点资金,想着家里的Unraid处于无校验盘状态,感觉实在有点危险,毕竟这台NAS主机是家人共用,并且我自身也有不少重要数据存放在里面,于是就咬咬牙买了一台群晖DS920+,打算先在公司宿舍跑起来,后续再搬回家里重新部署使用。(所以后续还会有一点小更新)  这时出现了点小问题,公司宿舍集体报装的宽带,480元2年100M,属于酒店商用无线WIFI路由器的宽带方案,理所当然地就不享受公网IP的待遇,所幸的是上游网关并没有限制太狠,高位端口都处于开放状态,所以就能使用一些内网穿透方案实现外部远程访问。 原本我还想着直接利用wireguard或者zerotier之类的虚拟局域网手段,但考虑到每台设备都要配置一次客户端,还要手动启动接入太麻烦了,加上目前这台云服务器的流量基本用不完,对接群晖DSM和qbittorrent管理界面之类的流量开销也不大,于是决定转向FRP方案 #### 说在开头 我个人比较折腾,群晖的DSM门户访问默认使用5000和5001端口(分别对应http和https),而80和443通常会被web station之类的其他应用占用,为了尽可能不改动群晖的网络配置(其实是因为我没完全搞懂群晖系统内部是怎么配置网络的),而使用FRP穿透方案可以不用每次访问都指定5001端口访问https,所以下面的描述还涉及反向代理配置 一通糊弄之后,就实现了 `https://ds920.abc.com`访问绝大部分群晖服务的效果,后续还能通过ds920.abc.com:20000实现SSH接入群晖后台 拓补图大致如下,其中ssl证书部分由云服务器的nginx反代提供,相对应地也要把证书导入到群晖中  #### 环境总览 ``` 服务端: 云服务器, ubuntu 22.04 客户端: 群晖DS920+, CPU: J4125 ``` #### 下载FRP [https://github.com/fatedier/frp/releases]() 根据系统和架构下载对应版本,这里服务端和客户端都是选择linux_amd64 找办法上传到双方后,解压 `tar -xvf frp_*_linux_amd64.tar.gz`得到如下文件 ```bash root@VM-20-5-debian:/home/frp# tree -L 2 . ├── frp_0.44.0_linux_amd64.tar.gz ├── frpc ├── frpc_full.ini ├── frpc.ini ├── frps ├── frps_full.ini ├── frps.ini ├── frps.log └── LICENSE ``` 其中 `frps`是服务端,`frpc`是客户端 #### 配置FRP ##### 服务端 ###### 配置frps.ini ```ini [common] bind_port = 7000 vhost_http_port = 5000 vhost_https_port = 5001 # 为了有那么点安全性, 这里添加了token与客户端通信 token = 123456789@syno use_compression = true use_encryption = true # 以下是frps自带的查看面板, 不需要可以去掉不写 dashboard_port = 10000 dashboard_user = zakikun dashboard_pwd = 123456789@frps # 以下是日志相关, 不需要可以去掉不写 log_file = /home/frp/frps.log log_level = info log_max_days = 3 ``` 然后就可以通过 `./frps -c frps.ini`启动frps,出现 `start proxy success`之类的信息则启动成功,如果有端口占用等情况出现请自行排查 ###### 开机启动frps 虽然云服务器不是经常重启,但每次都要手动启动frps的话就未免太不优雅了,写一下service让它开机启动 `vim /usr/lib/systemd/system/frps.service` ```markdown [Unit] Description=Frp Server Service After=network.target [Service] Type=simple User=nobody Restart=on-failure RestartSec=5s ExecStart=/home/frp/frps -c /home/frp/frps.ini [Install] WantedBy=multi-user.target ``` 最后运行 `systemctl enable frps`启用开机启动,从这之后如果想停止或启动frps,可以用 `systemctl start/stop frps`代替上面的启动方法 ##### 客户端 通过[https://ds920.abc.com]()访问群晖DSM和20000端口访问SSH为例 ###### 配置frpc.ini ```ini [common] server_addr = blog.zakikun.com # 这里可以填写域名或者服务器IP server_port = 7000 # 服务端的bind_port token = 123456789@synology # 服务端的token use_compression = true use_encryption = true [syno-http] type = http local_ip = 127.0.0.1 local_port = 80 # 这里填写80是为了访问时不用手动指定5000端口, 涉及反向代理 custom_domains = ds920.abc.com use_compression = true use_encryption = true [syno-https] type = https local_ip = 127.0.0.1 local_port = 443 # 这里填写443是为了访问时不用手动指定5001端口, 涉及反向代理 custom_domains = ds920.abc.com use_compression = true use_encryption = true [syno-ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 20000 ``` 临时启动执行 `./frpc -c frpc.ini`即可 ###### 开机启动frpc 群晖自带计划任务功能,所以开机启动比较方便 ```bash # 具体路径自行替换 cd /var/services/homes/Zakikun/frp && nohup ./frpc -c frpc.ini >/dev/null 2>&1 & ``` #### 其他工作 ##### 开启SSH  ##### 云服务器配置反代 ```nginx # Reverse Proxy (if needed) location / { proxy_pass http://ds920.abc.com:5000$request_uri; add_header X-Served-By $host; proxy_set_header Host $host; proxy_set_header X-Forwarded-Scheme $scheme; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; } ``` ##### 群晖配置反代  记得导入域名对应的ssl证书并设置默认,还要开启DSM的https访问  #### 非强迫症人群正确做法 1. 上面配置frpc.ini时把http和https的 `local_port`分别改为 `5000`和 `5001` 2. `控制面板-登录门户-高级-反向代理`设置去掉 3. `控制面板-登录门户-"自动将DSM桌面的HTTP连接重定向到HTTPS"`勾选上后保存 这样后续访问 `https://ds920.abc.com`时会最终自动跳转为 `https://ds920.abc.com:5001`,也不影响内部各个应用套件之间的跳转,比如Synology Office打开文件后点击左上角进入Synology Drive就不会错误 Loading... 最近从一款游戏(台服MapleStory枫之谷)退坑,手头上回收了一点资金,想着家里的Unraid处于无校验盘状态,感觉实在有点危险,毕竟这台NAS主机是家人共用,并且我自身也有不少重要数据存放在里面,于是就咬咬牙买了一台群晖DS920+,打算先在公司宿舍跑起来,后续再搬回家里重新部署使用。(所以后续还会有一点小更新)  这时出现了点小问题,公司宿舍集体报装的宽带,480元2年100M,属于酒店商用无线WIFI路由器的宽带方案,理所当然地就不享受公网IP的待遇,所幸的是上游网关并没有限制太狠,高位端口都处于开放状态,所以就能使用一些内网穿透方案实现外部远程访问。 原本我还想着直接利用wireguard或者zerotier之类的虚拟局域网手段,但考虑到每台设备都要配置一次客户端,还要手动启动接入太麻烦了,加上目前这台云服务器的流量基本用不完,对接群晖DSM和qbittorrent管理界面之类的流量开销也不大,于是决定转向FRP方案 #### 说在开头 我个人比较折腾,群晖的DSM门户访问默认使用5000和5001端口(分别对应http和https),而80和443通常会被web station之类的其他应用占用,为了尽可能不改动群晖的网络配置(其实是因为我没完全搞懂群晖系统内部是怎么配置网络的),而使用FRP穿透方案可以不用每次访问都指定5001端口访问https,所以下面的描述还涉及反向代理配置 一通糊弄之后,就实现了 `https://ds920.abc.com`访问绝大部分群晖服务的效果,后续还能通过ds920.abc.com:20000实现SSH接入群晖后台 拓补图大致如下,其中ssl证书部分由云服务器的nginx反代提供,相对应地也要把证书导入到群晖中  #### 环境总览 ``` 服务端: 云服务器, ubuntu 22.04 客户端: 群晖DS920+, CPU: J4125 ``` #### 下载FRP [https://github.com/fatedier/frp/releases]() 根据系统和架构下载对应版本,这里服务端和客户端都是选择linux_amd64 找办法上传到双方后,解压 `tar -xvf frp_*_linux_amd64.tar.gz`得到如下文件 ```bash root@VM-20-5-debian:/home/frp# tree -L 2 . ├── frp_0.44.0_linux_amd64.tar.gz ├── frpc ├── frpc_full.ini ├── frpc.ini ├── frps ├── frps_full.ini ├── frps.ini ├── frps.log └── LICENSE ``` 其中 `frps`是服务端,`frpc`是客户端 #### 配置FRP ##### 服务端 ###### 配置frps.ini ```ini [common] bind_port = 7000 vhost_http_port = 5000 vhost_https_port = 5001 # 为了有那么点安全性, 这里添加了token与客户端通信 token = 123456789@syno use_compression = true use_encryption = true # 以下是frps自带的查看面板, 不需要可以去掉不写 dashboard_port = 10000 dashboard_user = zakikun dashboard_pwd = 123456789@frps # 以下是日志相关, 不需要可以去掉不写 log_file = /home/frp/frps.log log_level = info log_max_days = 3 ``` 然后就可以通过 `./frps -c frps.ini`启动frps,出现 `start proxy success`之类的信息则启动成功,如果有端口占用等情况出现请自行排查 ###### 开机启动frps 虽然云服务器不是经常重启,但每次都要手动启动frps的话就未免太不优雅了,写一下service让它开机启动 `vim /usr/lib/systemd/system/frps.service` ```markdown [Unit] Description=Frp Server Service After=network.target [Service] Type=simple User=nobody Restart=on-failure RestartSec=5s ExecStart=/home/frp/frps -c /home/frp/frps.ini [Install] WantedBy=multi-user.target ``` 最后运行 `systemctl enable frps`启用开机启动,从这之后如果想停止或启动frps,可以用 `systemctl start/stop frps`代替上面的启动方法 ##### 客户端 通过[https://ds920.abc.com]()访问群晖DSM和20000端口访问SSH为例 ###### 配置frpc.ini ```ini [common] server_addr = blog.zakikun.com # 这里可以填写域名或者服务器IP server_port = 7000 # 服务端的bind_port token = 123456789@synology # 服务端的token use_compression = true use_encryption = true [syno-http] type = http local_ip = 127.0.0.1 local_port = 80 # 这里填写80是为了访问时不用手动指定5000端口, 涉及反向代理 custom_domains = ds920.abc.com use_compression = true use_encryption = true [syno-https] type = https local_ip = 127.0.0.1 local_port = 443 # 这里填写443是为了访问时不用手动指定5001端口, 涉及反向代理 custom_domains = ds920.abc.com use_compression = true use_encryption = true [syno-ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 20000 ``` 临时启动执行 `./frpc -c frpc.ini`即可 ###### 开机启动frpc 群晖自带计划任务功能,所以开机启动比较方便 ```bash # 具体路径自行替换 cd /var/services/homes/Zakikun/frp && nohup ./frpc -c frpc.ini >/dev/null 2>&1 & ``` #### 其他工作 ##### 开启SSH  ##### 云服务器配置反代 ```nginx # Reverse Proxy (if needed) location / { proxy_pass http://ds920.abc.com:5000$request_uri; add_header X-Served-By $host; proxy_set_header Host $host; proxy_set_header X-Forwarded-Scheme $scheme; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; } ``` ##### 群晖配置反代  记得导入域名对应的ssl证书并设置默认,还要开启DSM的https访问  #### 非强迫症人群正确做法 1. 上面配置frpc.ini时把http和https的 `local_port`分别改为 `5000`和 `5001` 2. `控制面板-登录门户-高级-反向代理`设置去掉 3. `控制面板-登录门户-"自动将DSM桌面的HTTP连接重定向到HTTPS"`勾选上后保存 这样后续访问 `https://ds920.abc.com`时会最终自动跳转为 `https://ds920.abc.com:5001`,也不影响内部各个应用套件之间的跳转,比如Synology Office打开文件后点击左上角进入Synology Drive就不会错误 最后修改:2022 年 07 月 26 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 1 如果觉得我的文章对你有用,请随意赞赏
1 条评论
原来也用frp,后来发现nps是个好东西,有类似,下发配置给客户端那种功能呢