- 1. 设置宽带获取 IPV6 地址
- 2. Orange Pi
- 3. 域名与 DDNS
- 4. 挂载移动硬盘
- 5. 申请 SSL 证书
- 6. 安装配置 Aria2
- 8. 为 Aria2 更新 BTTracker 列表
- 8. 安装配置 Samba
- 9. 参考文档
最近我对IPv6进行了研究,目前已经实现了两个前置条件。第一个是个人宽带用户可以拥有IPv6公网IP,第二个是移动4/5G网络可以拥有IPv6公网IP。由于这些条件的实现,现在搭建一个随时可访问、管理的个人云已经成为了可能。因此,我开始使用Orange Pi来搭建我的个人云。
1. 设置宽带获取 IPV6 地址
- 设置光猫为桥接
- 设置入口路由器开启 IPV6 功能,我的路由器是 ASUS AC68U,参考 华硕ac68u 畅游 IPV6 设置成功
2. Orange Pi
- 为什么不是 Raspberry Pi (树莓派)
- Raspberry Pi 4B 现在的价格近千元人民币,而 OrangePi 3 LTS 不到 300 元人民币
- OrangePi 3 LTS 对于个人云性能已经足够了
- 由于 Orange Pi 默认的操作系统为 Android,这里需要,安装 Debain 操作系统,具体需要参考 Orange Pi 的官方文档。值得注意的是 OrangePi 3 LTS 自带 8GB eMMC 存储,建议将操作系统安装的此位置。官网文档并没有说明具体的步骤,其实际命令为
sudo nand-sata-install
- 推荐在路由器中设置绑定固定的 IPV4 地址到 Orange Pi 的 MAC 地址,方便在内网连接管理
- 置入口路由器开启开启 IPV6 防火墙功能(SSH 等服务在公网裸奔的安全风险不小),开放 8022 (远程 SSH)端口访问
- 修改 orangepi、root 用户密码、SSH 默认端口(假设我本文中设定为 8022)、关闭 SSH 密码访问,仅通过密钥访问
3. 域名与 DDNS
由于运营商分配的 IPV6 地址会变化,建议申请一个域名,并实时解析 AAAA 记录至域名,这样不在家访问个人云时,无需获悉 IPV6 地址是多少,仅需知道域名就可以了。
- 在腾讯云 DNSPod申请一个域名,当然可以选择其他商家。我选择了 xyz 域名,一次续费了 8 年好像是 300 人民币。此文中,假设我申请的域名为
example.xyz
,解析至 Orange Pi 的 - 在
账号账号中心 -> API 密钥 -> DNSPod Token
中创建并保存密钥 - 借助开源脚本 rehiy/dnspod-shell 设置 DDNS,下面为我个人的安装方法,仅供参考: 执行
1
2
3
4wget -O https://raw.githubusercontent.com/rehiy/dnspod-shell/f6a7b7df7eb1db859515398695c8000970221f10/ardnspod
echo 'arToken="[腾讯云 DNSPod Token]"' >> ardnspod
echo 'arDdnsCheck "example.xyz" "orangepi" 6' >> ardnspod
chmod +x ./ardnspod./ardnspod
应该可以得到如下输出:说明已经解析成功,接下来,添加一条 crontab 记录用于每 15 分钟执行该脚本:1
2
3
4
5
6
7
8
9
10orangepi@orangepi3-lts:~/ddns$ ./ardnspod
=== Check orangepi.example.xyz ===
Fetching Host Ip
> Host Ip: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
> Record Type: AAAA
Fetching RecordId
> Record Id: 1111111111
Updating Record value
> arDdnsUpdate - success: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
2001:0db8:85a3:0000:0000:8a2e:0370:73341
*/15 * * * * /home/orangepi/ddns/ardnspod
- 可以用
dig +short AAAA orangepi.example.xyz
命令来验证解析是否生效,此命令会查询远程 DNS Server
4. 挂载移动硬盘
Orange Pi 仅支持使用 USB 接口连接硬盘,但是也够了
- 将移动硬盘插入 Orange Pi USB 3.0 接口,使用
lsblk
来查看,假设我们的磁盘为:/dev/sda
- 格式化移动盘为 ext4 格式:
sudo mkfs.ext4 /dev/sda
- 创建一个目录来挂载移动硬盘:
mkdir ~/usb
- 使用以下命令来找到移动硬盘的 UUID:
sudo blkid
- 打开 /etc/fstab 文件并添加以下行:
UUID=<移动硬盘 UUID> /mnt/external ext4 defaults 0 2
,其中,<移动硬盘 UUID> 为第 5 步中找到的 UUID。 - 重启系统,移动硬盘应该会自动挂载到
/home/orangepi/usb
目录下。可以使用df -h
下`命令来确认挂载是否成功:
5. 申请 SSL 证书
5.1. 为什么需要 SSL 证书
- 加密通信:SSL证书可以加密数据传输,确保敏感数据不会被窃取或篡改,保证数据的机密性和完整性
- 自签名证书不被主流网络请求工具(如浏览器)信任,会有各种各样的麻烦。而 Let’s Encrypt 的证书是免费提供的,在我们有域名的情况下,申请免费证书是最好的选择。
5.2. 申请 Let’s Encrypt 证书
Let’s Encrypt 提供三种认证方式,HTTP、DNS、TLS-ALPN。其中第 1、3 种需要我们对外开放 80/443 端口,在中国大陆这个条件不具备,故采用方法 2。因为我的域名是在腾讯云 DNSPod 申请的,其他服务商的方法应该是大同小异。另外 Let’s Encrypt 已经支持申请通配符证书了。
- 安装 certbot(申请工具):
sudo apt install certbot
- 安装 certbot-dns-dnspod:
sudo pip3 install git+https://github.com/euclidr/certbot-dns-dnspod.git
- 编写配置文件
~/certbot-dns-dnspod/dnspod_credentials.ini
1
2
3certbot_dns_dnspod:dns_dnspod_api_token = "[腾讯云 DNSPod Token]"
certbot_dns_dnspod:dns_dnspod_dns_ttl = 600
certbot_dns_dnspod:dns_dnspod_contact_email = '[email]' - 执行 证书被存放在
1
2sudo chown -R orangepi:orangepi /var/log/letsencrypt/ /etc/letsencrypt /var/lib/letsencrypt
certbot certonly -a certbot-dns-dnspod:dns-dnspod --certbot-dns-dnspod:dns-dnspod-credentials ./dnspod_credentials.ini -d *.example.xyz`,/etc/letsencrypt/live/example.xyz
目录 - 因为证书的有效期是 90 天,这里我们设置 root 的 crontab 来每个月 15 日更新证书
1
37 4 15 */1 * certbot renew --cert-name example.xyz
6. 安装配置 Aria2
Aria2 是一个开源下载器,支持HTTP、HTTPS、FTP、SFTP、BitTorrent、MetalinkA 协议下载。AriaNg 是一个让 Aria2 更容易使用的现代 Web 前端,这里用 AriaNg 作为 UI。
需要防火墙开启 6800 51413 端口
- 安装 Aria2:
sudo apt install aria2
- 创建下载文件保存目录:
mkdir /home/orangepi/usb/Downloads
- 编辑配置文件:
~/.aria2/aria2.conf
,注意修改 RPC 密码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
101
102
103
104
105
106
107
108
109
110
111
112
113
114## '#'开头为注释内容, 选项都有相应的注释说明, 根据需要修改 ##
## 被注释的选项填写的是默认值, 建议在需要修改时再取消注释 ##
## 文件保存相关 ##
# 文件的保存路径(可使用绝对路径或相对路径), 默认: 当前启动位置
dir=/home/orangepi/usb/Downloads
# 启用磁盘缓存, 0为禁用缓存, 需1.16以上版本, 默认:16M
#disk-cache=32M
# 文件预分配方式, 能有效降低磁盘碎片, 默认:prealloc
# 预分配所需时间: none < falloc ? trunc < prealloc
# falloc和trunc则需要文件系统和内核支持
# NTFS建议使用falloc, EXT3/4建议trunc, MAC 下需要注释此项
file-allocation=trunc
# 断点续传
continue=true
## 下载连接相关 ##
# 最大同时下载任务数, 运行时可修改, 默认:5
max-concurrent-downloads=10
# 同一服务器连接数, 添加时可指定, 默认:1
max-connection-per-server=5
# 最小文件分片大小, 添加时可指定, 取值范围1M -1024M, 默认:20M
# 假定size=10M, 文件为20MiB 则使用两个来源下载; 文件为15MiB 则使用一个来源下载
min-split-size=10M
# 单个任务最大线程数, 添加时可指定, 默认:5
#split=5
# 整体下载速度限制, 运行时可修改, 默认:0
max-overall-download-limit=10M
# 单个任务下载速度限制, 默认:0
max-download-limit=5M
# 整体上传速度限制, 运行时可修改, 默认:0
max-overall-upload-limit=1M
# 单个任务上传速度限制, 默认:0
max-upload-limit=512k
# 禁用IPv6, 默认:false
#disable-ipv6=true
# 连接超时时间, 默认:60
#timeout=60
# 最大重试次数, 设置为0表示不限制重试次数, 默认:5
max-tries=0
# 设置重试等待的秒数, 默认:0
retry-wait=10
## 进度保存相关 ##
# 从会话文件中读取下载任务
input-file=/home/orangepi/.aria2/aria2.session
# 在Aria2退出时保存`错误/未完成`的下载任务到会话文件
save-session=/home/orangepi/.aria2/aria2.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授权令牌, v1.18.4新增功能, 取代 --rpc-user 和 --rpc-passwd 选项
rpc-secret=123456
#rpc-user=<USER>
# 设置的RPC访问密码, 此选项新版已废弃, 建议改用 --rpc-secret 选项
#rpc-passwd=<PASSWD>
# 是否启用 RPC 服务的 SSL/TLS 加密,
# 启用加密后 RPC 服务需要使用 https 或者 wss 协议连接
rpc-secure=true
# 在 RPC 服务中启用 SSL/TLS 加密时的证书文件,
# 使用 PEM 格式时,您必须通过 --rpc-private-key 指定私钥
#rpc-certificate=/path/pk.crt
# 在 RPC 服务中启用 SSL/TLS 加密时的私钥文件
#rpc-private-key=/path/pk.key
## BT/PT下载相关 ##
# 当下载的是一个种子(以.torrent结尾)时, 自动开始BT任务, 默认:true
#follow-torrent=true
# BT监听端口, 当端口被屏蔽时使用, 默认:6881-6999
listen-port=51413
# 单个种子最大连接数, 默认:55
#bt-max-peers=55
# 打开DHT功能, PT需要禁用, 默认:true
enable-dht=true
# 打开IPv6 DHT功能, PT需要禁用
enable-dht6=true
# DHT网络监听端口, 默认:6881-6999
dht-listen-port=51413
# 本地节点查找, PT需要禁用, 默认:false
bt-enable-lpd=true
# 种子交换, PT需要禁用, 默认:true
enable-peer-exchange=false
# 每个种子限速, 对少种的PT很有用, 默认:50K
#bt-request-peer-speed-limit=50K
# 客户端伪装, PT需要
peer-id-prefix=-TR2770-
user-agent=Transmission/2.77
peer-agent=Transmission/2.77
# 当种子的分享率达到这个数时, 自动停止做种, 0为一直做种, 默认:1.0
seed-ratio=0
# 强制保存会话, 即使任务已经完成, 默认:false
# 较新的版本开启后会在任务完成后依然保留.aria2文件
#force-save=false
# BT校验相关, 默认:true
#bt-hash-check-seed=true
# 继续之前的BT任务时, 无需再次校验, 默认:false
bt-seed-unverified=true
# 保存磁力链接元数据为种子文件(.torrent文件), 默认:false
bt-save-metadata=true - 启动 Aria2:
aria2c --conf-path=/home/orangepi/.aria2/aria2.conf --rpc-private-key=/etc/letsencrypt/live/example.xyz/privkey.pem --rpc-certificate=/etc/letsencrypt/live/example.xyz/cert.pem
- 打开 http://ariang.mayswind.net/latest/,点击 AriaNg 设置,修改如下配置,如果没问题可以连接成功
- Aria2 RPC 地址:
orangepi.example.xyz
- Aria2 RPC 协议:
Https
- Aria2 RPC 密钥: 123456
- Aria2 RPC 地址:
- 停止 Aria2,设置 Aria2 开机启动
- 创建文件
/etc/systemd/system/aria2.service
1
2
3
4
5
6
7
8
9
10
11
12
13[Unit]
Description=Aria2 Download Manager
After=network.target
[Service]
Type=simple
User=orangepi
Group=orangepi
ExecStart=aria2c --conf-path=/home/orangepi/.aria2/aria2.conf --rpc-private-key=/etc/letsencrypt/live/example.xyz/privkey.pem --rpc-certificate=/etc/letsencrypt/live/example.xyz/cert.pem
ExecReload=/bin/kill -s HUP $MAINPID
[Install]
WantedBy=multi-user.target - 启动服务:
sudo systemctl start aria2
- 设置开机启动:
sudo systemctl enable aria2
- 创建文件
8. 为 Aria2 更新 BTTracker 列表
BTTracker 列表是一种用于 BitTorrent 下载的服务器列表,它可以帮助 BT 下载更快。更新 BTTracker 列表的原因是因为 Tracker 服务器经常失效,需要经常维护这份列表。有人会维护全网热门 BitTorrent Tracker 列表项目,每天自动获取热门 Tracker 列表项目,去重复后制作成一个 Tracker 列表合集,这样就不需要去一个个添加 Tracker 到你的BT软件里了。这里使用 harvey520 提供的列表。
动态为 Aria2 设置 BTTracker 列表需要通过 HTTP API
- 编写脚本
~/update_bt_tracker.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20ARIA2_DOMAIN='orangepi.example.xyz'
ARIA2_URL="https://${ARIA2_DOMAIN}:6800/jsonrpc"
TRACKER_URL='https://gitee.com/harvey520/www.yaozuopan.top/raw/master/blacklist.txt'
token='123456'
list=$(curl -s $TRACKER_URL)
url_list=$(echo $list | sed 's/[ ][ ]*/,/g')
uuid=$(od -x /dev/urandom | head -1 | awk '{OFS="-"; print $2$3,$4,$5,$6,$7$8$9}')
json='{
"jsonrpc": "2.0",
"method": "aria2.changeGlobalOption",
"id": "'$uuid'",
"params": [
"token:'$token'",
{
"bt-tracker": "'$url_list'"
}
]
}'
curl "$ARIA2_URL" -H "Accept: application/json" -H "Content-type: application/json" -X POST -d "$json" --resolve "${ARIA2_DOMAIN}:6800:127.0.0.1" - 执行脚本,顺利的话可以看到类似
{"id":"18f1ca31-90cc-b55b-cdd6-2f44a9274364","jsonrpc":"2.0","result":"OK"}
的输出。在 AriaNG -> Aria2 设置 -> BitTorrent 设置里,可以看到 BT 服务器地址不为空。 - 设置 crontab 每天自动更新
1
0 9 * * * /home/orangepi/update_bt_tracker.sh
8. 安装配置 Samba
Smba 提供 SMB 协议文件传输,它有一个更大众的名字叫 Windows 文件共享。强烈建议不要开放 SMB 的 445 端口,近几年流行的勒索病毒都是拿 SMB 协议做突破口的。
- 安装:
sudo apt install samba
- 编辑配置文件,在尾部添加如下内容
1
2
3
4
5
6
7[Volumes]
comment = Volumes
path = /home/orangepi/usb
browseable = yes
writable = yes
available = yes
valid users = orangepi - 启动和设置开机启动
1
2sudo systemctl start smbd
sudo systemctl enalbe smbd - 验证
- 在 Android TV 上观看内容
- 当贝播放器
- Kodi
9. 参考文档
- 华硕ac68u 畅游 IPV6: https://www.jianshu.com/p/38a6212c7e7f
- How to install Linux on the eMMC of an Orange Pi 3 LTS:https://jumptuck.com/blog/2023-02-13-install-linux-orange-pi-3-lts-emmc/
- rehiy/dnspod-shell: https://github.com/rehiy/dnspod-shell
- Dynamic DNS: https://en.wikipedia.org/wiki/Dynamic_DNS
- Let’s Encrypt: https://letsencrypt.org/
- Catboot: https://certbot.eff.org/
- euclidr/certbot-dns-dnspod: https://github.com/euclidr/certbot-dns-dnspod
- lets encrypt - How to renew only one domain with certbot? - Stack Overflow: https://stackoverflow.com/questions/42591165/how-to-renew-only-one-domain-with-certbot
- How I run Certbot (as non-root and automated) – Xyrillian Thoughts: https://xyrillian.de/thoughts/posts/how-i-run-certbot.html
- AriaNg: http://ariang.mayswind.net/
- 中国可用的 BT Tracker 服务器列表,每24小时自动更新 - 小小编程: https://www.yaozuopan.top/index.php/archives/1014/
- 【Answers 分享】如何创建一个新的网络位置 - Microsoft Community: https://answers.microsoft.com/zh-hans/windows/forum/all/answers/bf237a67-6a1e-4773-93c4-4e4a67044fea
- Connecting to SMB shares with Mac OS X - College of Agriculture IT | Montana State University: https://ag.montana.edu/it/support/smb-macs.html