在 VPS 上部署 Aria2 下载器,通过 IPv6 动态挂载 NAS,实现远程下载直接保存到家庭 NAS 的完整解决方案
🏗️ 系统架构
┌─────────────────────────────────────────────┐
│ 浏览器 │
│ http://shell.yysresume.work:8080 │
└───────────────┬─────────────────────────────┘
│
┌───────────────▼─────────────────────────────┐
│ Cloudflare CDN (橙色云朵) │
│ 加速 Web 界面访问 │
└───────────────┬─────────────────────────────┘
│
┌───────────────▼─────────────────────────────┐
│ RackNerd VPS (你的服务器) │
│ │
│ ┌──────────────────────────────────────┐ │
│ │ AriaNg Web (8080) │ │
│ └──────────┬───────────────────────────┘ │
│ │ RPC: 6800 │
│ ┌──────────▼───────────────────────────┐ │
│ │ Aria2 下载器 │ │
│ │ aria2.yysresume.work:6800 │ │
│ └──────────┬───────────────────────────┘ │
│ │ │
│ ┌──────────▼───────────────────────────┐ │
│ │ /mnt/nas_data (CIFS 挂载点) │ │
│ │ 每小时自动刷新 IPv6 地址 │ │
│ └──────────┬───────────────────────────┘ │
└─────────────┼───────────────────────────────┘
│ CIFS over IPv6
│ hnnas.yys.zone (DDNS)
┌─────────────▼───────────────────────────────┐
│ 家庭/公司 NAS │
│ /nas/share/download │
│ 文件自动保存到这里 │
└─────────────────────────────────────────────┘
核心特点:
- ✅ 远程下载到本地 NAS,不占用 VPS 空间
- ✅ IPv6 动态解析,支持家庭宽带 DDNS
- ✅ Web 界面管理,随时随地访问
- ✅ 开机自启,自动挂载,无需人工干预
✅ 前置条件
硬件/网络要求
-
VPS 服务器
- 系统:Debian 11+ / Ubuntu 20.04+
- RAM:512MB+
- 磁盘:10GB+(仅存储配置,不存文件)
- 网络:支持 IPv6
-
NAS 设备
- 支持 SMB/CIFS 文件共享
- 有公网 IPv6 地址
- 配置 DDNS(如 hnnas.yys.zone)
-
域名(可选)
- Cloudflare 托管
- 用于 Web 界面和 RPC 访问
软件环境
# 检查系统版本
lsb_release -a
# 检查 IPv6 支持
ip -6 addr show
# 测试 NAS 连通性
ping6 hnnas.yys.zone
🚀 部署步骤
第一步:安装 Docker 环境
# 更新系统
sudo apt update
sudo apt upgrade -y
# 安装 Docker
curl -fsSL https://get.docker.com | sh
# 启动 Docker
sudo systemctl start docker
sudo systemctl enable docker
# 添加当前用户到 docker 组
sudo usermod -aG docker $USER
# 重新登录使权限生效
exit
# 重新 SSH 登录
验证安装:
docker --version
docker compose version
第二步:配置动态 IPv6 NAS 挂载
2.1 安装必要工具
sudo apt install cifs-utils -y
2.2 创建凭据文件
# 创建凭据目录
sudo mkdir -p /root/.credentials
# 创建凭据文件(替换为你的 NAS 用户名和密码)
sudo tee /root/.credentials/nas-creds > /dev/null <<EOF
username=你的NAS用户名
password=你的NAS密码
EOF
# 设置权限
sudo chmod 600 /root/.credentials/nas-creds
2.3 创建挂载脚本
这是核心脚本,实现动态 IPv6 解析和自动挂载:
sudo tee /usr/local/bin/mount-nas.sh > /dev/null <<'EOF'
#!/bin/bash
DOMAIN="hnnas.yys.zone" # 改成你的 NAS 域名
MOUNT_POINT="/mnt/nas_data"
SHARE_PATH="/nas" # 改成你的 NAS 共享路径
CREDS="/root/.credentials/nas-creds"
# 动态解析最新的 IPv6 地址
IPV6=$(host -t AAAA $DOMAIN | grep "has IPv6 address" | head -1 | awk '{print $NF}')
if [ -z "$IPV6" ]; then
echo "Failed to resolve $DOMAIN"
exit 1
fi
echo "$(date): Resolved $DOMAIN to $IPV6"
# 如果已挂载,先卸载
if mountpoint -q "$MOUNT_POINT"; then
umount "$MOUNT_POINT" 2>/dev/null
fi
# 挂载(带性能优化参数)
mount -t cifs -o credentials=$CREDS,vers=3.0,ip=$IPV6,uid=1000,gid=1000,file_mode=0664,dir_mode=0775,cache=loose,rsize=65536,wsize=65536 \
//$DOMAIN$SHARE_PATH "$MOUNT_POINT"
if mountpoint -q "$MOUNT_POINT"; then
echo "$(date): Successfully mounted with optimizations"
exit 0
else
echo "$(date): Failed to mount"
exit 1
fi
EOF
# 设置执行权限
sudo chmod +x /usr/local/bin/mount-nas.sh
关键参数说明:
credentials=$CREDS- 使用凭据文件,避免明文密码vers=3.0- SMB 协议版本ip=$IPV6- 动态解析的 IPv6 地址cache=loose- 宽松缓存模式,提升性能rsize=65536,wsize=65536- 读写缓冲区 64KB
2.4 测试挂载
# 创建挂载点
sudo mkdir -p /mnt/nas_data
# 测试脚本
sudo /usr/local/bin/mount-nas.sh
# 验证挂载
df -h | grep nas_data
ls -la /mnt/nas_data
预期输出:
Resolved hnnas.yys.zone to 2409:8a44:9874:be20:8e0:afff:fec6:15e1
Successfully mounted with optimizations
第三步:配置开机自启和定时刷新
3.1 创建 systemd 服务
sudo tee /etc/systemd/system/nas-mount.service > /dev/null <<'EOF'
[Unit]
Description=Mount NAS with dynamic IPv6
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/mount-nas.sh
RemainAfterExit=yes
ExecStop=/bin/umount /mnt/nas_data
[Install]
WantedBy=multi-user.target
EOF
3.2 创建定时刷新服务
# 创建刷新服务
sudo tee /etc/systemd/system/nas-mount-refresh.service > /dev/null <<'EOF'
[Unit]
Description=Refresh NAS mount
[Service]
Type=oneshot
ExecStart=/usr/local/bin/mount-nas.sh
EOF
# 创建定时器(每小时刷新)
sudo tee /etc/systemd/system/nas-mount-refresh.timer > /dev/null <<'EOF'
[Unit]
Description=Refresh NAS mount hourly
[Timer]
OnBootSec=5min
OnUnitActiveSec=1h
[Install]
WantedBy=timers.target
EOF
3.3 启用服务
# 重载 systemd
sudo systemctl daemon-reload
# 启用并启动挂载服务
sudo systemctl enable nas-mount.service
sudo systemctl start nas-mount.service
# 启用并启动定时器
sudo systemctl enable nas-mount-refresh.timer
sudo systemctl start nas-mount-refresh.timer
# 查看状态
sudo systemctl status nas-mount.service
sudo systemctl list-timers | grep nas
验证定时器:
# 应该看到类似输出:
# NEXT LEFT LAST PASSED UNIT ACTIVATES
# Tue 2026-01-20 08:46:19 EST 59min left n/a n/a nas-mount-refresh.timer nas-mount-refresh.service
第四步:部署 Aria2 + AriaNg
4.1 创建项目目录
mkdir -p ~/aria2-downloader
cd ~/aria2-downloader
4.2 创建 docker-compose.yml
cat > docker-compose.yml <<'EOF'
services:
aria2:
image: p3terx/aria2-pro
container_name: aria2-pro
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- RPC_SECRET=myariatoken2026 # 改成你的密钥
- RPC_PORT=6800
- LISTEN_PORT=6888
- DISK_CACHE=256M
- IPV6_MODE=true
volumes:
- ./aria2-config:/config
- /mnt/nas_data/share/download:/downloads # 改成你的 NAS 路径
ports:
- 6800:6800
- 6888:6888
- 6888:6888/udp
network_mode: bridge
logging:
driver: json-file
options:
max-size: 1m
ariang:
image: p3terx/ariang
container_name: ariang
restart: unless-stopped
ports:
- 8080:6880
logging:
driver: json-file
options:
max-size: 1m
EOF
4.3 启动服务
# 启动容器
docker compose up -d
# 查看日志
docker compose logs -f aria2
# 查看运行状态
docker compose ps
预期输出:
NAME IMAGE STATUS PORTS
aria2-pro p3terx/aria2-pro Up 2 minutes 0.0.0.0:6800->6800/tcp, ...
ariang p3terx/ariang Up 2 minutes 0.0.0.0:8080->6880/tcp
第五步:配置域名和 Cloudflare
5.1 添加 DNS 记录
登录 Cloudflare,添加两条 A 记录:
记录 1:Web 界面(开启代理)
类型: A
名称: shell
内容: 你的VPS-IP
代理状态: 已代理(橙色云朵)
记录 2:RPC 连接(仅 DNS)
类型: A
名称: aria2
内容: 你的VPS-IP
代理状态: 仅 DNS(灰色云朵)⚠️ 重要
为什么 RPC 要用仅 DNS?
Aria2 RPC 使用 WebSocket 长连接,Cloudflare 代理可能中断连接。仅 DNS 模式允许直连服务器。
5.2 测试 DNS 解析
# 测试 Web 域名
ping shell.yysresume.work
# 测试 RPC 域名
ping aria2.yysresume.work
第六步:配置 AriaNg Web 界面
6.1 访问界面
浏览器打开:http://shell.yysresume.work:8080
6.2 配置 RPC 连接
- 点击右上角 齿轮图标(AriaNg 设置)
- 左侧菜单选择 "RPC"
- 填写配置:
RPC 别名:Aria2 RPC 地址:aria2.yysresume.work RPC 端口:6800 RPC 协议:Http RPC 密钥:myariatoken2026 - 点击 "重载" 按钮
- 返回主界面,左下角应显示 "已连接" + 绿色图标
6.3 测试下载
点击 "+ 新建",添加测试链接:
http://ipv4.download.thinkbroadband.com/100MB.zip
观察下载速度和进度,文件会保存到:/mnt/nas_data/share/download/
🔧 常见问题解决
问题 1:挂载失败 - "No route to host"
原因: VPS 无法访问 NAS 的 IPv6 地址
解决方案:
# 1. 检查域名解析
nslookup hnnas.yys.zone
# 2. 测试 IPv6 连通性
ping6 hnnas.yys.zone
# 3. 测试 SMB 端口
telnet hnnas.yys.zone 445
如果端口不通:
- 检查 NAS 防火墙是否开放 445 端口
- 检查 NAS 的 SMB 服务是否启用
- 确认 NAS 允许外部 IP 访问
问题 2:挂载失败 - "Invalid argument"
原因: 挂载参数不兼容
解决方案:
# 测试不同参数组合
sudo mount -t cifs -o username=yys,password=123456,vers=3.0 \
//hnnas.yys.zone/nas /mnt/nas_data
# 如果失败,尝试 vers=2.1
sudo mount -t cifs -o username=yys,password=123456,vers=2.1 \
//hnnas.yys.zone/nas /mnt/nas_data
# 查看详细错误
sudo dmesg | tail -20
问题 3:AriaNg 显示"未连接"
原因: RPC 配置错误或端口被阻止
解决方案:
# 1. 测试 RPC 端口
curl http://localhost:6800/jsonrpc
# 2. 检查容器状态
docker compose ps
# 3. 查看 Aria2 日志
docker compose logs aria2 | grep -i error
# 4. 检查防火墙
sudo ufw status
sudo ufw allow 6800/tcp
# 5. 测试域名访问
curl http://aria2.yysresume.work:6800/jsonrpc
浏览器 F12 控制台检查:
- 查看是否有 CORS 错误
- 查看 WebSocket 连接状态
问题 4:下载速度慢(只有 15 MB/s)
原因: 网络文件系统协议开销
实际情况:
- 15-20 MB/s = IPv6 公网 + CIFS 的正常速度 ✅
- 相当于 120-160 Mbps,已经很不错
如果想进一步优化:
# 方案 1:调整 CIFS 参数(已在脚本中)
cache=loose,rsize=65536,wsize=65536
# 方案 2:改用 NFS(性能提升 20-30%)
# 需要在 NAS 上启用 NFS 服务
速度对比参考:
你现在(IPv6 CIFS):15-20 MB/s ✅
优化后的 CIFS: 20-30 MB/s
NFS 协议: 25-40 MB/s
本地千兆网: 80-110 MB/s
VPS 本地磁盘: 100+ MB/s
问题 5:IPv6 地址变化后挂载失效
原因: 家庭宽带 IPv6 地址定期变化
解决方案: 已通过定时刷新解决 ✅
# 查看定时器状态
sudo systemctl list-timers | grep nas
# 手动触发刷新
sudo systemctl start nas-mount-refresh.service
# 查看刷新日志
sudo journalctl -u nas-mount.service -f
定时器每小时会:
- 重新解析域名获取最新 IPv6
- 卸载旧挂载
- 使用新 IPv6 地址重新挂载
问题 6:RPC 密钥警告
警告信息:
[WARN] Neither --rpc-secret nor a combination of --rpc-user and --rpc-passwd is set.
解决方案:
cd ~/aria2-downloader
# 删除旧配置,让容器重新生成
docker compose down
rm -rf aria2-config
docker compose up -d
# 查看日志,警告应消失
docker compose logs aria2 | grep -i warn
确认 docker-compose.yml 中有:
environment:
- RPC_SECRET=myariatoken2026
⚡ 性能优化
优化 1:调整 CIFS 挂载参数
已在脚本中实现的优化:
cache=loose # 宽松缓存模式
rsize=65536 # 读缓冲 64KB
wsize=65536 # 写缓冲 64KB
进一步优化(可选):
# 在 mount-nas.sh 中添加
actimeo=60 # 缓存元数据 60 秒
noatime,nodiratime # 禁用访问时间更新
优化 2:调整 Aria2 配置
# 编辑配置文件
nano ~/aria2-downloader/aria2-config/aria2.conf
推荐配置:
# 磁盘缓存(减少 I/O)
disk-cache=256M
# 文件预分配
file-allocation=falloc
# 连接数
max-connection-per-server=16
split=16
min-split-size=10M
# 速度限制(0=无限制)
max-overall-download-limit=0
max-download-limit=0
# BT 优化
bt-max-peers=128
seed-ratio=1.0
seed-time=60
# 添加/修改这些配置:
# 限制文件名长度
max-file-not-found=3
max-tries=3
# 自动创建多级目录
auto-file-renaming=true
allow-overwrite=true
重启生效:
docker compose restart aria2
优化 3:改用 NFS 协议
如果 NAS 支持 NFS,可以获得更好的性能(25-40 MB/s)
在 NAS 上启用 NFS:
- 群晖:控制面板 → 文件服务 → NFS → 启用
- 威联通:控制台 → 网络与文件服务 → NFS
修改挂载脚本:
sudo nano /usr/local/bin/mount-nas.sh
# 修改 mount 命令:
mount -t nfs -o vers=4,rsize=131072,wsize=131072,hard,timeo=600,actimeo=60 \
[$IPV6]:/volume1/nas "$MOUNT_POINT"
📖 日常使用
常用管理命令
# ===== NAS 挂载管理 =====
# 查看挂载状态
df -h | grep nas_data
# 手动刷新挂载
sudo /usr/local/bin/mount-nas.sh
# 查看挂载服务状态
sudo systemctl status nas-mount.service
# 查看定时器
sudo systemctl list-timers | grep nas
# 查看挂载日志
sudo journalctl -u nas-mount.service -f
# ===== Aria2 管理 =====
# 查看容器状态
cd ~/aria2-downloader
docker compose ps
# 查看 Aria2 日志
docker compose logs -f aria2
# 重启 Aria2
docker compose restart aria2
# 停止服务
docker compose down
# 启动服务
docker compose up -d
# 更新镜像
docker compose pull
docker compose up -d
# ===== 下载管理 =====
# 查看下载目录
ls -lh /mnt/nas_data/share/download/
# 实时监控下载
watch -n 1 'ls -lh /mnt/nas_data/share/download/'
# 查看磁盘使用
df -h /mnt/nas_data
添加下载任务
方式 1:Web 界面(推荐)
- 访问 http://shell.yysresume.work:8080
- 点击 "+ 新建"
- 粘贴链接(HTTP/HTTPS/BT/磁力链)
- 点击确定
方式 2:API 调用
# HTTP 下载
curl -X POST http://aria2.yysresume.work:6800/jsonrpc \
-d '{
"jsonrpc":"2.0",
"method":"aria2.addUri",
"id":"1",
"params":["token:myariatoken2026",["http://example.com/file.zip"]]
}'
# BT 下载(种子文件)
curl -X POST http://aria2.yysresume.work:6800/jsonrpc \
-d '{
"jsonrpc":"2.0",
"method":"aria2.addTorrent",
"id":"1",
"params":["token:myariatoken2026","种子文件的base64"]
}'
监控和维护
每周检查清单:
# 1. 检查 NAS 挂载
df -h | grep nas_data
# 2. 检查服务运行
docker compose ps
sudo systemctl status nas-mount.service
# 3. 检查磁盘空间
df -h
# 4. 查看下载统计
docker compose logs aria2 | grep "Download complete"
# 5. 清理旧日志
docker system prune -f
每月维护:
# 更新系统
sudo apt update && sudo apt upgrade -y
# 更新 Docker 镜像
cd ~/aria2-downloader
docker compose pull
docker compose up -d
# 清理 Docker 缓存
docker system prune -af
备份配置
# 备份脚本
cat > ~/backup-aria2.sh <<'EOF'
#!/bin/bash
BACKUP_DIR=~/aria2-backup-$(date +%Y%m%d)
mkdir -p $BACKUP_DIR
# 备份配置
cp -r ~/aria2-downloader $BACKUP_DIR/
cp /usr/local/bin/mount-nas.sh $BACKUP_DIR/
cp /etc/systemd/system/nas-mount* $BACKUP_DIR/
cp /root/.credentials/nas-creds $BACKUP_DIR/
echo "Backup completed: $BACKUP_DIR"
EOF
chmod +x ~/backup-aria2.sh
~/backup-aria2.sh
📊 性能测试数据
实际测速结果
测试环境:
- VPS: RackNerd (美国)
- NAS: 自建(中国,IPv6)
- 协议: CIFS/SMB 3.0
下载速度:
HTTP 下载: 15-25 MB/s (120-200 Mbps)
BT 下载: 10-20 MB/s (多 peer 情况下)
NAS 写入速度: 15-20 MB/s (实际测得)
优化后:
添加 cache 参数: +10-20% 提升
增大 rsize/wsize: +5-10% 提升
改用 NFS: +20-30% 提升
延迟:
VPS → NAS: ~230ms (ping6)
挂载建立时间: 5-8 秒
IPv6 地址刷新: <1 秒
📋 aria2 命令
📋 1. 查看等待任务
cat > ~/a2-waiting.sh <<'EOF'
#!/bin/bash
curl -s -X POST http://localhost:6800/jsonrpc \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0""method":"aria2.tellWaiting""id":"1""params":["token:myariatoken2026"0100]}' \
| python3 -c "
import sys json
data = json.load(sys.stdin)
tasks = data.get('result' [])
if not tasks:
print('✅ 没有等待任务')
else:
print(f'📋 等待中的任务 ({len(tasks)} 个):')
print('=' * 80)
for i task in enumerate(tasks 1):
gid = task['gid']
files = task.get('files' [{}])
path = files[0].get('path' 'N/A')
print(f'{i}. GID: {gid}')
print(f' 文件: {path[:70]}...')
print('-' * 80)
"
EOF
chmod +x ~/a2-waiting.sh
🚀 2. 查看正在下载的任务
cat > ~/a2-active.sh <<'EOF'
#!/bin/bash
curl -s -X POST http://localhost:6800/jsonrpc \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0""method":"aria2.tellActive""id":"1""params":["token:myariatoken2026"]}' \
| python3 -c "
import sys json
data = json.load(sys.stdin)
tasks = data.get('result' [])
if not tasks:
print('✅ 没有正在下载的任务')
else:
print(f'🚀 正在下载 ({len(tasks)} 个):')
print('=' * 80)
for i task in enumerate(tasks 1):
gid = task['gid']
files = task.get('files' [{}])
path = files[0].get('path' 'N/A')
completed = int(task.get('completedLength' 0))
total = int(task.get('totalLength' 1))
speed = int(task.get('downloadSpeed' 0))
progress = (completed / total * 100) if total > 0 else 0
print(f'{i}. GID: {gid}')
print(f' 文件: {path[:60]}...')
print(f' 进度: {progress:.1f}% | 速度: {speed/1024/1024:.2f} MB/s')
print('-' * 80)
"
EOF
chmod +x ~/a2-active.sh
⏸️ 3. 查看已停止的任务
cat > ~/a2-stopped.sh <<'EOF'
#!/bin/bash
curl -s -X POST http://localhost:6800/jsonrpc \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0""method":"aria2.tellStopped""id":"1""params":["token:myariatoken2026"0100]}' \
| python3 -c "
import sys json
data = json.load(sys.stdin)
tasks = data.get('result' [])
if not tasks:
print('✅ 没有已停止的任务')
else:
print(f'⏸️ 已停止任务 ({len(tasks)} 个):')
print('=' * 80)
for i task in enumerate(tasks 1):
gid = task['gid']
status = task.get('status' 'unknown')
files = task.get('files' [{}])
path = files[0].get('path' 'N/A')
print(f'{i}. GID: {gid} | 状态: {status}')
print(f' 文件: {path[:70]}...')
print('-' * 80)
"
EOF
chmod +x ~/a2-stopped.sh
📊 4. 查看全局统计
cat > ~/a2-stats.sh <<'EOF'
#!/bin/bash
curl -s -X POST http://localhost:6800/jsonrpc \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0""method":"aria2.getGlobalStat""id":"1""params":["token:myariatoken2026"]}' \
| python3 -c "
import sys json
data = json.load(sys.stdin)
stats = data.get('result' {})
down_speed = int(stats.get('downloadSpeed' 0))
up_speed = int(stats.get('uploadSpeed' 0))
active = stats.get('numActive' 0)
waiting = stats.get('numWaiting' 0)
stopped = stats.get('numStopped' 0)
print('📊 Aria2 全局统计:')
print('=' * 50)
print(f'⬇️ 下载速度: {down_speed/1024/1024:.2f} MB/s')
print(f'⬆️ 上传速度: {up_speed/1024/1024:.2f} MB/s')
print(f'🚀 活动任务: {active}')
print(f'⏳ 等待任务: {waiting}')
print(f'⏸️ 已停止: {stopped}')
print('=' * 50)
"
EOF
chmod +x ~/a2-stats.sh
❌ 5. 删除指定任务
cat > ~/a2-remove.sh <<'EOF'
#!/bin/bash
if [ -z "$1" ] then
echo "用法: $0 <GID>"
exit 1
fi
curl -s -X POST http://localhost:6800/jsonrpc \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0""method":"aria2.forceRemove""id":"1""params":["token:myariatoken2026""'$1'"]}' \
| python3 -c "
import sys json
data = json.load(sys.stdin)
if 'result' in data:
print(f'✅ 已删除任务: $1')
elif 'error' in data:
print(f'❌ 删除失败: {data[\"error\"][\"message\"]}')
"
EOF
chmod +x ~/a2-remove.sh
🔍 6. 按关键词删除任务
cat > ~/a2-remove-keyword.sh <<'EOF'
#!/bin/bash
if [ -z "$1" ] then
echo "用法: $0 <关键词>"
exit 1
fi
echo "正在删除包含【$1】的所有任务..."
# 获取所有等待任务
curl -s -X POST http://localhost:6800/jsonrpc \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0""method":"aria2.tellWaiting""id":"1""params":["token:myariatoken2026"01000]}' \
| python3 -c "
import sys json subprocess
keyword = '$1'
data = json.load(sys.stdin)
removed = 0
for task in data.get('result' []):
path = task.get('files' [{}])[0].get('path' '')
if keyword in path:
gid = task['gid']
result = subprocess.run([
'curl' '-s' '-X' 'POST' 'http://localhost:6800/jsonrpc'
'-H' 'Content-Type: application/json'
'-d' '{\"jsonrpc\":\"2.0\"\"method\":\"aria2.forceRemove\"\"id\":\"1\"\"params\":[\"token:myariatoken2026\"\"' + gid + '\"]}'
] capture_output=True)
print(f'✅ 删除: {path[:50]}... (GID: {gid})')
removed += 1
print(f'\n总共删除了 {removed} 个任务')
"
# 获取所有活动任务
curl -s -X POST http://localhost:6800/jsonrpc \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0""method":"aria2.tellActive""id":"1""params":["token:myariatoken2026"]}' \
| python3 -c "
import sys json subprocess
keyword = '$1'
data = json.load(sys.stdin)
for task in data.get('result' []):
path = task.get('files' [{}])[0].get('path' '')
if keyword in path:
gid = task['gid']
subprocess.run([
'curl' '-s' '-X' 'POST' 'http://localhost:6800/jsonrpc'
'-H' 'Content-Type: application/json'
'-d' '{\"jsonrpc\":\"2.0\"\"method\":\"aria2.forceRemove\"\"id\":\"1\"\"params\":[\"token:myariatoken2026\"\"' + gid + '\"]}'
] capture_output=True)
print(f'✅ 删除: {path[:50]}... (GID: {gid})')
"
EOF
chmod +x ~/a2-remove-keyword.sh
🧹 7. 清理已完成任务
cat > ~/a2-purge.sh <<'EOF'
#!/bin/bash
curl -s -X POST http://localhost:6800/jsonrpc \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0""method":"aria2.purgeDownloadResult""id":"1""params":["token:myariatoken2026"]}' \
| python3 -c "
import sys json
data = json.load(sys.stdin)
if 'result' in data:
print('✅ 已清理所有已完成/错误的任务')
else:
print('❌ 清理失败')
"
EOF
chmod +x ~/a2-purge.sh
📦 8. 查看所有状态
cat > ~/a2-all.sh <<'EOF'
#!/bin/bash
echo "🚀 正在下载:"
echo ""
~/a2-active.sh
echo ""
echo "⏳ 等待中:"
echo ""
~/a2-waiting.sh
echo ""
echo "📊 统计:"
echo ""
~/a2-stats.sh
EOF
chmod +x ~/a2-all.sh
🎯 使用方法:
# 查看等待任务
~/a2-waiting.sh
# 查看正在下载
~/a2-active.sh
# 查看已停止
~/a2-stopped.sh
# 查看统计
~/a2-stats.sh
# 删除指定任务
~/a2-remove.sh <GID>
# 按关键词删除
~/a2-remove-keyword.sh "关键词"
# 清理已完成
~/a2-purge.sh
# 查看所有
~/a2-all.sh
💡 添加别名(可选)
cat >> ~/.bashrc <<'EOF'
alias a2w='~/a2-waiting.sh'
alias a2a='~/a2-active.sh'
alias a2s='~/a2-stopped.sh'
alias a2t='~/a2-stats.sh'
alias a2r='~/a2-remove.sh'
alias a2rk='~/a2-remove-keyword.sh'
alias a2p='~/a2-purge.sh'
alias a2all='~/a2-all.sh'
EOF
source ~/.bashrc
以后就可以简单使用:
a2w # 查看等待
a2a # 查看下载中
a2t # 查看统计
a2r abc123 # 删除任务
a2rk "测试" # 按关键词删除
a2p # 清理
a2all # 查看所有
每个都是独立的脚本!
🎯 总结
系统优势
✅ 节省 VPS 空间 - 文件直接写入 NAS,不占用昂贵的 VPS 存储
✅ 支持动态 IPv6 - 家庭宽带 IP 变化后自动更新
✅ 开机自启 - 服务器重启后自动恢复
✅ Web 管理 - 随时随地通过浏览器管理下载
✅ 多协议支持 - HTTP/HTTPS/FTP/BT/磁力链全支持
✅ 性能优化 - 15-25 MB/s 的写入速度已足够大多数场景
适用场景
- 🎬 影视资源下载
- 📦 大文件备份
- 🎮 游戏 ISO 下载
- 📚 电子书收集
- 🎵 音乐库构建
🔗 相关资源
官方文档:
- Aria2 文档: https://aria2.github.io/
- P3TERX/Aria2-Pro: https://github.com/P3TERX/Aria2-Pro-Docker
- AriaNg: https://github.com/mayswind/AriaNg
工具网站:
- Cloudflare: https://dash.cloudflare.com
- Docker Hub: https://hub.docker.com
社区支持:
- Aria2 论坛
- NAS 论坛 (群晖/威联通官方论坛)
📝 更新日志
v1.0 (2026-01-20)
- ✅ 初始版本发布
- ✅ 实现动态 IPv6 挂载
- ✅ 集成 Aria2 + AriaNg
- ✅ 性能优化和故障排除
🙏 致谢
感谢以下项目的开发者:
- Aria2 - 强大的下载工具
- P3TERX - 优秀的 Docker 镜像
- AriaNg - 现代化的 Web 界面
作者: 基于实际部署经验整理
最后更新: 2026-01-20
附录:完整脚本汇总
mount-nas.sh (完整版)
#!/bin/bash
#
# 动态 IPv6 NAS 挂载脚本
# 功能:自动解析 DDNS 域名,使用最新 IPv6 地址挂载 NAS
# 作者:实战部署总结
# 版本:v1.0
#
# ===== 配置区域 =====
DOMAIN="hnnas.yys.zone" # 你的 NAS DDNS 域名
MOUNT_POINT="/mnt/nas_data" # 本地挂载点
SHARE_PATH="/nas" # NAS 共享路径
CREDS="/root/.credentials/nas-creds" # 凭据文件路径
# ===== 日志函数 =====
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S'): $1"
}
# ===== 主逻辑 =====
log "Starting NAS mount process..."
# 1. 解析域名获取 IPv6 地址
IPV6=$(host -t AAAA $DOMAIN | grep "has IPv6 address" | head -1 | awk '{print $NF}')
if [ -z "$IPV6" ]; then
log "ERROR: Failed to resolve $DOMAIN"
exit 1
fi
log "Resolved $DOMAIN to $IPV6"
# 2. 检查并卸载旧挂载
if mountpoint -q "$MOUNT_POINT"; then
log "Unmounting old mount..."
umount "$MOUNT_POINT" 2>/dev/null
sleep 1
fi
# 3. 执行挂载
log "Mounting with IPv6: $IPV6"
mount -t cifs \
-o credentials=$CREDS,vers=3.0,ip=$IPV6,uid=1000,gid=1000,file_mode=0664,dir_mode=0775,cache=loose,rsize=65536,wsize=65536 \
//$DOMAIN$SHARE_PATH "$MOUNT_POINT"
# 4. 验证挂载结果
if mountpoint -q "$MOUNT_POINT"; then
log "SUCCESS: NAS mounted successfully"
df -h "$MOUNT_POINT" | tail -1 | awk '{print "Capacity: "$2", Used: "$3", Available: "$4", Use%: "$5}'
exit 0
else
log "ERROR: Mount failed"
# 输出详细错误信息
dmesg | tail -5
exit 1
fi
docker-compose.yml (完整版)
# Aria2 远程下载系统
# 版本:v1.0
# 更新:2026-01-20
services:
# Aria2 下载核心
aria2:
image: p3terx/aria2-pro
container_name: aria2-pro
restart: unless-stopped
environment:
# 用户权限(与挂载目录权限一致)
- PUID=1000
- PGID=1000
# RPC 配置
- RPC_SECRET=myariatoken2026 # 修改为强密码
- RPC_PORT=6800
# 下载配置
- LISTEN_PORT=6888
- DISK_CACHE=256M
- IPV6_MODE=true
volumes:
# 配置文件持久化
- ./aria2-config:/config
# 下载目录 -> NAS 挂载点
- /mnt/nas_data/share/download:/downloads
ports:
# RPC 端口
- 6800:6800
# BT/PT 监听端口
- 6888:6888
- 6888:6888/udp
network_mode: bridge
# 日志配置
logging:
driver: json-file
options:
max-size: 1m
max-file: "3"
# AriaNg Web 界面
ariang:
image: p3terx/ariang
container_name: ariang
restart: unless-stopped
ports:
- 8080:6880
# 日志配置
logging:
driver: json-file
options:
max-size: 1m
max-file: "3"
🎉 部署完成!享受你的远程下载系统吧!
评论区(0 条)
发表评论⏳ 加载编辑器…