Ming.

自留地

0%

20221001补充:web3.storage已经把Free Plan上限降到5GB了,不再推荐使用.
可以试着通过TransferKit继续,不过它只有网页版.

之前一直在用 Picgo+GitHub 的方式托管图片,但是感觉不太好(其实就是想折腾),于是找了一下其他自建图床的办法.

原理

IPFS的原理与BT类似,本质上都是P2P连接.

但是IPFS可以通过各类公开网关直接访问其中的文件,格式为:

[IPFS Gateway]/ipfs/[CID v0]

[CID v1].ipfs.[IPFS Gateway]

而每一个文件夹/文件都对应有一个CID,这意味着,每次更改其中内容后其CID都会发生变化.

于是我们可以用IPNS解决这个问题.

可以理解为IPFS中的DNS,专门用于返回最新的CID.

IPFS部分

虽然理论上可以直接在本地运行IPFS节点,从而上传文件到IPFS网络中.

但是在实际使用时会有两个问题:

  1. 国内网络不友好.
  2. 若本地取消分享且其他节点没有备份,可能会在下一次自动删除中被清理掉,从而无法访问.

对于这两个问题,我们可以使用第三方托管平台解决.

这里我们使用 web3.storage(以下简称w3s) 提供的服务.

提供类似上传服务的网站还有很多,可以自行搜索.

w3s Token

首先登录进w3s网站.

Login-w3s

这里选择邮箱登录即可,当然,也可以使用临时邮箱来获取多个Token

每个Token带有1TB容量,一般人一个就足够了吧qwq

然后前往 Token 界面,输入Token名称以生成.

Token-w3s

这里将Token复制好,下一步需要用到.

w3s Cli

通过网站上传文件无疑是很麻烦的,所以我们选择使用Cli工具,在Terminal中操作

需要提前安装好 Node.js.

执行 npm install -g @web3-storage/w3 安装w3s Cli.

随后在Terminal中执行 w3 token ,输出结果应该类似于:

PS C:\Users\username> w3 token
√ Paste your API token for api.web3.storage · [YourToken]


⁂ API token saved

此时你已登入w3s Cli, 输入 w3 -h 即可得到使用说明.

以下是部分命令:

w3 put /path/to/your/file -n [自定义文件名]
#上传文件

w3 list
#查看已上传文件及其CID

w3 name create
#创建IPNS

w3 name publish [IPNS ID] /ipfs/[CID]
#将某个文件/文件夹添加到某个IPNS中

实际使用

假设你新建了一个名为Img的文件夹,并且添加了名为TEST1.jpg的文件,只需要执行:

w3 put ./Img
#将输出的CID记为α

w3 name create
#将输出的IPNS ID记为β

w3 name publish β /ipfs/α
#将Img文件夹对应到该IPNS ID

此时,你便可以通过 β.ipns.[IPFS Gateway]/Img/TEST1.jpg 访问到该图片.

若你想增添TEST2.jpg、TEST3.jpg……

只需要重复第一步与第三步即可.

绑定域名 [可选]

虽然这个时候已经能用了,但是IPNS ID那么长,看起来就不舒服 (bushi)

所以我们可以借助 DNSlink 功能,从我们自己的域名访问IPFS服务.

首先我们要选定一个网关(可以在附录寻找),并且设置好CNAME接入.

  • 假设你在使用 a.example.com

DNSlink1

然后新建一个TXT Record,名为[_dnslink.a],值为[dnslink=/ipns/β]

不知道β是什么?去看上文w (话说应该不会有人忘得这么快吧)

DNSlink2

到这里就已经完成咯

你现在可以通过 a.example.com/Img/[FileName] 来访问图片.

附录

IPFS官方网关

在大陆无法访问

Cloudflare网关

w3s网关

上传完文件后,可以试着先通过w3s网关访问一次,让更多的服务器缓存到你的文件.

Dweb网关

Let’s Encrypt 证书

  • 以Debian为例,通过certbot申请证书.

    sudo apt update

    sudo apt install snapd

    sudo snap install --classic certbot

    sudo ln -s /snap/bin/certbot /usr/bin/certbot

    sudo certbot certonly --standalone
    # 申请证书

    sudo certbot renew --dry-run
    # 测试自动更新证书
  • 完成了,现在你的证书应该处于:

    /etc/letsencrypt/live/example.com/fullchain.pem
    /etc/letsencrypt/live/example.com/privkey.pem

CloudFlare Origin 证书

  • 注意,该证书只能被CloudFlare识别为可信,用于CDN与源站之间.
  • Dashboard—SSL/TLS—Orgin Server即可生成证书.

前言

Q:给谁看?

A:有使用网络代理需求,但是不想使用一键脚本的人.

Gost

下载Gost.

可以前往Releases页面获取最新版链接.

wget https://github.com/ginuerzh/gost/releases/download/v2.11.4/gost-linux-amd64-2.11.4.gz
#下载Gost源文件

gzip -d gost-linux-amd64-2.11.4.gz
#解压源文件

mv gost-linux-amd64-2.11.4 gost
#重命名为gost,方便后续使用命令

chmod +x gost
#使之可执行

HTTPS代理

//服务器端
sudo nohup ./gost -L=https://username:password@:443?probe_resist=code:404\?cert=/path/to/your/cert/file\&key=/path/to/your/key/file

//客户端
./gost -L socks://:1080 -F https://username:password@example.com:443

当然,你也可以在Clash中使用,配置文件如下:

- name: "Name"
server: example.com
port: 443
type: http
username: "username
password: "password"
tls: true

WSS代理

//服务器端
sudo nohup ./gost -L=mwss://username:password@:443?cert=/path/to/your/cert/file\&key=/path/to/your/key/file

//客户端
./gost -L socks://:1080 -F mwss://username:password@example.com:443

CloudFlare CDN

  • CF Dashboard—SSL/TLS—Overview 『Full』.
  • Dashboard—DNS—Proxy status 『Proxied』.

Hysteria

下载Hysteria

配置

//服务器端
{
"listen": ":YourPort",
"cert": "/path/to/your/cert",
"key": "/path/to/your/key",
"obfs": "YourPassword",
"up_mbps": 100,
"down_mbps": 100
}

//客户端
{
"server": "your.domain.com:YourPort",
"obfs": "YourPassword",
"up_mbps": 50,
"down_mbps": 100,
"socks5": {
"listen": "YourLocalSocks5Port"
}
}