NAT1打洞运行E站H@H客户端详细指南
前言
众所周知,e-hentai 是全球最大的本子网站,而 H@H 则是其内容分发网络(PCDN),旨在减轻服务器压力,并让用户更轻松地下载所喜爱的本子。此外,搭建 H@H 还能够获得可观的报酬。
然而,搭建 H@H 需要使用公网 IP,而在国内获取公网 IP 通常较为困难。幸运的是,通过 NAT1 打洞技术,我们可以实现公网访问,这也使得运行 H@H 客户端成为了可能。
在此对贡献了开源项目的大佬们表示感谢!经过不懈的努力,笔者也最终成功地在没有公网 IP 的情况下通过打洞技术运行了 H@H。
什么是H@H
H@H全名为Hentai@Home,也名为变态在家。
Hentai@Home (H@H)是一个开源的P2P图库分发系统,用于减轻E变态画廊的负担。
这是在ehwiki上的介绍,详细信息请参阅wiki这里不再赘述。https://ehwiki.org/wiki/Hentai@Home/Chinese
简而言之,通过H@H可以获取丰厚的奖励,包括更多的归档额度(下载额度),更多的GP(E站代币),更多的愿力(Power)。
最低要求
虽然ehwiki上明确写明想要运行H@H,至少需要80+ Mbit/s的测量速度,但实际上中国大陆的运营商会限制家宽的上行,最高也不会超过60Mbps。
就拿我的家庭宽带来说,运营商是电信,上行最高也是60Mbps,不过这也足够跑了,菠萝(站长)对大陆地区会有一定的赦免,只要不是太离谱都会给你过。
网络环境要求
一个独立的IPv4 IP地址 全锥型NAT1想要运行H@H,必须满足两个条件中的其中之一。
当然,笔者也没有公网ipv4,好在有一个全锥型NAT1,通过nat1打洞的方式可以实现类似公网的效果。
其他要求
运行时长这点比较容易做到,因为做PCDN,7×24小时运行是必须的,因此建议在NAS上运行。 硬盘空间
虽然最低可以设置为10G,但理想的上专门用一块4T机械硬盘用于跑H@H,因为硬盘空间越大,分配的静态空间越多,奖励页就越丰厚。
NAT打洞
这是最重要的一点,也是决定你能否跑H@H的关键性技术。
V2ex讨论帖:https://www.v2ex.com/t/879549
由mikewang大佬提供的思路,并使用python实现。
作用:将本地的 TCP 端口暴露至公网上,运行 HTTP 服务。
缺点:端口随机,无法固定。
具体实现原理较为复杂,感兴趣的小伙伴请自行去查阅参考资料。
前期工作
我们首先了解一下Natter是什么:
这是一个将 fullcone NAT (NAT 1) 后的端口,打洞暴露至互联网,使用Python实现的打洞工具。
举一个最简单的使用方法:
首先需要检查你的网络是不是NAT1全锥型,Natter提供了一个检测的python程序。
网络检测
在Github下载natter-check.py
运行python3 natter-check.py
如果得出NAT类型都为1,则说明你是全锥型,恭喜你可以进行NAT1打洞了。
但如果你运行后发现NAT类似不都为1,也不要着急,这说明你没有正确设置DMZ主机。
如果你使用的也是OpenWrt做路由器,你可以这样设置:
找到网络→防火墙→端口转发:
此处只需要选择你想要运行nat1打洞的设备地址即可
比如我希望运行在OpenWrt上,那么就选择
然后添加,就能够把设备设置为DMZ主机了。
但注意只能够让一台设备打洞,同时转发多个设备只有一个设备生效。
Natter打洞
在Github下载natter.py
比方说,我希望将本机的8081端口暴露在互联网上,只需要执行
python3 natter.py -m iptables -p 8081
其中最下方的IP:10477就是暴露在互联网上的地址,只要使用ipv4任何人都可以访问。
H@H只需要一个公开的tcp端口,而且这个端口是可以自行的指定的,所以只需要使用自动化脚本将NAT1打洞获取到的端口返回给H@H。
准备工作
我们这里使用taskmgr818大佬提供的整合项目:hath-with-natter
james58899大佬提供的非官方构建的客户端:hath-rust
以及mikewang大佬提供的Natter打洞工具:Natter
作者将其与Natter结合封装为了一个项目。
hath-with-natter使用方法
两种使用方法,一种是Docker运行,另一种是Linux中直接运行。
我选择了在linux中直接运行,按理来说使用Docker版更稳定一些, 但由于我已经用上了linux版,docker就不作介绍了。
首先克隆仓库:
git clone https://github.com/taskmgr818/hath-with-natter
填写配置文件:
下载该项目到本地,并将hath-with-natter.yaml.example重命名为hath-with-natter.yaml
并编辑配置文件:
#e-hentai的Cookie及客户端ID/Key,用于通知服务器端口变动
access_info:
ipb_member_id:
ipb_pass_hash:
client_id:
client_key:
proxy:
#是否使用代理与e-hentai.org通信
enable: True
#是否使用代理下载缓存
cache_download: False
url: http://127.0.0.1:8080
其中ipb_member_id,ipb_pass_hash是你的e站的cookie,不知道如何获取请自行谷歌。
client_id和client_key是e站分配给你的客户端id和key,可以点此查看,填进去即可。(如果不知道如何申请H@H客户端,请仔细查阅ehwiki)
设置代理
需要注意的是,中国大陆是需要使用代理与e-hentai.org通信的。
只是简单提一下,我使用的是clash-meta,用docker-compose搭建:
# version: '3'
services:
clash:
container_name: clash-meta
image: metacubex/mihomo # 最新版用 metacubex/mihomo:Alpha
restart: always
pid: host
ipc: host
network_mode: host
cap_add:
- ALL
security_opt:
- apparmor=unconfined
volumes:
- ./clash_meta/clash:/root/.config/mihomo
- ./dev/net/tun:/dev/net/tun
# 共享host的时间环境
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
metacubexd:
container_name: metacubexd
image: mrxianyu/metacubexd-ui
restart: always
network_mode: bridge
ports:
- '1234:80'
volumes:
- ~/clash_meta/caddy:/config/caddy
# 共享host的时间环境
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
使用方式很简单,把配置文件config.yaml丢到挂载的目录即可,如:
当前文件夹/clash_meta/clash/config.yaml
测试代理:curl -x http://127.0.0.1:7890 -I https://www.google.com
rust-hath客户端
项目地址:https://github.com/james58899/hath-rust
在Github上下载对应版本的客户端,比如我使用的linux,架构是X86-64,因此选择
hath-rust-x86_64-unknown-linux-gnu
(不知道设备是什么架构,输入uname -a
查看。)
可以使用命令行下载
wget https://github.com/james58899/hath-rust/releases/download/v1.5.0/hath-rust-x86_64-unknown-linux-gnu
下载完成后重命名为hath-rust
mv hath-rust-x86_64-unknown-linux-gnu hath-rust
并赋予可执行权限
chmod +x hath-rust
至此准备工作已经完成。
运行hath-with-natter
我这里推荐使用tmux,单独创建一个窗口,保持后台运行。
直接tmux
创建一个窗口。
输入命令运行hath-with-natter
python3 main.py
如果一切顺利,那么就可以直接跑起来了。
如果就一个窗口可以输入tmux attach
很方便的进入窗口。
退出也很简单,按键盘上的Ctrl+b,再单独点击D,即可退出窗口。
然后查看H@H,你就会发现客户端已经上线了。
常见问题
Q:从其他地区转移到大陆的H@H客户端运行一段时间后信任值还是很低,甚至有时候会降到0 A:这是因为每个地区的H@H缓存的内容有很大的区别,只需要耐心等待几天即可 Q:发生报错ERROR - [SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1007)
A:可能是于E站进行通信的代理出现问题,重启或者更换代理。
发生报错INFO - HTTP Request: GET https://223.5.5.5 "HTTP/1.1 404 Not Found"
这个问题是因为你开启了H@H客户端的重启进行缓存校验,关闭校验即可。具体原因还没弄明白。
参考
https://www.v2ex.com/t/879549 https://ehwiki.org/wiki/Hentai@Home/Chinese https://github.com/taskmgr818/hath-with-natter https://github.com/james58899/hath-rust https://github.com/MikeWang000000/NatterNAT1打洞运行E站H@H客户端详细指南最先出现在krkr2(beta)。
文章来源:
Author:vce1
link:https://krkr2.xyz/1669/