【学习记录】I2P概述

简介

I2P(Invisible Internet Project )是去中心化的点到点(P2P)匿名网络,使用JAVA开发。与Tor类似,都是通过若干个网络节点来加密和传输数据,但匿名度比Tor更高。
Tor主要致力于为用户提供匿名访问实施和操作外部的互联网服务,解决“匿名性”和“隐藏服务”,侧重应用层设计,构建了一个“覆盖网络”。
I2P试图将现有互联网服务转移到I2P网络,并在框架内提供服务实现,提供匿名文件共享和匿名网络托管,解决“匿名性”、“隐藏服务”和“安全性”,侧重网络层设计,构建了一个“虚拟互联网”。
(参考:https://www.hanspub.org/journal/paperinformation?paperID=31299&btwaf=39457632)

使用

安装

需要安装高于1.5的JAVA版本
安装教程可以在官网找到,https://geti2p.net/en/download
(官方注:在linux上不要用root启动i2p)

连接I2P网络

首次连接I2P网络需要补种,后面详细说。

设置代理

通过I2P访问网站需要设置本地代理,默认HTTP代理端口为4444,HTTPS为4445。

启动

启动成功后,访问127.0.0.1:7657就能看到I2P的控制台,包括设置和各项网络指标。

图片名称

网络指标

图片名称

机制

Kad算法

用途:通过种子节点扩散获取网络节点信息、将传输的原始数据拆散为加密数据包通过多条隧道交叉疏散传递。

特点:
1. 拿到的只是整个I2P网络的一小部分节点
2. 不需要目录服务器
3. 每一台运行I2P的主机都是网络中继,共享带宽帮别人转发数据
4. 只要连上一次I2P,就能不断获取网络中部分其他节点的信息,保证与I2P网络维持连接

网络数据库netdb

图片名称

大蒜路由

要传输信息时,首先将要传输的信息分成多个子信息,然后从网络数据库(netdb)中随机选取可用的中间节点,构建多个加密隧道。

  1. 隧道
    建立隧道时,隧道的发起者必须向发起者选出来的隧道的每一跳发送请求和必要的配置数据,并且等到每一跳的确认信息后才能开始建立隧道。隧道的发起者发送的建立隧道请求是加密的,并且只有隧道的创建者才能够访问每一跳的确认信息。隧道最大生命周期为10分钟。通常情况下,一条隧道有3跳,即网关节点、中间节点(可调整数量)、终点。一个完整的单向传输包括输出隧道和输入隧道,至少有6个节点参与其中。

  2. 对等实体(peer)选择
    在选取可用中间节点中, I2P客户端依赖于先前监控的性能值和网络的当前状态,不使用有效带宽探测。I2P节点选择算法,能够非常快速地对失败的对等体和网络拓扑中的其他变化做出反应,通过不断分析和排名性能来选择对等体,而不是信任所声称的容量。
    (参考:http://www.3n1ac.com/index.php/archives/3/)

  3. 隧道创建
    当一个路由节点想要创建一条输出隧道的时候,它会首先查看自己的netDb文件夹,获取一系列的RouterInfor信息(这个信息是之前路由实时监测得到的),根据他们的性能和其他指标从其中挑选几个节点,并且将节点根据一定的算法进行严格的排序,之后为挑选出来的每一个节点配置好相应的信息,然后转发出去。
    对于输出隧道来讲,隧道创建者就是隧道网关,将创建隧道的指令等之前配置好的信息按照之前挑选出来的、排好的顺序转发下一跳路由——隧道的中间节点,中间节点接收到指令之后,会了解到现在要创建一条隧道,它将指令会继续转发下去,然后会将请求记录替换成回复记录(说明是否同意参与隧道),继续转发到下一跳当中去。当消息一直转发到隧道的最后一个节点,即终点的时候,会按照之前的指令将消息转发到相应的输入隧道中去,最终返回到对应隧道创建者那里。
    由于隧道的构建会有较大的时间成本和带宽负载,并且每条隧道有最高10分钟的生命周期,超过这个时间之后隧道就会被销毁,所以为了实现服务的高效运行,为应用提供冗余的带宽,每个I2P路由器都会维护一系列的隧道池,每个隧道池中的隧道用于同一种通信目的。

  4. 终点处理
    在隧道的最后一跳接收并验证了隧道消息之后,终点如何恢复网关的数据同样取决于隧道是输入隧道还是输出隧道。
    对于输出隧道,终点像其他参与者一样,使用其层密钥对消息进行加密、转发即可。
    对于输入隧道,终点也是隧道创建者,因此它们可以使用与隧道节点路由的顺序相反的顺序,使用每层加密密钥和IV(隧道初始化向量)密钥迭代地解密IV密钥和消息。

图片名称

I2P与TOR对比

I2P 大蒜路由

  1. 完全去中心化,节点信息被保存在每一个I2P节点中,不需要目录服务器
  2. 多条隧道传输接收和发送的信息,且每10分钟更换一次
  3. 传输的信息会被切分为多个子信息,通过不同加密隧道传输到目的地
  4. 速度慢

TOR 洋葱路由

  1. 依赖目录服务器获取中继节点,容易被封禁
  2. 单条隧道传输接收和发送的信息
  3. 比I2P快

补种

由于Kad算法需要初始的种子来扩散获取更多节点信息,在初次连接I2P网络时需要补种,即利用一定数量的已知活跃节点来寻找其他节点。
一旦连上了I2P,就能一直联网,若一段时间不使用(超过三个月),由于没有了最新的活跃I2P节点信息,才需要重新补种。
I2P初始内置了种子节点信息,但有可能无效,需要其他方法补种。

图片名称

补种网站、文件

I2P内置了几个补种网站,是默认补种方法。
也可以自行在补种网站上下载补种文件,要求时效性高。
自己可以创建补种文件分享给他人(节点信息来源于自身网络数据库)

附部分补种网站:

https://banana.incognet.io/
https://i2p.novg.net/
https://i2pseed.creativecowpat.net:8443/
https://reseed-fr.i2pd.xyz/
https://reseed-pl.i2pd.xyz/
https://reseed.diva.exchange/
https://reseed.i2pgit.org/
https://reseed.memcpy.io/ 
https://reseed.onion.im/
https://reseed2.i2p.net/
https://app.box.com/s/aednqugd5zf07mlg65wjeafay3b1qqbg/folder/88436877456
https://www2.mk16.de/
https://i2phides.me/i2pseeds.su3

补种文件

从文件导入有zip和su3格式,su3是带有签名功能的压缩文件。
解压后记事本打开可以看到一个I2P路由信息,包括NTCP和SSU两个协议的host、端口、密钥等信息,即控制台中netdb所显示的内容。乱码部分是su3的文件头信息,详细表格见官方文档。
(官方文档:https://geti2p.net/spec/updates#su3)
(根据不完全观察,每小时新增70个左右)

图片名称

网站

I2P匿名站点(eepsite)是I2P网络内的网站。I2P站点的名称以.i2p结尾,通过识别密钥(即加密后的base64密钥,不同于常见base64,用~代替/,用-代替+)寻找这些站点,已知站点密钥保存在本地host.txt文件中。

地址簿

I2P的网站密钥可以通过订阅地址簿、导航网站、自行导入地址访问。
如:
http://tino.i2p/hosts.txt
http://stats.i2p/cgi-bin/newhosts.txt
http://i2host.i2p/cgi-bin/i2hostetag
http://no.i2p/export/alive-hosts.txt
http://notbob.i2p/hosts.txt
以notbob为例,网站分类有搜索引擎、加密货币与交易、git、视频、sqbl等。

图片名称

网站

首次访问未在地址簿中的网站时,可以通过跳转服务来找到该网站的密钥。

图片名称

I2P与TOR术语对比

图片名称
posted on 2025-04-27 16:37  q1uki  阅读(375)  评论(0)    收藏  举报