Day 5517 Aria2 将 RPC 服务绑定到其它网卡的折衷方法笔记

注:本文不是教程,只是为了在特定环境下实现特定需求的笔记,如有更好的方法,欢迎提出。

服务器上运行 Debian 10,有两块网卡,姑且称作 eth0 和 eth1,其中 eth0 是外网连接,通过 DHCP 自动获取 IP 地址,可以访问互联网;eth1 是内网连接,为静态 IP 地址,无法访问互联网。

现想达到如下目的:

1、让下载流量自动走 eth0。

2、使 RPC 服务可以通过 eth1 访问。

Aria2 有一配置选项 interface 可以将整个服务绑定在个网络连接(某块网卡或某个IP)上,但并不支持将下载流量和 RPC 服务分别绑定在不同的网络连接上(按:本文撰写时 Aria2 版本为 1.35),按上述环境,如果将 Aria2 服务绑定在 eth0,则 RPC 服务不可访问;如果绑定在 eth1,则无法下载。此外,Aria2 的 rpc-listen-all 参数受 interface 参数的影响,当 interface 绑定为特定网络连接时,rpc-listen-all 会随之绑定在对应网络连接上,而不是所有的网络连接。

由于我不会写 C,无法对 Aria2 本身的代码做出修改,最终在此处找到一个折衷的解决方案(按:本文撰写时该 issue 已提出6年,官方仍未实现,估计是需求太少),配置成功,操作步骤如下:

1、安装 HAProxy(Debian 下为 apt-get install haproxy,其它系统请自行尝试)

2、修改 HAProxy 配置文件,在末尾增加如下内容(默认位置为 /etc/haproxy/haproxy.cfg):

listen web_port

bind 10.0.0.1:6801 #此处地址为 eth1 上的内网地址,6801 为要开放的端口,依据实际情况自行修改

mode http

log global

server aria2 127.0.0.1:6800 check inter 3000 fall 2 rise 5 #此处6800为 Aria2 的 RPC 端口,依据实际情况自行修改

3、重启 HAProxy 服务:systemctl restart haproxy

4、修改 aria2 配置文件,包含如下两处修改:

(1)删除 rpc-listen-all 行(此时 RPC 服务会被绑定到本地回环设备 lo 上)

(2)修改 interface 行为下载流量要绑定的设备或 IP,如:interface=eth0(注意:Windows 下必须使用 IP 地址或主机名

5、重启 Aria2服务:systemctl restart aria2

此时使用 Aria2 的 UI 服务(如 AriaNg 等)去连接内网地址上的 HAProxy 转发端口,即可连上 RPC 服务,同时下载将通过外网连接进行。

注:所有评论将在审核通过后显示,请不要在评论内容的任何位置出现链接,否则您的评论将被自动移入回收站,且永远不会被复审。

All comments will be available after being manually reviewed, please do not include any links anywhere in your comment, otherwise your comment will be automatically deleted and are not eligible for review.

2 条评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注