群晖外网访问,Transmission PT安装https SS
群晖现代家庭很多都配置了,数据存储、共享非常方便。
如果开通外网访问的话,会更加便捷!成为家庭私有云。
比如,外网直接访问DS-PHOTO, DS File Station, DS Web Station。。。
对于外网访问,安全肯定是第一位的,出什么“艳照门”就不好了-
所以,这里讲的是,如果用SSL证书加强保护私有云,包括群晖的上PT工具 - Transmission
Abstract: How to secure Transmission Web-UI(http/RPC) through SSL(https), in Synology NAS (nginx)
[2017-11] 更新:升级到DSM 6.1了,有些更新,见最后。
家庭私有云拓扑图:
你需要有:
- 群晖NAS,黑的或白的, DSM 5.X
- 智能路由,能刷梅林固件, 7.5
- VPS,番羽qiang利器
- 个人域名,免费或阿里云67元的
- 免费SSL证书(Let's Encrypt)
先给一个效果图:
假设AAA.com,是我们申请的个人域名
远程通过 https//nas.AAA.com,访问NAS的管理页面。注意,“https”是绿锁:
nas ssl.png远程通过 https//file.AAA.com,访问NAS的文件管理器,远程上传、下载:
FileStation
远程通过 https//pt.AAA.com,访问NAS PT - Transmission的Web管理页面:注意,“https”是绿锁:
TR ssl.png
下面是步骤记录,注:如果跟网上一搜一大把的教程重复的,我就略过了,只放链接。网上没有的,才会详细写。
1. 参考这里:黑群晖+梅林路由:外网访问NAS整体解决方案
完成以下操作:
-
购买个人域名(假设是
AAA.com
)- 通过路由器插件alidns配合DDNS解析(适用有公网IP用户)
- 通过Frp穿透(适用内网或公网IP用户)
-
购买VPS
路由器安装插件Frpc,跟VPS实现内网穿透(适用于内网IP用户)。参考:【填坑完毕】内网穿透利器Frp一键安装脚本及设置教程 - 插件 - KoolShare -
开启路由器远程访问管理员界面功能,并禁用HTTP访问
黑群晖+梅林路由:外网访问NAS整体解决方案 -
申请SSL DV加密证书,去掉恼人的“该链接不安全”(阿里云,腾讯云,SSLforFree三种)
黑群晖+梅林路由:外网访问NAS整体解决方案
2. 路由器 插件Frpc设置端口转发(设置转发规则方法)
服务器端的Frps已经装好了,下面,本地配置Frpc。
路由器,梅林固件,软件中心里,安装Frpc:
注意,要把虚拟内存也启用一下,Frpc启动时会用到,正常时可以关闭虚拟内存
Frpc-inst.png
设置Frp的端口转发:注意这里,全是安全的 https !!
3. 群晖全部改用HTTPS访问,并设置各套件HTTPS访问端口
这时,你就可以测试一下了:
输入:https://nas.AAA.com -> 会远程打开NAS管理页面,但浏览器提示“不安全”,“https”是红叉!下面,我们来消除这个红叉。
4. 群晖安装SSL证书
VPS,用命令行申请免费证书,我是用的:Let's Encrypt https://certbot.eff.org/#centos6-other,免费三个月,到期免费续约。
可以一次签署多个次级域名,比如:AAA.com nas.AAA.com pt.AAA.com file.AAA.com
安装:
wget https://dl.eff.org/certbot-auto /root/
chmod a+x certbot-auto
产生证书:
/root/certbot-auto certonly
# 选择2 - standalone
# domain: AAA.com nas.AAA.com pt.AAA.com file.AAA.com。。。
产生证书:/etc/letsencrypt/live/AAA.com/
续期:./path/to/certbot-auto renew
文件名 内容
cert.pem 服务端证书
chain.pem 浏览器需要的所有证书但不包括服务端证书,比如根证书和中间证书
fullchain.pem 包括了cert.pem和chain.pem的内容
privkey.pem 证书的私钥
证书(/etc/letsencrypt/live/AAA.com/),WinSCP下载到本地:
Paste_Image.png群晖 打开控制面板 -> Security -> Certificationi -> Import certificate
import导入我们从VPS上下载的证书文件:
ssl file.png
好了,这时,访问 https://nas.AAA.com,浏览器https
已经变成绿锁了!哈哈~
但如果群晖安装了PT工具 - Transmission,它的管理页面是 http://<NAS_IP>:9091
,不能直接映射到Frp的https上去,只能不通过SSL远程访问,怎么破?
这种不安全暴露,很危险啊,万一泄露Transmission密码,辛辛苦苦PT下载的几个T的文件,给人全删了怎么办?
这时,就需要一点点nginx操作了 -->
5. 群晖通过 nginx,配置反向代理,把https,映射到Transmssion的http 9091端口 (其实是RPC)
路线:
远程 -> https 访问到VPS -> Frps通过https转发到路由器 -> Frpc映射到群晖 https:8080端口 -> Nginx转发给Transmission http:9091
- 配置Nginx:
SSH to NAS,备份一下:
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
WinSCP,把证书,改名为:transmission.crt
, transmission.key
,上传到NAS:/etc/nginx/ssl/
把新的nginx.conf
内容改为如下,然后上传到 /etc/nginx/
:
# /etc/nginx/nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
access_log off;
sendfile on;
server_tokens off;
keepalive_timeout 65;
client_max_body_size 2047M;
server {
listen 8080 default_server ssl;
ssl_certificate /etc/nginx/ssl/transmission.crt;
ssl_certificate_key /etc/nginx/ssl/transmission.key;
server_name transmission;
access_log /var/log/nginx/transmission.access.log;
location / {
proxy_pass http://localhost:9091;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/nginx-default;
}
}
}
重启一下Nginx服务:
DiskStationZQ> nginx -s stop
DiskStationZQ> nginx
DiskStationZQ>
# 没有错误提示,说明OK了!
欧了,现在远程浏览器打开:https://pt.AAA.com,就会直接显示Transmission,而且是绿锁啦!
如果远程打开Transmission界面,显示空白页面,解决方案:http://www.jianshu.com/p/12657ef9d77e
证书更新
免费证书,三个月后续约时,使用renew命令,如果出现告警:
“Attempting to renew cert from /etc/letsencrypt/renewal/example.com.conf produced an unexpected error: Problem binding to port 443: Could not bind to IPv4 or IPv6.. Skipping.”
这是因为:renew时,http相关的service没有关闭
解决:
sudo service nginx stop
cd ~、
sudo certbot-auto renew
sudo service nginx start
#如果你用的是"frps"服务,则:
service frps stop
#renew之后运行:
frps restart
[2017-11] 更新:升级到DSM 6.1了,nginx.conf有变化:
/etc/nginx# ls (以下两个文件都要改)
nginx.conf nginx.conf.default
另外,SSL证书,直接在DSM6.1控制面板里导入就行,不需要在nginx.conf里加
server {
listen 8080 default_server ssl;
listen [::]:8080 default_server ssl;
server_name Transmission;
location / {
proxy_pass http://localhost:9091;
}
include app.d/www.*.conf;
include app.d/alias.*.conf;
include /usr/syno/share/nginx/conf.d/www.*.conf;
include conf.d/www.*.conf;
}
根据网友的反馈,DSM6引入了反向代理,那就很简单了:
dsm-proxy
参考:
黑群晖+梅林路由:外网访问NAS整体解决方案 http://post.smzdm.com/p/568990/?nozhiyou
群晖DSM自动备份到异地OpenWrt硬盘 - 进阶篇(Syncthing-Inotify) - 简书
http://www.jianshu.com/p/92ce0050ebc7