i2pd 配置

i2pd 可以通过命令行参数或配置文件进行配置。 修改 i2pd.conf 只是一种在 i2pd 启动时向其传递命令行参数的方式; 例如,以参数 --port=10123 运行 i2pd,与在配置文件中设置选项 port = 10123 的效果相同。

有两个独立的配置文件:i2pd.conftunnels.confi2pd.conf 是主配置文件,你在其中配置所有选项。tunnels.conf 是隧道配置文件,你在其中配置 I2P 隐藏服务和客户端隧道。tunnels.conf 的选项文档在此处

i2pd.conf 接受类似 INI 的语法,例如:<键> = <值>。 注释使用 “#”,而不是你可能预想的 “;”。参见 boost 工单 所有命令行参数都可以作为键,但对于包含点号 (.) 的参数,有特殊语法。

例如:

i2pd.conf:

# 这是注释
log = true # 使用标准输出(默认)
ipv6 = true
# 针对特定模块的设置
[httpproxy]
port = 4444
# ^^ 这在命令行中将会是 --httproxy.port=
# 这是另一个注释
[sam]
enabled = true

于此同时,建议查看 contrib/i2pd.conf,其中包含带注释的配置和所有选项的示例。

命令行中指定的选项优先于配置文件中的选项。 如果你正在升级非常老的路由器(< 2.3.0),另请参见这个页面。

可用选项

运行 ./i2pd --help 显示内置的帮助信息(选项的默认值将显示在括号内)

通用选项

选项 说明
conf 配置文件位置(默认:~/.i2pd/i2pd.conf 或 /var/lib/i2pd/i2pd.conf)。如果指定的配置文件不存在,此参数将被静默忽略。
tunconf 隧道配置文件位置(默认:~/.i2pd/tunnels.conf 或 /var/lib/i2pd/tunnels.conf)
tunnelsdir 额外隧道配置文件夹路径。其中的所有 *.conf 文件将自动加载(推荐用于模块化设置)(默认:或 /var/lib/i2pd/tunnels.d 或 ~/.i2pd/tunnels.d)
certsdir 用于验证 .su3、family 的证书路径(默认:空)
pidfile 写入 pidfile 的位置(默认:i2pd.pid,Windows 上不使用)
log 日志写入位置:stdout、file、syslog(若未设置或无效则为 stdout)(若作为守护进程运行,在某些情况下 stdout/未指定 会被替换为 file)
logfile 日志文件路径(默认 - 自动检测)
loglevel 记录此级别及以上的日志消息(debug、info、warn、error、none;默认 - warn)
logclftime 将完整的 CLF 格式日期和时间写入日志(默认:false(仅写入时间))
datadir i2pd 数据存储路径(配置、密钥、netdb、对等节点档案等)。只能作为参数传递。
host 用于入站连接的路由器外部 IP(默认:自动(若启用 SSU2))
port 用于入站连接的监听端口(默认:自动(随机))
daemon 路由器启动后转入后台(默认:true)
service 路由器将使用系统目录,如(在 unix 上)'/var/lib/i2pd' 或(在 Windows 上)'C:\ProgramData\i2pd'。在 MacOS 和 Android 上忽略(默认:false)
ifname 要绑定的网络接口
ifname4 用于绑定 IPv4 的网络接口
ifname6 用于绑定 IPv6 的网络接口
address4 用于绑定 IPv4 的本地地址
address6 用于绑定明网 IPv6 的本地地址
nat 若为 true,假定我们处于 NAT 之后(默认:true)
ipv4 启用通过 IPv4 的通信(默认:true)
ipv6 启用通过明网 IPv6 的通信(默认:false)
notransit 路由器将不接受中转隧道,完全禁用中转流量。将发布 G 路由能力标志(默认:false)
floodfill 路由器将作为洪泛节点(默认:false)
bandwidth 带宽限制:整数(每秒千字节),或字母:L(32)、O(256)、P(2048)、X(无限),或带单位的整数(b、kb、mb、gb),例如,100mb = 1000000 kb/s
share 用于中转的带宽限制最大百分比。0-100(默认:100)
family 路由器所属的家族名称
netid 路由器所属的网络 ID。I2P 主网为 2。
reservedrange 检查远程 RI 是否在保留 IP 范围黑名单中(默认:已启用)
stan 适用于连接受限的环境(默认:false)

说明

datadirservice 选项仅可作为 i2pd 的启动参数使用,在 i2pd.conf 中设置它们无效。

NTCP2

