13 KiB
I2P 隧道配置
概述
tunnels.conf
旨在支持多个 I2P 隧道。配置文件在类 Unix 系统上必须位于 ~/.i2pd
(按用户)或 /var/lib/i2pd
(系统范围),在 Windows 上必须位于 %APPDATA%/i2pd
(按用户)。
该文件使用 .ini 文件格式。它由多个具有唯一名称的节组成。
隧道类型
节的类型由参数 type 指定。
可用的隧道类型:
Type | Description |
---|---|
client | 到远程 I2P 目标的客户端隧道(TCP) |
server | 在 I2P 网络中设置任意 TCP 服务的通用服务器隧道 |
http | 在 I2P 中设置网站的 HTTP 服务器隧道 |
irc | 在 I2P 中设置 IRC 服务器的 IRC 服务器隧道 |
udpclient | 将本地 UDP 端点转发到远程 I2P 目标 |
udpserver | 将来自 N 个 I2P 目标的流量转发到本地 UDP 端点 |
socks | 用于使用 I2P 的自定义 Socks 代理服务 |
httpproxy | 用于使用 I2P 的自定义 HTTP 代理服务 |
签名类型
在隧道配置中使用参数 signaturetype = <code>
。
可用的签名类型:
Type | Code | Comment |
---|---|---|
DSA-SHA1 | 0 | 已弃用 |
ECDSA-P256 | 1 | 无(正在使用) |
ECDSA-P384 | 2 | 无(正在使用) |
ECDSA-P521 | 3 | 无(正在使用) |
RSA-2048-SHA256 | 4 | 已弃用 |
RSA-3072-SHA384 | 5 | 已弃用 |
RSA-4096-SHA512 | 6 | 已弃用 |
ED25519-SHA512 | 7 | 默认 |
ED25519ph-SHA512 | 8 | 未实现 |
GOSTR3410-A-GOSTR3411-256 | 9 | 与 Java 路由器不兼容 |
GOSTR3410-TC26-A-GOSTR3411-512 | 10 | 与 Java 路由器不兼容 |
RED25519-SHA512 | 11 | 用于密钥盲化(加密 LeaseSet) |
ML-DSA-44 | 12 | 后量子 |
LeaseSet
可用的 LeaseSet 类型(在隧道配置中参数 i2cp.leaseSetType = <code>
):
Type | Code | Comment |
---|---|---|
OLD | 1 | 已弃用 |
STANDARD | 3 | 默认 |
ENCRYPTED | 5 | 加密 LeaseSet。对 floodfill 隐藏信息 |
META | 7 | 未实现 |
0、2、4、6 类型保留给路由器(RouterInfo 类型)。
可用的 LeaseSet 加密类型(在隧道配置中参数 i2cp.leaseSetEncType = <code>
):
Type | Code | Comment |
---|---|---|
ELGAMAL | 0 | 默认(仅用于兼容旧路由器) |
ECIES_P256_SHA256_AES256CBC | 1 | 与 Java 路由器不兼容 |
ECIES_P384_SHA384_AES256CBC | 2 | 未实现 |
ECIES_P521_SHA512_AES256CBC | 3 | 未实现 |
ECIES_X25519_AEAD | 4 | 默认 |
客户端隧道
助记:我们可以以客户端身份连接到某人
每个客户端隧道必须包含一些必需参数,以及一些可选参数。
以下是一个客户端隧道的示例:
[irc-out]
type = client
address = 127.0.0.1
port = 6668
destination = irc.ilita.i2p
keys = irc.dat
如果 keys 为空,则每次重启都会创建临时密钥。如果未找到密钥文件,将创建新密钥并存储到指定文件中。 如果 keys 以 transient 开头,将创建新密钥,但不会存储到文件中。
如果密钥文件包含相同的身份,客户端隧道可以共享同一个本地目标。
可选参数:
Option | Description |
---|---|
address | 隧道绑定的本地接口,“127.0.0.1”表示仅允许来自本地主机的连接,“0.0.0.0”表示允许来自任何地方的连接。(默认:127.0.0.1) |
port | 客户端隧道的端口。 |
signaturetype | 新密钥的签名类型。RSA 签名(4、5、6)不被允许,将会被改为 7。(默认:7) |
cryptotype | 新密钥的加密类型。实验性。应始终为 0 |
destinationport | 连接到目标上的特定端口。默认 0(指向目标端服务器侧的第一个隧道) |
keepaliveinterval | 以秒为单位,在此间隔后向目标发送 ping。(默认:0 - 不发送 ping) |
keys | 目标的密钥。当多个隧道相同,则每个隧道都会使用相同的目标。 |
因此,基于上述示例,如果你在本地主机上连接到 127.0.0.1:6668,i2pd 会将该连接通过隧道转发到 irc.ilita.i2p。
服务器/通用隧道
助记:我们在网络中向他人提供某项服务
以下是一个服务器隧道的示例:
[smtp-in]
type = server
host = 127.0.0.1
port = 25
keys = smtp-in.dat
如果 keys 为空,则每次重启都会创建临时密钥。如果未找到 keys 文件,将创建新密钥并存储到指定文件中。
将从 keys 文件中加载目标地址,并发布该地址的 LeaseSet。 服务器隧道必须使用其自己的目标,例如主机 127.0.0.1 和端口 80。
port 是(非 I2P)IP 主机上 TCP 监听端口,本地目标监听后会连接到该端口。
此隧道类型应适用于除 HTTP 之外的任何协议,即使是带 SSL 加密的 HTTP(HTTPS)也用这个。
可选参数:
Option | Description |
---|---|
host | 服务器的 IP 地址(i2pd 会将来自 I2P 的数据发送到此地址) |
port | 服务器隧道的端口。 |
inport | (非 TCP 非 UDP)I2P 本地目标监听的端口;一个无符号 16 位整数。服务器隧道在本地目标上监听的端口(默认:与 port 相同) |
accesslist | 允许连接的以逗号分隔的 b32 地址列表(不带 .b32.i2p)。默认允许所有人 |
gzip | 若设为 false 则关闭内部压缩。(默认:false) |
signaturetype | 新密钥的签名类型。(默认:7) |
cryptotype | 新密钥的加密类型。实验性。应始终为 0 |
enableuniquelocal | 若为 true,连接到本地地址将显示为 127.x.x.x,其中 x.x.x 为传入连接对端 ident hash 的前 3 个字节。(默认:IPv4 为 true,IPv6 为 false) |
address | 隧道连接到 host 时所使用的本地接口 IP 地址。通常不使用 |
keys | 目标的密钥。当多个隧道相同,则每个隧道都会使用相同的目标。 |
服务器/HTTP 隧道
http 隧道的配置与常规服务器隧道相同,但必须将 'Host:' 字段设置为配置中提供的地址。必要时 i2pd 也会解析它。
以下是一个 http 隧道的示例:
[http-in]
type = http
host = 127.0.0.1
port = 80
keys = our-website.dat
可选参数:
Option | Description |
---|---|
hostoverride | 在 'Host:' 头中发送的值,默认:与 host 参数相同 |
ssl | 对上游服务器使用 SSL 连接。可使用 hostoverride 参数设置 SNI 域。默认:false(自 2.44.0 起) |
服务器/IRC 隧道
IRC 隧道应通过 WEBIRC 连接到 IRC 服务器。它将 IP 地址(通常是 127.0.0.1)替换为用户的 .b32 I2P 地址。
可选参数:
Option | Description |
---|---|
webircpassword | 与 WEBIRC 命令一起发送的密码 |
UDP 隧道
UDP 隧道有两种类型:udpclient
和 udpserver
udpclient
将 1 个本地 UDP 端点转发到 1 个远程 I2P 目标
[openvpn-client-simple]
type = udpclient
destination = something.b32.i2p
port = 1194
Option | Description |
---|---|
destination | udpserver 隧道的 I2P 目标,必需参数 |
address | 绑定本地 UDP 端点的 IP 地址(默认:127.0.0.1 ) |
port | 绑定本地 UDP 端点的端口,必需参数 |
gzip | 若设为 false 则关闭内部压缩。(默认:false) |
keys | 目标的密钥。当多个隧道相同,则每个隧道都会使用相同的目标。 |
udpserver
将来自 N 个 I2P 目标的流量转发到 1 个本地 UDP 端点
[openvpn-simple-server]
type = udpserver
keys = openvpn.dat
host = 127.0.0.1
port = 1194
Option | Description |
---|---|
address | 用于本地 UDP 端点的 IP 地址(默认:127.0.0.1 ) |
host | 要转发流量到的 IP 地址,必需参数 |
port | 要转发流量使用的 UDP 端口,必需参数 |
gzip | 若设为 false 则关闭内部压缩。(默认:false) |
keys | 目标的密钥。当多个隧道相同,则每个隧道都会使用相同的目标。 |
Socks 代理
可以在 tunnels.conf
中定义 SOCKS 代理接口。
以下是一个 Socks 代理示例:
[alt-socks]
type = socks
address = 127.0.0.1
port = 14447
keys = socks-keys.dat
Option | Description |
---|---|
address | Socks 代理绑定的本地地址(默认:127.0.0.1 ) |
port | Socks 代理绑定的 TCP 端口 |
I2CP 参数
这些 I2CP 参数对所有隧道类型通用,用于指定本地目标的设置。
Parameter | Description |
---|---|
inbound.length | 入站隧道的跳数。默认 3,最大 8;数值越低越快,但去匿名风险越高 |
outbound.length | 出站隧道的跳数。默认 3,最大 8;数值越低越快,但去匿名风险越高 |
inbound.quantity | 入站隧道的数量。默认 5,最大 16 |
outbound.quantity | 出站隧道的数量。默认 5,最大 16 |
inbound.lengthVariance | 入站隧道随机增减的跳数,范围 -3 到 3。默认 0(自 2.42.0 起) |
outbound.lengthVariance | 出站隧道随机增减的跳数,范围 -3 到 3。默认 0(自 2.42.0 起) |
crypto.tagsToSend | 要发送的 ElGamal/AES 标签数量。默认 40;值过低可能导致隧道构建问题 |
crypto.ratchet.inboundTags | 每个标签集可生成的入站标签最大数量(默认:800) |
explicitPeers | 以逗号分隔的对等方 b64 地址列表(默认:未设置) |
i2p.streaming.initialAckDelay | 在发送 Ack 之前等待的毫秒数。(默认:200) |
i2p.streaming.answerPings | 启用发送 pong。1 或 true,0 或 false(默认:1) |
i2p.streaming.maxOutboundSpeed | 流的最大出站速度(字节/秒)。(默认:1730000000) |
i2p.streaming.maxInboundSpeed | 流的最大入站速度(字节/秒)。(默认:1730000000) |
i2p.streaming.profile | 带宽使用配置。1 - 批量(高),2 - 交互(低)。(默认:1) |
i2p.streaming.maxConcurrentStreams | 同时存在的流总数量上限。(默认:2048) |
i2p.streaming.maxWindowSize | 流的最大窗口大小(默认:512) |
i2p.streaming.dontSign | 在需要时不包含签名。仅当对端不验证签名时才启用(默认:false) |
i2cp.leaseSetType | 要发送的 LeaseSet 类型。1、3 或 5。(默认:3) |
i2cp.leaseSetEncType | 用于 LeaseSet 类型 3 或 5 的加密类型(逗号分隔)。(默认:0,4) |
i2cp.leaseSetPrivKey | 加密 LeaseSet 的解密密钥,base64。PSK 或私有 DH |
i2cp.leaseSetAuthType | 加密 LeaseSet 的认证类型。0 - 无认证(默认),1 - DH,2 - PSK |
i2cp.leaseSetClient.dh.nnn | 客户端名:客户端的公有 DH(base64),用于认证类型 1,nnn 为整数 |
i2cp.leaseSetClient.psk.nnn | 客户端名:客户端的 PSK(base64),用于认证类型 2,nnn 为整数 |
i2cp.dontPublishLeaseSet | 若设为 true 则不发布 LeaseSet。(默认:false) |
其他示例
# 出站隧道示例,连接到远程服务
# 必需参数:
# * type -- 始终为 "client"
# * port -- 本地监听端口
# * destination -- I2P 主机名
# 可选参数(可省略)
# * keys -- 我们的身份;若未设置,每次启动都会生成,
# 若已设置且文件缺失,将生成密钥并写入该文件
# * address -- 绑定的本地接口
# * signaturetype -- 新目标的签名类型。0(DSA/SHA1)、1(EcDSA/SHA256)或 7(EdDSA/SHA512)
[IRC]
type = client
address = 127.0.0.1
port = 6668
destination = irc.ilita.i2p
keys = irc-keys.dat
#
# 入站隧道示例,用于本地服务
# 必需参数:
# * type -- "server" 或 "http"
# * host -- 我们服务的 IP 地址
# * port -- 我们服务的端口
# * keys -- I2P 中该地址的 LeaseSet 文件
# 可选参数(可省略)
# * inport -- 可选,I2P 服务端口;若未设置,与 'port' 相同
# * accesslist -- 允许连接的 I2P 地址的逗号分隔列表,
# 每个地址为 b32,且不含 '.b32.i2p' 部分
[LOCALSITE]
type = http
host = 127.0.0.1
port = 80
keys = site-keys.dat
#
[IRC-SERVER]
type = server
host = 127.0.0.1
port = 6667
keys = irc.dat