aria2 是一款用 C++ 開發的輕量級多協議續傳工具,不僅跨平台、佔用資源少,集種子、磁力、等協定於一身,還能像 IDM 一樣將檔案分割成多份,增加連線數來提昇下載速度,下載工具用這個就足夠了,會玩的人還會將 aria2 部署在資源少的 VPS 上,利用機房的大頻寬高速下載種子檔,本人在 Linux 就是使用 aria2 作為日常主力下載器,非常好用,本篇文章主要著重於教學 Linux 環境的使用方式,但 aria2 設定檔 Windows 通用。

軟體特色

  • 多重連接下載
  • 輕量,性能優秀
  • 功能齊全的 BitTorrent 客戶端
  • RPC 遠端控制
  • 支援代理伺服器下載

為什麼要用 Aria2

aria2 是在 BitTorrent 客戶端中屬於資源佔用較少的軟體,也可能是因為軟體本身不帶有 GUI 界面所以輕量,速度、穩定性也不輸老牌的 uTorrent 或 qBitTorrent,甚至還比他們快,而 BT 客戶端的選擇我建議不要使用迅雷這種破壞 BT 規則的下載工具,迅雷的客戶端上傳基本都是貢獻給會員用戶,對 BT 網路的貢獻幾乎為 0,這一行為簡直在吸血,所以迅雷又被稱為吸血雷。

在 Windows 上我主要用 uTorrent 作為 BT 下載器,而 Linux 和伺服器上則用 aria2,速度可以跑滿伺服器頻寬,還能下載完自動轉存 Google Drive。

安裝

請到 aria2 的 Github Release 下載自己平台的版本,Windows 下載解壓後請將程式的目錄加入到環境變數中。

如果是 Linux 用戶,可以用套件管理員安裝,或是從 Github 下載 tarball 自己編譯原始碼。

Arch Linux

1
$ sudo pacman -S aria2

Ubuntu/Debian

注意 apt 源裡的套件經常過於老舊,如果要使用最新版建議自己編譯。

1
$ sudo apt-get install aria2

RHEL/CentOS/Fedora

需要安裝 epel 源才能安裝。

1
2
$ yum install epel-release -y
$ yum install aria2 -y

建立設定檔 aria2.conf

使用命令行還需要下一堆參數,如果想要設定很多選項指令會變得很長不方便輸入,建立一個設定檔儲存 aria2 的相關設定會方便許多。

把下面內容儲存,啟動 aria2 時用 --conf-path= 參數來指定設定檔,預設設定檔路徑 ~/.config/aria2/aria2.conf

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
## '#'開頭為註解內容,選項都有對應的說明,請根據需要修改 ##
## 註解選項填寫的是預設值,建議在需要修改時再取消註解  ##

## 檔案儲存相關 ##

# 檔案的儲存路徑(可使用絕對路徑或相對路徑),預設: 目前啟動位置
dir=Download
# 啟用磁碟快取,0為停用快取,需 1.16 以上版本,預設: 16M
disk-cache=32M
# 檔案預分配方式,能有效降低磁碟碎片,預設: prealloc
# 預分配所需時間: none < falloc < trunc < prealloc
# NTFS 建議使用 falloc
file-allocation=none
# 斷點續傳
continue=true

## 下載連線相關 ##

# 最大同時下載任務數,執行時可修改,預設:5
max-concurrent-downloads=10
# 同一伺服器連線數,新增時可指定,預設:1
max-connection-per-server=10
# 最小檔案分割大小,新增時可指定,取值範圍 1M -1024M,預設: 20M
# 假定 size=10M,檔案為 20MiB 則使用兩個來源下載;檔案為 15MiB 則使用一個來源下載
min-split-size=10M
# 單個任務最大執行緒數,新增時可指定,預設: 5
split=20
# 整體下載速度限制,執行時可修改,預設: 0
#max-overall-download-limit=0
# 單個任務下載速度限制,預設: 0
#max-download-limit=0
# 整體上傳速度限制,執行時可修改,預設: 0
max-overall-upload-limit=1M
# 單個任務上傳速度限制,預設: 0
#max-upload-limit=1000
# 停用 IPv6,預設: false
disable-ipv6=false

## 進度儲存相關 ##

# 從 Session 檔案中讀取下載任務
input-file=aria2.session
# 在 Aria2 結束時儲存錯誤 / 未完成的下載任務到 Session 檔案
save-session=aria2.session
# 定時儲存 Session,0 為結束時才儲存,需 1.16.1 以上版本,預設: 0
save-session-interval=60

