rsync+tls 实现远程数据同步加密传输
rsync是一个高效的数据同步工具,但是使用rsync本身只支持ssh和rsync这两种传输协议。我最近遇到了一种场景是从境外的服务器上同步到国内的NAS上。直接传输很容易被GFW阻断掉,但是rsync本身不支持tls加密。
最终通过 trojan + rsync 实现伪装tls流量远程同步文件。
安装trojan和rsync
安装trojan并配置tls证书网上有非常多的教程,推荐使用一键脚本。
https://github.com/Jrohy/trojan
然后配置trojan的服务端和客户端,参考网上文章,不是本文重点。
yum install rsync proxychains -y
配置服务端rsync守护进程
修改服务端的 /etc/rsyncd.conf
配置文件。
uid = root gid = root use chroot = yes max connections = 4 pid file = /var/run/rsyncd.pid exclude = lost+found/ transfer logging = yes timeout = 900 ignore nonreadable = yes dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 *.rar [slog] path = /slog/ comment = slog data read only = no
添加上面的配置,这里我命名了[slog]的模块,同时对应的目录为/slog/。客户端在下载文件时,对应的文件路径根目录就是/slog/。
pkill rsync || rsync --daemon --address=127.0.0.1
然后运行rsync开启守护进程,因为流量需要经过tls加密,rsync的端口就不需要暴露在公网上,让trojan经过本机访问即可,安全性更高。
配置客户端proxychains
由于rsync本身不支持tls,要让rsync的流量强行经过trojan客户端的代理就需要proxychains。在/etc/proxychains4.conf的最后添加trojan的端口。
socks5 127.0.0.1 10811
rsync 同步服务端文件
同步文件之前可以先测试一下,代理是否正常。
└─# proxychains rsync rsync://127.0.0.1 [proxychains] config file found: /etc/proxychains4.conf [proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4 [proxychains] DLL init: proxychains-ng 4.16 [proxychains] Strict chain ... 127.0.0.1:10811 ... 127.0.0.1:873 ... OK slog slog data
可以看到代理是正常的,服务端返回了rsync配置的模块信息。
proxychains rsync -avzP --skip-compress=zip,rar --remove-source-files rsync://127.0.0.1/slog/ /slog
这里的参数解释如下:
-a
(archive) —— 保留符号链接、权限、时间戳等。-v
(verbose) —— 显示详细的同步信息。-z
(compress) —— 在传输过程中压缩数据,有助于减少数据传输量。-P
—— 等同于--partial --progress
。--partial
使 rsync 保存那些因为某些原因而没有完全传输的文件部分,使得未来的 rsync 运行可以继续未完成的传输。--progress
显示传输过程中的进度条。- –skip-compress=zip,rar —— 对于已经压缩过的文件,没必要再次压缩,避免浪费CPU资源。
- –remove-source-files —— 从服务端同步文件成功后,将源文件从服务端删除。
需要解释一下,经过proxychains代理后rsync://127.0.0.1/slog/
中的127.0.0.1就不再是客户端地址,而是服务端的地址。
传输效果
经过tls代理后的rsync流量,经过GFW不会被阻断,实测可以跑满服务端的带宽。
为什么这里直接用rsync协议而不用ssh协议传输?
tls本身已经加密过一次,没必要ssh再加密一次。而rsync本身是明文传输协议,直接配合tls效率更高。
同时这个思路也可以发散出去,对于这类需要经过GFW传输数据的,都可以使用proxychains配合代理实现tls加密传输。
赞赏微信赞赏支付宝赞赏
发表评论