背景环境
群晖NAS + CentOS8主机
Transmission部署在CentOS主机上,通过NFS协议挂载群晖NAS的DownLoad文件夹作为PT下载的存储目录;通过内网穿透实现外网访问Transmission,实现远程下载;基于群晖NAS文件系统来管理下载好的资源。
安装 Transmission
使用yum安装
Transmission 包含在 EPEL 拓展仓库中,安装前需要安装 epel-release
yum -y install epel-release
yum -y update
EPEL 源安装成功后,即可安装 Transmission
yum install transmission-daemon
配置
安装成功后,输入 systemctl start transmission-daemon.service
即可启动 Transmission。如果用浏览器打开 web 端(http:// 域名:9091 或 http://IP 地址:9091),会提示 “403: Forbidden”(页面打不开可能是防火墙没有放行相应端口),这是因为 Transmission 还没配置好。
因而,需要输入 systemctl stop transmission-daemon.service
停止 Transmission 服务,再进行配置。
注意,如果安装后没有启动过 Transmission,是不会生成配置文件。因而,需要先启动服务,再停止服务,生成 json 配置文件后再进行配置。值得注意的是,如果在服务启动时修改配置文件再重启服务,配置文件会自动恢复成重启前的内容。
接下来,就可以打开配置文件:
vi /var/lib/transmission/.config/transmission-daemon/settings.json
配置文件的参数非常多,可按自己需求进行修改。如果对 vi 编辑器不了解,Google 或百度一下就有简单的使用介绍。以下条目的修改是本人自己在用的参数:
"download-dir":"/data/nas-download/pt",
"encryption": 2,
“dht-enabled”: false,
"rpc-authentication-required": true,
"rpc-enabled": true,
"rpc-password": "输入你的管理密码",
"rpc-username": "管理你的用户名",
"rpc-whitelist-enabled": false,
更多配置参数,可去 Editing-Configuration-Files探索。
配置好后,保存退出 json 文件,再次输入 systemctl start transmission-daemon.service
启动 Transmission 服务,即可用浏览器打开 web 端(http://域名:9091 或 http://IP 地址:9091),上传种子进行下载。
使用 systemctl enable transmission-daemon
设置服务开机启动。
由于我transmission的下载目录时通过NFS挂载到下载机上,在使用过程中一直出现Permission denied
问题,无论如何设置目录权限,都没有解决。后来通过修改transmission-daemon
服务运行用户解决:
vim /usr/lib/systemd/system/transmission-daemon.servic
修改User
为root
。
注意:修改启动用户后,新的配置文件为~/.config/transmission-daemon/settings.json
Web UI 美化界面
Transmission 自带的网页 UI 比较简陋,可以安装 transmission-web-control进行美化:
wget https://github.com/ronggang/transmission-web-control/raw/master/release/install-tr-control.sh --no-check-certificate
sh install-tr-control.sh
制作种子
transmission-create -p -o ./example.torrent -t https://pt.pt-example.com/announce.php -s 4096 ./example.mkv
参数说明:
- -p 表示这是私用的种子,这个 PT 必须要加上
- -o 生成的种子输出位置,不要忘记把名字打上
- -t tracker 服务器地址,自行查询各大站点
- -s 每个文件块的大小,单位是 KB,设置的 4096,也就是 4M
内网穿透实现Transmission的外网访问
简单来说,要想外网访问家中的transmission,需要路由器通过端口映射的方式访问;由于我家宽带没有外网ip,想在外面访问pt服务只能使用外网穿透的方式,我选择frp来实现。使用内网穿透需要有一台具有外网ip的服务器。
服务端配置
服务器作为公网访问唯一的固定地址,即作为 server 端。内网客户端作为 client 端,会主动向 server 端创建连接,此时再从 server 端反向发送数据即可实现内网穿透。
wget https://github.com/fatedier/frp/releases/download/v0.34.3/frp_0.34.3_linux_amd64.tar.gz
tar -zxvf frp_0.34.3_linux_amd64.tar.gz
mv frp_0.34.3_linux_amd64 /usr/frp
编辑目录下 frps.ini
文件:
[common]
# frp 监听地址
bind_port = 7000
#frp 控制面板
dashboard_port = 7500
# dashboard 用户名密码可选,默认都为 admin
dashboard_user = admin
dashboard_pwd = admin
# transmission内网穿透
[transmission]
type = tcp
listen_port = 9010
auth_token = 12345678
其他具体配置说明请参考frp中文文档
设置完成后执行
./frps -c frps.ini
客户端配置
客户端只需要多配置所链接的服务器端地址,以及要映射客户端的哪些服务端口。
wget https://github.com/fatedier/frp/releases/download/v0.34.3/frp_0.34.3_linux_amd64.tar.gz
tar -zxvf frp_0.34.3_linux_amd64.tar.gz
mv frp_0.34.3_linux_amd64 /usr/frp
编辑目录下 frpc.ini
文件:
[common]
# 服务器端地址 填自己服务器端的IP地址或者域名
server_addr = X.X.X.X
# 服务器端口
server_port = 7000
# 授权token 要与服务器端的SSH密码一致才能映射 这个密码是6000端口的 1个密码可以对一个端口
auth_token = 12345678
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
# 授权token 要与服务器端的transmission密码一致才能映射 这个密码是9091端口的 1个密码可以对一个端口
auth_token = 12345678
设置完成后执行
./frpc -c frpc.ini
使用服务启动frpc请参考:FRP systemd 启动脚本 FRP systemd init config
参考文章:
那transmission需要设置哪些端口穿透呢?设置了51xxx的那个端口穿透,结果测试不通
@Newbee 内网穿透设置:9091,是为了能在外网操作家中的 transmission。
@小武 那怎么才能让transmission可以正常上传呢,现在上传只有几十kb还每分钟还只有几秒钟
@Newbee 除非你有大带宽的外网服务器做内网穿透,不然映射了也没有用;因为最终的上行速度还是被外网服务器给限制住了。
目前看来,想要上传速度快,让家里有外网ip是最有效的办法了。
去运营商申请,一般都会给的。
@小武 问了运营商不给公网IP;有一个1G带宽的vps,用FRPS和FRPC穿透了几个端口都能用,但是transmission里设置的那个端口穿透了也测试不通,没有上传速度
@Newbee 1G的VPS? 牛逼。。。没记错的话,transmission对外暴露的端口应该是UDP协议,这个FRPS应该只支持TCP协议。估计你需要研究一下 UDP协议的内网穿透
@Newbee 刚刚看了一下Frp的文档,貌似是支持UDP协议的,在frpc.ini配置文件中,只需要将type从tcp改为udp就行了;你试试
@小武 刚把服务端和客户端设置好后都重启了服务,服务端显示udp proxy建立成功了,但在transmission上还是测试不通,之前在有公网ip的时候设置好公网ip的路由器端口映射下就好了,现在tcp和udp的穿透都试过,估计没办法了
@Newbee 那估计没办法了。估计transmission暴露的外网IP是你宽带的外网IP而不是服务器。所以测试的时候其实是没访问到你的vps;
是的不折腾了,谢谢你的帮助!
Transmission 远程下载 也是通过网页操作的吗
@皇家元林 对啊, 我是这么做的, 把9091端口映射出去
这种博客是怎么做的呢
@111111111111111111 我这是基于WordPress做得博客