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的速度,最好开启打开客户端侧速度限制。

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

网络环境要求

  • 一个独立的IPv4 IP地址
  • 全锥型NAT1

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

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

其他要求

  • 运行时长
    这点比较容易做到,因为运行PCDN,7×24小时运行是最基本的,因此建议在NAS上运行。
  • 硬盘空间
    虽然最低可以设置为10GB,但理想上专门使用一块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主机。

8f8afa5c1eb0d3644fbf7df422786e7c.png

如果你使用的也是OpenWrt做路由器,你可以这样设置:
找到网络→防火墙→端口转发:

此处只需要选择你想要运行nat1打洞的设备地址即可

92ef5e64beba63a7e5fef854cab0a29b.png

比如我希望运行在OpenWrt上,那么就选择
b666b9e3958cb2eb6656d5991e9ff750.png

然后添加,就能够把设备设置为DMZ主机了。

8a85c7db7facd014d2abbd30bc1c810a.png

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

Natter打洞测试

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


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

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

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

70e89e2c1573f6996a1b9e9204cb3e2b.png

其中最下方的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
如果一切顺利,那么就可以直接跑起来了。

72ca132eee6b8c3a59c1cde1bfff2978.png

可以输入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,如果一切顺利,你就会发现客户端已经上线。

常见问题

  • 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站进行通信的代理出现问题,重启或者更换代理。
  • Q:日志显示INFO - HTTP Request: GET https://223.5.5.5 "HTTP/1.1 404 Not Found"
  • A:属于正常现象,重新打洞前会进行的网络检测,包括hath-rust启动失败、打洞失效,进行缓存校验都会显示该日志。
  • Q:运行一段时间后客户端离线,并且无法重启解决。
  • A:检查是设备是否固定了ip,如果是设置DHCP则有可能因内部ip改变,而使DMZ失效。固定ip并重新设置DMZ主机即可。

参考


评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
Source: https://t.me/addstickers/ShizukuLulu_Vtuber
Source: https://t.me/addstickers/Necora_Nyaru
颜文字
Emoji
小恐龙
花!
雫るる
nyaru
上一篇