选项 说明
ntcp2.enabled 启用 NTCP2(默认:true)
ntcp2.published 启用入站 NTCP2 连接(默认:true)
ntcp2.port 监听入站 NTCP2 连接的端口(默认:自动 - 使用通用选项部分的 port
ntcp2.addressv6 用于入站连接的外部 IPv6 地址
ntcp2.proxy 为 NTCP2 指定代理服务器。应为 http://address:port 或 socks://address:port
ntcp2.version 协议版本。2 - 标准加密,3 - ML-KEM-512,4 - ML-KEM-768,5 - ML-KEM-1024(默认:4(启用后量子支持时),2(未启用后量子支持时))

SSU2

选项 说明
ssu2.enabled 启用 SSU2(默认:true)
ssu2.published 启用入站 SSU2 连接(默认:true)
ssu2.port 监听入站 SSU2 连接的端口(默认:自动 - 使用通用选项部分的 port
ssu2.proxy 为 SSU2 指定 UDP socks5 代理服务器。应为 socks://address:port
ssu2.mtu4 本地 IPv4 的 MTU(默认:自动)
ssu2.mtu6 本地 IPv6 的 MTU(默认:自动)
ssu2.firewalled4 即使网络状态正常也强制将 IPv4 网络状态设为 Firewalled(默认:false)
ssu2.firewalled6 即使网络状态正常也强制将 IPv6 网络状态设为 Firewalled(默认:false)
ssu2.version 协议版本。2 - 标准加密,3 - ML-KEM-512,4 - ML-KEM-768(默认:2)

以下的所有选项仍可在命令行中设置,但更建议写在配置文件中:

HTTP Web 控制台

选项 说明
http.enabled 是否启用 Web 控制台(默认:true)
http.address 监听地址(HTTP 服务器)
http.port 监听端口(HTTP 服务器)(默认:7070)
http.auth 为 Web 控制台启用基本 HTTP 认证(默认:false)
http.user 基本认证的用户名(默认:i2pd)
http.pass 基本认证的密码(默认:随机,见日志)
http.strictheaders 在 WebUI 上启用严格的主机名检查(默认:true)
http.hostname WebUI 期望的主机名(默认:localhost)
http.showTotalTCSR 显示自路由器启动以来的总 TCSR 值(默认:false)
http.webroot Web 控制台的路径(默认:/)
http.lang Web 控制台语言(默认:english)
http.theme 设置 Web 控制台的 CSS 主题。内置主题:blackwhite(默认:light)。要使用自定义主题,将 CSS 文件(例如 hacker.css)放在 %DataDir%/webconsole/ 并使用 --http.theme=hacker

HTTP 代理

选项 说明
httpproxy.enabled 是否启用 HTTP 代理(默认:true)
httpproxy.address 监听地址(HTTP 代理)
httpproxy.port 监听端口(HTTP 代理)(默认:4444)
httpproxy.addresshelper 启用地址助手(跳转)(默认:true)
httpproxy.keys HTTP 代理本地目标的密钥文件(可选)
httpproxy.signaturetype 用于本地目标密钥的签名类型(默认:7)
httpproxy.inbound.length 入站隧道长度(默认:3)
httpproxy.inbound.quantity 入站隧道数量(默认:5)
httpproxy.inbound.lengthVariance 入站隧道长度方差(默认:0)
httpproxy.outbound.length 出站隧道长度(默认:3)
httpproxy.outbound.quantity 出站隧道数量(默认:5)
httpproxy.outbound.lengthVariance 出站隧道长度方差(默认:0)
httpproxy.outproxy HTTP 代理上游出站代理 URL(如 http://exit.stormycloud.i2p)
httpproxy.senduseragent 是否透传用户的 User-Agent(默认:false)
httpproxy.i2cp.leaseSetType 要发送的 LeaseSet 类型。1、3 或 5(默认:3)
httpproxy.i2cp.leaseSetEncType 在 LeaseSet 类型为 3 或 5 时使用的加密类型,逗号分隔
httpproxy.i2p.streaming.profile HTTP 代理带宽使用配置。1 - 批量(高),2 - 交互(低)(默认:1)
httpproxy.i2p.streaming.maxWindowSize 数据流的最大窗口大小(默认:512)
httpproxy.latency.min HTTP 代理的最小隧道延迟(毫秒)(默认:0)
httpproxy.latency.max HTTP 代理的最大隧道延迟(毫秒)(默认:0)
httpproxy.i2cp.leaseSetPrivKey LeaseSet 私钥(加密 LeaseSet 的解密密钥),base64 格式。PSK 或 DH 私钥
httpproxy.i2p.streaming.maxOutboundSpeed HTTP 代理流的最大出站速度(字节/秒)(默认:1730000000)
httpproxy.i2p.streaming.maxInboundSpeed HTTP 代理流的最大入站速度(字节/秒)(默认:1730000000)

Socks 代理

选项 说明
socksproxy.enabled 是否启用 SOCKS 代理(默认:true)
socksproxy.address 监听地址(SOCKS 代理)
socksproxy.port 监听端口(SOCKS 代理)(默认:4447)
socksproxy.keys SOCKS 代理本地目的地的可选密钥文件
socksproxy.signaturetype 则用于本地目标密钥的签名类型(默认:7)
socksproxy.inbound.length 入站隧道长度(默认:3)
socksproxy.inbound.quantity 入站隧道数量(默认:5)
socksproxy.inbound.lengthVariance 入站隧道长度方差(默认:0)
socksproxy.outbound.length 出站隧道长度(默认:3)
socksproxy.outbound.quantity 出站隧道数量(默认:5)
socksproxy.outbound.lengthVariance 出站隧道长度方差(默认:0)
socksproxy.outproxy.enabled 启用或禁用 SOCKS5 出站代理(默认:false)
socksproxy.outproxy 出站代理地址(IP 或本地)。I2P 外的请求将发送到此处。
socksproxy.outproxyport 出站代理端口。若为 0,socksproxy.outproxy 的路径为本地套接字
socksproxy.i2cp.leaseSetType 要发送的 LeaseSet 类型。1、3 或 5(默认:3)
socksproxy.i2cp.leaseSetEncType 在 LeaseSet 类型为 3 或 5 时使用的加密类型,逗号分隔
socksproxy.i2p.streaming.profile SOCKS 代理带宽使用配置。1 - 批量(高),2 - 交互(低)(默认:1)
socksproxy.i2p.streaming.maxWindowSize 数据流的最大窗口大小(默认:512)
socksproxy.latency.min SOCKS 代理的最小隧道延迟(毫秒)(默认:0)
socksproxy.latency.max SOCKS 代理的最大隧道延迟(毫秒)(默认:0)
socksproxy.i2cp.leaseSetPrivKey LeaseSet 私钥(加密 LeaseSet 的解密密钥),base64 格式。PSK 或 DH 私钥
socksproxy.i2p.streaming.maxOutboundSpeed SOCKS 代理流的最大出站速度(字节/秒)(默认:1730000000)
socksproxy.i2p.streaming.maxInboundSpeed SOCKS 代理流的最大入站速度(字节/秒)(默认:1730000000)

SAM 接口

选项 说明
sam.enabled 是否启用 SAM(默认:true)
sam.address 监听地址(SAM 桥)
sam.port SAM 桥端口。通常为 7656。若未指定则关闭 SAM
sam.portudp SAM 桥的 UDP 端口。通常为 7655。
sam.singlethread 若为 false,每个 SAM 会话在自己的线程中运行(默认:true)

BOB 接口

选项 说明
bob.enabled 是否启用 BOB(默认:false)
bob.address 监听地址(BOB 命令通道)
bob.port BOB 命令通道端口。通常为 2827。若未指定则关闭 BOB

I2CP 接口

选项 说明
i2cp.enabled 是否启用 I2CP(默认:true)
i2cp.address 监听地址,或 Android LocalSocket 的抽象地址
i2cp.port I2CP 服务器端口。通常为 7654。Android 上忽略此项
i2cp.singlethread 若为 false,每个 I2CP 会话在自己的线程中运行(默认:true)
i2cp.inboundlimit 在 BandwidthLimitsMessage 中返回的客户端入站限制(KBps)。若为 0 则为路由器带宽(默认:0)
i2cp.outboundlimit 在 BandwidthLimitsMessage 中返回的客户端出站限制(KBps)。若为 0 则为路由器带宽(默认:0)

I2PControl 接口

选项 说明
i2pcontrol.enabled 是否启用 I2P control(默认:false)
i2pcontrol.address 监听地址(IP 或本地套接字路径)
i2pcontrol.port I2P control 服务端口。通常为 7650。若为 0,则 i2pcontrol.address 包含本地套接字路径
i2pcontrol.password I2P control 认证密码(默认:itoopie)
i2pcontrol.cert I2P control HTTPS 证书文件名(默认:i2pcontrol.crt.pem)
i2pcontrol.key I2P control HTTPS 证书密钥文件名(默认:i2pcontrol.key.pem)

UPNP

选项 说明
upnp.enabled 启用或禁用 UPnP,CLI 默认为 false,GUI(Windows、Android)默认为 true
upnp.name i2pd 在 UPnP 转发表中的显示名称(默认:I2Pd)

密码学

选项 说明
precomputation.elgamal 使用 ElGamal 预计算表(x86-64 默认为 false,其他平台为 true)

补种(Reseeding)

选项 说明
reseed.verify 验证 .su3 签名(默认:false)
reseed.urls Reseed 的 URL,逗号分隔
reseed.yggurls Yggdrasil 的 Reseed URL,逗号分隔
reseed.file 本地 .su3 文件路径或用于 Reseed 的 HTTPS URL
reseed.zipfile 用于 Reseed 的本地 .zip 文件路径
reseed.threshold 在请求 Reseed 前已知路由器的最小数量(默认:25)
reseed.proxy 用于 Reseed 的 https/socks 代理的 URL
reseed.floodfill 被忽略。始终为空。用于从中补种的 floodfill 路由器信息路径。
reseed.followredirect 从 URL 补种时是否跟随重定向(默认:false)

地址簿选项

选项 说明
addressbook.enabled 启用或禁用地址簿(默认:true)
addressbook.defaulturl 地址簿订阅 URL。仅用于初始化地址簿。
addressbook.subscriptions 地址簿订阅的 URL,逗号分隔。注意 defaulturl 不会自动加入订阅 URL
addressbook.hostsfile 以 hosts.txt 格式导出地址簿的文件

限制

选项 说明
limits.transittunnels 覆盖中转隧道的最大数量(默认:10000)
limits.openfiles 限制打开的文件描述符数量(默认:0 - 使用系统限制)
limits.coresize corefile 的最大大小(KB)(默认:0 - 使用系统限制)
limits.zombies 若成功创建的隧道比例低于该最小百分比,则暂停隧道清理(默认 [%]:0.00)

信任选项

选项 说明
trust.enabled 启用显式信任选项(默认:false)
trust.family 仅与指定 Family 中的路由器建立直接 I2P 连接
trust.routers 仅与此处指定的路由器建立直接 I2P 连接。使用以逗号分隔的 base64 身份列表
trust.hidden 是否对其他路由器隐藏本路由器?(默认:false)

探测(Exploratory)隧道

选项 说明
exploratory.inbound.length 探测隧道入站长度(默认:2)
exploratory.inbound.quantity 探测隧道入站数量(默认:3)
exploratory.outbound.length 探测隧道出站长度(默认:2)
exploratory.outbound.quantity 探测隧道出站数量(默认:3)

共享本地目标

选项 说明
shareddest.inbound.length 共享本地目标的入站隧道长度(默认:3)
shareddest.inbound.quantity 共享本地目标的入站隧道数量(默认:3)
shareddest.outbound.length 共享本地目标的出站隧道长度(默认:3)
shareddest.outbound.quantity 共享本地目标的出站隧道数量(默认:3)
shareddest.i2cp.leaseSetType 共享本地目标的 LeaseSet 类型(默认:3)
shareddest.i2cp.leaseSetEncType 共享本地目标的 LeaseSet 加密类型(默认:0,4)
shareddest.i2p.streaming.profile 共享本地目标的带宽使用配置(默认:2)

时间同步

选项 说明
nettime.enabled 启用 NTP 同步(默认:false)
nettime.ntpservers NTP 服务器的逗号分隔列表(默认:pool.ntp.org)
nettime.ntpsyncinterval NTP 时间同步间隔(小时)(默认:72)
nettime.frompeers 从传输层对等节点同步时钟(默认:true)

网络信息持久化

选项 说明
persist.profiles 将对等节点档案持久化到磁盘(默认:true)
persist.addressbook 将完整地址保存到磁盘(默认:true)

网状网络传输

选项 说明
meshnets.yggdrasil 支持通过 Yggdrasil 的传输(默认:false)
meshnets.yggaddress 用于发布的本地 Yggdrasil 地址

Windows 特定选项

选项 说明
insomnia 防止系统休眠
close 关闭时的动作:最小化、退出、询问

UNIX 特定选项

选项 说明
unix.handle_sigtstp 处理 SIGTSTP 与 SIGCONT 信号(默认:false)

handle_sigtstp 启用对 SIGTSTP 和 SIGCONT 信号的处理(自 2.43.0 起)。

可以使用在运行 i2pd 的终端里按 Ctrl+Z 或通过 kill 命令来发送 SIGTSTP。收到该信号后,i2pd 将切换到离线模式,停止发送流量并停止清理 netDb。所有活动隧道将被冻结。

要恢复网络连接,你需要向该进程发送 SIGCONT 信号。若隧道在冻结状态期间到期,它们将被清除,并建立新的隧道。

本地地址簿

工作目录中还有一个特殊的地址簿配置文件 addressbook/local.csv。 如果你在路由器上运行该二级域(2ld)地址并且它已在地址簿中呈现,它可让你的路由器充当三级域(3ld)域名的解析器。 只有 i2pd 能解析此类地址,通过发送特殊的数据报请求来完成。