i2pd_docs_zh/docs/user-guide/tunnels.md

319 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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 | 默认
客户端隧道
--------------
助记:我们可以以客户端身份连接到某人
每个客户端隧道必须包含一些必需参数,以及一些可选参数。
以下是一个客户端隧道的示例:
```ini
[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:6668i2pd 会将该连接通过隧道转发到 irc.ilita.i2p。
服务器/通用隧道
----------------------
助记:我们在网络中向他人提供某项服务
以下是一个服务器隧道的示例:
```ini
[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 是(非 I2PIP 主机上 TCP 监听端口,本地目标监听后会连接到该端口。
此隧道类型应适用于除 HTTP 之外的任何协议,即使是带 SSL 加密的 HTTPHTTPS也用这个。
可选参数:
Option | Description
--------------------|--------------------
host | 服务器的 IP 地址i2pd 会将来自 I2P 的数据发送到此地址)
port | 服务器隧道的端口。
inport |(非 TCP 非 UDPI2P 本地目标监听的端口;一个无符号 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 为 trueIPv6 为 false
address | 隧道连接到 host 时所使用的本地接口 IP 地址。通常不使用
keys | 目标的密钥。当多个隧道相同,则每个隧道都会使用相同的目标。
服务器/HTTP 隧道
-------------------
http 隧道的配置与常规服务器隧道相同,但必须将 'Host:' 字段设置为配置中提供的地址。必要时 i2pd 也会解析它。
以下是一个 http 隧道的示例:
```ini
[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 目标
```ini
[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 端点
```ini
[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 代理示例:
```ini
[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 或 true0 或 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 - DH2 - PSK
i2cp.leaseSetClient.dh.nnn | 客户端名:客户端的公有 DHbase64用于认证类型 1nnn 为整数
i2cp.leaseSetClient.psk.nnn | 客户端名:客户端的 PSKbase64用于认证类型 2nnn 为整数
i2cp.dontPublishLeaseSet | 若设为 true 则不发布 LeaseSet。默认false
其他示例
--------------
```ini
# 出站隧道示例,连接到远程服务
# 必需参数:
# * type -- 始终为 "client"
# * port -- 本地监听端口
# * destination -- I2P 主机名
# 可选参数(可省略)
# * keys -- 我们的身份;若未设置,每次启动都会生成,
# 若已设置且文件缺失,将生成密钥并写入该文件
# * address -- 绑定的本地接口
# * signaturetype -- 新目标的签名类型。0DSA/SHA1、1EcDSA/SHA256或 7EdDSA/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
```