站点图标 Ayumi Moe

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+7)。

最低要求

虽然ehwiki上明确写明想要运行H@H,至少需要80+ Mbit/s的测量速度,但实际上中国大陆的运营商会限制家宽的上行,最高也不会超过60Mbps。

就拿我的家庭宽带来说,运营商是电信,上行最高也是60Mbps,不过这也足够跑了,菠萝(站长)对大陆地区会有一定的赦免,只要不是太离谱都会给你过。

值得注意的是假设你的家庭网络最高上行为60Mbps,那么请不要设置超过10MB/S的速度,最好开启打开客户端侧速度限制。

虽然设置超越上限的速度可以拿到更多的静态范围,但对应的你的网络会因为上行被占满而变得无比卡顿,严重影响网络质量。

网络环境要求

想要运行H@H,必须满足两个条件中的其中之一。

当然,笔者也没有公网ipv4,好在有一个全锥型NAT1,通过nat1打洞的方式可以实现类似公网的效果。

其他要求

NAT打洞

这是决定你的网络能否运行H@H的关键性技术。

V2ex讨论帖:https://www.v2ex.com/t/879549

mikewang大佬提供的思路,并使用python实现。

具体实现原理较为复杂,感兴趣的小伙伴请自行去查阅参考资料。

前期工作

我们首先了解一下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主机了。

但注意只能够让一台设备打洞,由于DMZ的特性,同时转发多个设备只有一个设备生效。

Natter打洞测试

在Github下载natter.py
运行natter:python3 natter.py


浏览器访问Please check中的url,出现“it work!”字样,即表明打洞成功。

Natter也可以将正在运行中的服务暴露到互联网中:

比方说,我希望将本机的8081端口暴露在互联网上,只需要执行
python3 natter.py -m iptables -p 8081

其中最下方的IP:10477 就是暴露在互联网上的地址,只要使用ipv4任何人都可以访问。

看到这里,可以简单概括一下,实现原理:

由于H@H只需要一个公开的tcp端口,而且这个端口是可以自行的指定的,所以只需要使用自动化脚本将NAT1打洞获取到的端口返回给H@H即可。

(此步骤仅作为环境测试,实际上只需要运行hath-with-natter以及hath-rust这两个项目即可。)

准备工作

我们这里使用taskmgr818大佬提供的整合项目:hath-with-natter
james58899大佬提供的非官方构建的客户端:hath-rust
以及mikewang大佬提供的Natter打洞工具:Natter

hath-with-natter使用方法

两种使用方法,一种是Docker运行,另一种是Linux中直接运行。

我选择了在linux中直接运行,按理来说使用Docker版更稳定一些, 但由于我已经用上了linux版,docker就不作介绍了。

Docker,YYDS!

首先克隆仓库:

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
hath-rust:
  #是否开启缓存校验
  force_background_scan: False

其中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/latest/download/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

在Linux上直接运行

我这里推荐使用tmux,单独创建一个窗口,保持后台运行。
直接tmux new -s hath-with-natter创建一个新的会话。
输入命令运行hath-with-natter
python3 main.py
如果一切顺利,那么就可以直接跑起来了。


可以输入tmux attach很方便的进入窗口。
退出也很简单,按键盘上的Ctrl+b,再单独点击键盘上的D,即可保持后台运行,并退出窗口。

使用Docker环境运行

Docker环境要比linux直接启动更为稳定,

services:
  hath-with-natter:
    image: taskmgr818/hath-with-natter
    container_name: hath-with-natter
    network_mode: host
    volumes:
      - ./config.yaml:/hath/config.yaml
      - ./hath/:/hath/hath
    restart: unless-stopped

需要注意配置好两个配置文件./config.yaml./hath/
注意查看项目README.md。
使用命令docker compose up -d 拉取镜像并在后台启动。

成功启动后使用命令docker ps查看容器id。

使用docker logs -f 容器id可查看容器的日志。

最后查看H@H,如果一切顺利,你就会发现客户端已经上线。

常见问题

参考