## RPC 相關設定 ##

# 啟用 RPC,預設: false
enable-rpc=true
# 允許所有來源,預設: false
rpc-allow-origin-all=true
# 允許非外部存取,預設: false
rpc-listen-all=true
# 事件輪詢方式,取值: [epoll, kqueue, port, poll, select],不同系統預設值不同
#event-poll=select
# RPC 連接埠,連接埠被佔用時可以修改,預設: 6800
#rpc-listen-port=6800
# 設定的 RPC 授權 Token,v1.18.4 新增功能,取代 --rpc-user 和 --rpc-passwd 選項
#rpc-secret=<TOKEN>
# 設定的 RPC 存取使用者名稱,此選項新版已廢棄,建議改用 --rpc-secret 選項
#rpc-user=<USER>
# 設定的 RPC 存取密碼,此選項新版已廢棄,建議改用 --rpc-secret 選項
#rpc-passwd=<PASSWD>

## BT/PT下載相關 ##

# 當下載的是一個種子 (以 .torrent 結尾) 時,自動開始 BT 任務,預設: true
follow-torrent=true
# BT 連接埠,當連接埠被遮蔽時使用,預設: 6881-6999
listen-port=62524
# 單個種子最大連線數,預設: 55
#bt-max-peers=55
# 開啟 DHT 功能,PT需要禁用,預設: true
enable-dht=true
# 開啟 IPv6 DHT 功能,PT 需要停用
#enable-dht6=false
# DHT 網路連接埠,預設: 6881-6999
#dht-listen-port=6881-6999
# 本地節點查詢,PT 需要停用,預設: false
#bt-enable-lpd=true
# 種子交換,PT需要停用,預設: true
enable-peer-exchange=true
# 每個種子限速,對少種的PT很有用,預設: 50K
#bt-request-peer-speed-limit=50K
# 客戶端偽裝,PT 需要
peer-id-prefix=-TR2770-
user-agent=Transmission/2.77
# 當種子的分享率達到此個數時,自動停止做種,0為一直做種,預設: 1.0
seed-ratio=0.1
# 強制儲存 Session,即使任務已經完成,預設: false
# 較新的版本開啟後會在任務完成後依然保留 .aria2 檔案
#force-save=false
# BT校驗相關,預設: true
#bt-hash-check-seed=true
# 繼續之前的 BT 任務時,無需再次校驗,預設: false
bt-seed-unverified=true
# 儲存磁力連結中繼資料為種子檔案(.torrent檔案),預設: false
#bt-save-metadata=true

使用方法

命令行界面

這裡不詳細介紹各個參數,僅做簡單的示範。

從 Web 下載檔案

1
$ aria2c http://example.org/mylinux.iso

使用兩個線程下載

1
$ aria2c -x2 http://a/f.iso

下載種子

1
$ aria2c http://example.org/mylinux.torrent

從磁鏈下載種子

1
$ aria2c 'magnet:?xt=urn:btih:248D0A1CD08284299DE78D5C1ED359BB46717D8C'

從純文字檔中尋找 URL 下載

1
$ aria2c -i uris.txt

WebUI

用命令行下載單個檔案可能還好,如果同時下載多個檔案就不好管理了,aria2 雖然核心只有 CLI 界面,但提供 RPC 接口控制,有人就開發出網頁界面,讓 aria2 更方便使用,也可以線上修改 aria2 設定。

目前主流的 WebUI 有兩款:WebUI-Aria2AriaNg,雖然 AriaNg 不在官方推薦中,但我覺得 AriaNg 的界面比較簡潔好用,這邊就以 AriaNg 作為介紹。

AriaNg 是用純 HTML 和 JavaScript 撰寫,意味只需要靜態空間即可部署,連線設定儲存在瀏覽器裡,值得注意的是 WebUI-Aria2 需要 Node.js 環境才能執行,可以直接使用官方提供的控制演示,或是自行架設 AriaNg 控制界面。

如果要自行架設的話,從 Release 下載 AriaNg 的網頁壓縮檔,解壓縮直接點 index.html 就能跑了,更高級一點的做法是用網頁伺服器在本機啟動網頁服務瀏覽 localhost,只要能跑起來都行,不限方法,如果你想省事點就直接用官方的演示版,這裡僅教學 AriaNg 的界面操作。

