我意识到 rsync 使用端口 22 作为其目标端口(因为我使用 -e SSH 加密我的通道),但正如我所料,源端口似乎是一个远高于 1000 的随机编号端口。我不想使用标志对其进行速率限制,--bwlimit=LIMIT
而是指定连接建立的本地传输端口。然后使用我的路由器,自动降低具有该 SRC 端口的所有数据包的传输优先级。希望在传输过程中不会减慢我在其他端口上的正常网络活动。
我已经知道如何在路由器上设置 QoS,我只需要知道如何强制 Rsync 的源端口。我已经知道该--port=PORT
选项,但它设置的是 DST 端口,而不是数据包上的 SRC 端口……我想真正的问题是:有没有办法只为 rsync 指定源端口,而不是为所有 ssh 连接指定源端口。有人有什么想法吗?
答案1
您不能直接这样做,但是...
可能的解决方案和替代想法:
QoSDSCP 类或 IPv4服务类型. 最新版本的远程控制客户端有一个选项
IPQoS
。您可以专门为同步或对所有非交互式会话全局启用该功能。(旧版远程控制版本将其硬编码为“低延迟”(交互式)和“吞吐量”(非交互式)。)远程控制
ProxyCommand
选项,使用netcat
或socat
创建 TCP 连接。例如,的代理命令socat tcp:%h:%p,bind=192.168.0.1:4242 stdio
将始终从指定的地址:端口对进行连接。这是对您的问题(“指定 rsync 源端口”)最接近的答案,但可能不是 QoS 的最佳解决方案。通过 IP 地址实现 QoS。您可以为计算机分配第二个 IP 地址,并告诉同步使用它进行转账(远程控制选项
BindAddress
)。虽然这是一个混乱的黑客攻击,但可以应用于所有程序。
全部远程控制可以指定上面列出的选项:
通过同步;
-e "ssh -oIPQoS=cs2"
通过中定义的别名
~/.ssh/config
:Host myserver-qos Hostname myserver IPQoS cs2 $ rsync /path myserver-qos:/path