要啟動 aria2 時記得加上參數 --enable-rpc --rpc-listen-all --rpc-allow-origin-all 啟用 RPC 接口。

打開 AriaNg 界面後首先設定 aria2 的連線,點擊側邊欄「AriaNg 設定」, 上方頁籤點擊 RPC,在 PRC 位址設定 localhost:6800/jsonrpc,取決於你的 aria2.conf 怎麼設定,如果在設定檔裡面有設定 rpc-secret,記得在下方填寫金鑰,協定選 WebSocket 或 HTTP 皆可,設定完後連線資訊會儲存於瀏覽器,連線狀態也會更新,記得檢查側邊欄下方的 Aria2 連線狀態是否為「已連線」。

AriaNg 連線設定

「基本設定」可以設定下載路徑。

Aria2 基本設定

「BitTorrent 設定」設定 BT 連線加密、上傳/下載速度限制、分享率等,建議將分享率設為 1 以上,BT 的精神就是每個節點互相分享,下載完的上傳做種,這樣其他人才能繼續下載。

BitTorrent 設定

更新 Tracker

BitTorrent tracker(中文可稱:BT伺服器tracker伺服器等)是幫助BitTorrent協定在節點與節點之間做連接的伺服器

BitTorrent客戶端下載一開始就要連接到tracker,從tracker獲得其他客戶端IP位址後,才能連接到其他客戶端下載。在傳輸過程中,也會一直與tracker通信,上傳自己的資訊,取得其它客戶端的資訊。

BitTorrent Tracker 可以幫助你和其他用戶建立連接,BT 一開始下載需要先連到 Tracker 獲取其他客戶端 IP,才能連接到其他客戶端下載,下載 BT 時如果速度慢可以試著添加 Tracker 來尋找更多的上傳用戶,愈多客戶端上傳,下載速度愈快,目前最流行的 Tracker list 就是 trackerlist

普通方法

一般修改 aria2 設定檔中的 bt-tracker 並重啟 aria2。

1
bt-tracker=udp://tracker.coppersurfer.tk:6969/announce,http://tracker.internetwarriors.net:1337/announce,udp://tracker.opentrackr.org:1337/announce

腳本自動更新

但是如果 trackerlist 更新的話還要手動更新就太麻煩了,於是網路上有人寫了個腳本可以自動更新 tracker,利用 aria2 的 RPC 接口設定 aria2,不需要重啟,非常方便。

執行腳本前記得先修改 pathpasswdpath 是 aria2 監聽的 RPC 接口位址,passwd 是 aria2 的 RPC 金鑰。

腳本來源:天涼好個秋

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/bin/sh
#more trackers list, see https://github.com/ngosang/trackerslist

tracker_url='https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_all.txt'
path='http://127.0.0.1:6800/jsonrpc'
passwd='xxxxxx'

tracker=$(echo -n  $(curl -s -L $tracker_url | sed 'N;s/\n//g') | tr ' ' ',')
[ -n "$tracker" ] && curl $path -d '{"jsonrpc":"2.0","method":"aria2.changeGlobalOption","id":"cron","params":["token:'$passwd'",{"bt-tracker":"'$tracker'"}]}'

用守護行程執行

可以寫一個 service 在將 aria2 作為系統服務執行。

將下面內容儲存成 aria2.service,放到 systemd 的目錄中,像我的 Arch Linux 目錄是在 /usr/lib/systemd/system/

User 預設是 root,這裡需要修改為自己常用的用戶名稱,我的下載路徑設定在家目錄下,如果用 root 執行 aria2,下載的檔案權限只有 root 才能讀寫,為了方便存取檔案,所以我把執行用戶改成一般用戶。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[Unit]
Description=Aria2 Service
After=network.target

[Service]
User=user
ExecStart=/usr/bin/aria2c --enable-rpc --rpc-listen-all --rpc-allow-origin-all --save-session /etc/aria2/session.lock --input-file /etc/aria2/session.lock --conf-path=/etc/aria2/aria2.conf

[Install]
WantedBy=default.target

重新載入 daemon 後就可以啟動了。

1
2
$ sudo systemctl daemon-reload
$ sudo systemctl start aria2

我自己習慣設成開機自啟動,想要下載的時候直接打開 AriaNg 就能開始下載。

1
$ sudo systemctl enable aria2

Reference