Hyphanet 0.7.5 配置参数详解

Hyphanet 0.7.5 配置参数详解:freenet.ini 与 wrapper.conf 参数查看修改方式、网络端口/存储/带宽/安全级别/插件/JVM 堆逐项解释与生产配置模板,基于 build01507 实测。

HyphanetHyphanetJavaUbuntu 22.042026/10/26

Hyphanet 0.7.5 配置参数详解

目标:读完本文你将掌握 Hyphanet 0.7.5 的三种参数查看与修改方式,理解 87 行实测 freenet.ini 与 wrapper.conf 中每个核心参数的含义与取值,并能按生产模板完成安全加固与性能调优,已在 Ubuntu 22.04(OpenJDK 17)实测通过。

环境信息:本文所有配置内容与回显均取自下列实测环境(节点关闭状态下导出的真实配置文件)。

项目内容
软件版本Hyphanet 0.7.5 Build #1507(build01507)
操作系统Ubuntu 22.04 LTS(amd64)
Java 环境OpenJDK 17.0.20.1(openjdk-17-jre-headless)
安装路径/opt/hyphanet
网络模式Darknet + Opennet 双开
实测日期2026-10-26

安装步骤见 《Ubuntu 22.04 安装 Hyphanet 0.7.5 指南》,项目背景见 《Hyphanet 0.7.5 介绍与选型指南》。

一、前置条件

1.1 已完成安装并可访问 Web 界面

确认节点可管理(实测命令与回显):

cd /opt/hyphanet
./run.sh status
curl -sI http://127.0.0.1:8888/ | head -1
Freenet 0.7 is running (52573).
HTTP/1.1 200 OK

1.2 明确配置文件的分工

文件职责修改方式
freenet.ini节点业务参数(端口、存储、带宽、安全级别、插件等)Web 配置页(推荐)或节点停止时手工编辑
wrapper.confJVM 进程参数(内存、classpath、启动附加参数、日志滚动)停止节点后手工编辑,重启生效

二、参数查看与修改方式

Hyphanet 提供三种参数管理途径,实测验证如下。

2.1 Web 配置页(推荐)

浏览器打开 http://127.0.0.1:8888/config/node(核心设置)、/config/fproxy(Web 界面设置)、/seclevels/(安全级别)。实测各页面均可访问:

/config/node    200  Freenet Node Configuration - Freenet
/config/fproxy  200  Freenet Node Configuration - Freenet
/seclevels/     200  Security levels - Freenet

在 Web 页修改后点击 Apply 即写回 freenet.ini,多数参数即时生效或提示需重启。

2.2 直接编辑 freenet.ini

文件首行的官方注释(实测原文)决定了编辑时机:

# This file is overwritten whenever Freenet shuts down, so only edit it when the node is not running.

即节点关闭时会回写 freenet.ini:运行中手工编辑会被覆盖。正确流程:

cd /opt/hyphanet
./run.sh stop
vi freenet.ini
./run.sh start

2.3 修改后如何验证生效

业务参数可在 Web 界面复核(如 /stats/ 带宽区显示 Input Rate 20.8 KiB/s (of 1.0 MiB/s),限速值即时反映);JVM 参数用 ps 核对(见 6.2 节实测回显)。

三、参数总览

实测 freenet.ini 共 87 行,按前缀分类如下:

前缀职责实测行数
node.*核心节点参数(端口、存储、带宽、路径、负载)最多
node.opennet.*Opennet 全球模式4 行
node.install.*目录布局9 行
node.updater.*自动更新4 行
security-levels.*安全级别2 行
fproxy.*Web 界面11 行
fcp.*FCP 应用协议5 行
pluginmanager.*插件加载2 行
logger.*日志2 行
ssl.* / console.*TLS 与控制台(默认关闭)9 行

完整原文件可从安装目录查看;下文按功能分类逐项解释核心参数,取值全部为实测环境的真实值。

四、核心参数分类详解

4.1 网络与端口(node.*)

node.listenPort=17420
node.bindTo=0.0.0.0
node.assumeNATed=true
node.opennet.enabled=true
node.opennet.listenPort=39121
node.opennet.assumeNATed=true
node.maxPacketSize=1280
node.connectionSpeedDetection=true
  • node.listenPort:Darknet 节点间通信的 UDP 端口;node.opennet.listenPort 为 Opennet 的 UDP 端口。两者都是 UDP,改端口后需同步调整防火墙;
  • node.bindTo:节点套接字绑定地址,支持逗号分隔多地址(如 127.0.0.1,0:0:0:0:0:0:0:1 的写法在 fproxy/fcp 中实测可见),需对外互联时保持 0.0.0.0;
  • node.assumeNATed:声明节点位于 NAT 之后,不尝试直连探测,实测家用/内网环境保持 true 即可正常出网;
  • node.maxPacketSize=1280:单包上限按最小 MTU 设计,保证穿透各类隧道,无特殊需求不改;
  • node.connectionSpeedDetection:启动时检测链路速度并给出带宽建议。

4.2 FProxy Web 界面与访问控制(fproxy.*)

fproxy.enabled=true
fproxy.port=8888
fproxy.bindTo=127.0.0.1,0:0:0:0:0:0:0:1
fproxy.allowedHosts=127.0.0.1,0:0:0:0:0:0:0:1
fproxy.allowedHostsFullAccess=127.0.0.1,0:0:0:0:0:0:0:1
fproxy.publicGatewayMode=false
fproxy.showPanicButton=false
fproxy.noConfirmPanic=false
fproxy.enableCachingForChkAndSskKeys=false
fproxy.hasCompletedWizard=true
fproxy.ssl=false
  • fproxy.bindTo + fproxy.allowedHosts:双保险。前者限定监听网卡(默认仅回环),后者限定允许发起请求的客户端 IP。要让局域网访问,两者都需加入内网地址,并意识到风险;
  • fproxy.allowedHostsFullAccess:列表内主机拥有完整权限(含配置修改等敏感操作),默认与 allowedHosts 相同,仅建议对回环开放;
  • fproxy.publicGatewayMode:公共网关模式(如给多人共用一台入口时开启),开启后匿名访客权限受限,个人节点保持 false;
  • fproxy.enableCachingForChkAndSskKeys:是否允许浏览器缓存 FProxy 返回的密钥内容,出于本机取证安全默认 false;
  • fproxy.showPanicButton / noConfirmPanic:紧急按钮显示与二次确认,取证敏感环境可开启并关闭确认。

配套的 TLS 参数默认关闭(实测):ssl.sslEnable=false、ssl.sslHSTS=0、证书库 ssl.sslKeyStore=datastore/certs。FProxy 仅监听回环时无需开启 TLS。

4.3 FCP 应用协议端口(fcp.*)

fcp.enabled=true(随 enabled 组合生效)
fcp.port=9481
fcp.bindTo=127.0.0.1,0:0:0:0:0:0:0:1
fcp.allowedHosts=127.0.0.1,0:0:0:0:0:0:0:1
fcp.allowedHostsFullAccess=127.0.0.1,0:0:0:0:0:0:0:1

语义与 fproxy 一致:监听回环 + 白名单。第三方客户端(如 jSite)与节点同机时无需改动;跨机访问需把客户端 IP 加入 allowedHosts 并绑定对应网卡,务必不要把 allowedHostsFullAccess 放开到不可信网段。

4.4 存储(datastore)参数(node.store*)

node.storeSize=18736826286
node.storeType=salt-hash
node.storePreallocate=true
node.clientCacheSize=209715200
node.clientCacheType=salt-hash
node.slashdotCacheSize=294912k
node.minDiskFreeShortTerm=536870912
node.minDiskFreeLongTerm=1073741824
  • node.storeSize:主存储字节数,实测 18,736,826,286 ≈ 17.4 GiB(安装向导按磁盘空闲自动分配)。调大调小都需重启节点,调大前确认磁盘余量;
  • node.storeType=salt-hash:加盐哈希存储后端(当前版本默认),文件位于 datastore/ 目录;
  • node.storePreallocate=true:启动时预分配空间,避免运行期碎片化,实测 datastore/ 目录在首次启动即占约 19 GB;
  • 存储分四级(与 storeSize 无关的独立配置):主 Store(长期)、Cache(中转)、Slashdot cache(热点,node.slashdotCacheSize=294912k)、Client cache(本机访问历史,node.clientCacheSize=209715200 即 200 MB);每级再按 CHK/SSK/Pubkey 三类密钥划分,实测 /diagnostic/ 可看到 12 个分区的 Keys/Capacity/Utilization 统计;
  • node.minDiskFreeShortTerm/LongTerm:磁盘剩余空间保护阈值(536 MB / 1 GiB),低于阈值时暂停写入类操作,防磁盘写满。

目录布局族 node.install.*(实测值,一般不改):

node.install.cfgDir=.
node.install.storeDir=./datastore
node.install.tempDir=./temp
node.install.persistentTempDir=./persistent-temp
node.install.pluginDir=./plugins
node.install.pluginStoresDir=plugin-data
node.install.userDir=.
node.install.runDir=.
node.install.nodeDir=.

全部相对安装目录,迁移安装位置时整体拷贝即可。

4.5 带宽限制(node.*)

node.outputBandwidthLimit=163840
node.inputBandwidthLimit=1048576

单位为字节/秒:实测输出 163840 B/s = 160 KiB/s,输入 1048576 B/s = 1 MiB/s(安装向导按线路检测结果设置)。这是对 P2P 体验影响最大的参数——限速越高全网交换越多、节点贡献越大,同时上行带宽占用越高。运行验证(/stats/ 页实测回显):

Input Rate:  20.8 KiB/s (of 1.0 MiB/s)
Output Rate: 21.0 KiB/s (of 160 KiB/s)
Payload Output: 71%

括号内即当前配置的限额。压缩相关两个参数保持默认:node.minimumCompressionPercentage=10(压缩收益低于 10% 则放弃)、node.amountOfDataToCheckCompressionRatio=8388608(采样 8 MB 试压)。

4.6 安全级别(security-levels.*)

security-levels.networkThreatLevel=NORMAL
security-levels.physicalThreatLevel=NORMAL

两条独立的威胁轴,均可通过 Web 页 /seclevels/ 以向导方式修改:

  • networkThreatLevel(网络威胁级别):防御互联网陌生人,从 MINIMUM 到 MAXIMUM 共五档。调高会依次收紧 Opennet、强制仅 Darknet、隐藏连接信息等;
  • physicalThreatLevel(物理威胁级别):防御能接触本机的人,调高会启用口令加密主密钥、清除明文缓存等。

级别越高可用性越低(下载更慢、功能受限),个人学习节点 NORMAL/NORMAL 即可;Web 状态栏实时显示当前级别(实测显示 NORMAL 与 LOW)。

4.7 Darknet 与 Opennet(node.opennet.* 及身份)

node.opennet.enabled=true
node.opennet.listenPort=39121
node.opennet.assumeNATed=true
node.opennet.acceptSeedConnections=false
node.name=Freenet node with no name #7361848122103977527
node.identifier=-8450117583282892346
node.updater.updateSeednodes=true
  • node.opennet.enabled:Opennet 总开关。追求最大隐私时改为 false(纯 Darknet),仅与手工添加的朋友互连;
  • node.opennet.acceptSeedConnections:是否作为种子节点接受新节点引导连接(官方称为 seednode),公共服务器可考虑开启,个人节点保持 false;
  • node.name:节点昵称(Darknet 好友可见),可自定义;node.identifier 为节点内部标识;
  • node.updater.updateSeednodes=true:自动保持种子节点列表最新(配套 updateInstallers=true 自动更新安装器);
  • node.probe* 参数族(实测 9 项:probeLinkLengths、probeStoreSize、probeBuild、probeIdentifier、probeBandwidth、probeLocation、probeUptime、probeRejectStats 等):响应 Opennet 网络探测请求,属统计贡献,隐私敏感可逐项关闭。

4.8 插件(pluginmanager.*)

pluginmanager.enabled=true
pluginmanager.loadplugin=KeyUtils;Library;FlogHelper;Sharesite

分号分隔的启动加载清单,实测四个默认插件全部加载成功(/diagnostic/ 回显版本:KeyUtils 0.5.6、Library 37、Sharesite 0.5.1、FlogHelper 0.1.1-v36-r2)。增删后重启节点生效;临时加载/卸载用 Web 页 /plugins/。

4.9 JVM 堆内存(wrapper.conf)

JVM 内存不在 freenet.ini 里,而在 wrapper.conf(实测第 15、19 行):

wrapper.java.initmemory=256
wrapper.java.maxmemory=512
  • initmemory:初始堆(-Xms);maxmemory:最大堆(-Xmx),单位 MB;
  • 自动分配规则:首次 ./run.sh start 时若无 memory.autolimit 文件,按物理内存自动设定——≤1 GB→256 MB、≤2 GB→512 MB、≤4 GB→1024 MB、其余 1536 MB(实测 64 GB 主机被写入 1536,后在 wrapper.conf 手工调为 512);
  • wrapper.conf 官方注释提醒:Java 占用与 bloom 过滤器内存都会超出 maxmemory 计,设得过高可能导致节点起不来;
  • 修改后重启,实测验证(ps -ef | grep [f]reenet.node.NodeStarter 命令行节选):
... -Xss512k -Xms256m -Xmx512m ... freenet.node.NodeStarter freenet.ini

Web 复核(/stats/ 页 Java Info 实测):

Used Java memory: 216 MiB
Allocated Java memory: 256 MiB
Maximum Java memory: 512 MiB

wrapper.conf 其他实测要点:wrapper.filter.trigger.1=java.lang.OutOfMemoryError 触发自动 RESTART;wrapper.restart.reload_configuration=TRUE 重启时重载配置;wrapper.logfile.maxsize=2M、maxfiles=3 滚动;wrapper.jvm_exit.timeout=120。若 wrapper 不可用的平台,run.sh 会回退为直接 java 启动(堆参数同样来自该文件的解析值)。

4.10 日志与其他(logger.* 等)

logger.priority=WARNING
logger.maxZippedLogsSize=10485760
node.downloadsDir=./downloads
node.uploadAllowedDirs=all
node.downloadAllowedDirs=all
node.load.subMaxPingTime=700
node.load.maxPingTime=1500
node.load.threadLimit=1000
node.l10n=English
  • logger.priority=WARNING:日志级别,排障时可临时调到 DEBUG(logs/freenet-latest.log 实测 41 KB 起步,按小时滚动出 .log.gz,压缩日志总量上限 maxZippedLogsSize=10 MB);
  • node.downloadAllowedDirs/uploadAllowedDirs=all:FCP 下载/上传允许的目录范围,all 表示不限制;从安全角度建议改为显式目录列表;
  • node.load.*:过载保护(ping 阈值 700/1500 ms、线程上限 1000),默认即可;
  • node.updater.autoupdate=false:自动更新主程序默认关闭(实测),升级由管理员手工触发;node.updater.URI=USK@rW3wdla3...jar/1507 指向当前版本通道。

五、生产配置模板

小型服务器(2–4 核 / 4–8 GB 内存 / 100 GB 磁盘)的个人节点推荐基线(在实测配置基础上收紧):

# --- 安全 ---
security-levels.networkThreatLevel=NORMAL
security-levels.physicalThreatLevel=NORMAL
fproxy.bindTo=127.0.0.1
fproxy.allowedHosts=127.0.0.1
fproxy.allowedHostsFullAccess=127.0.0.1
fcp.bindTo=127.0.0.1
fcp.allowedHosts=127.0.0.1
fproxy.publicGatewayMode=false

# --- 网络 ---
node.listenPort=17420
node.opennet.enabled=true
node.opennet.listenPort=39121
node.assumeNATed=true

# --- 存储(按磁盘预算设定) ---
node.storeSize=53687091200        # 50 GiB
node.storeType=salt-hash
node.storePreallocate=true
node.minDiskFreeShortTerm=536870912
node.minDiskFreeLongTerm=1073741824

# --- 带宽(按上行 2 Mbps ≈ 250 KiB/s 示例) ---
node.outputBandwidthLimit=204800
node.inputBandwidthLimit=1048576

# --- 下载目录收敛 ---
node.downloadAllowedDirs=./downloads
node.uploadAllowedDirs=./downloads

配套 wrapper.conf 内存建议(改前停止节点):

wrapper.java.initmemory=256
wrapper.java.maxmemory=512

应用流程:./run.sh stop → 编辑两个文件 → ./run.sh start → ./run.sh status 与 /stats/ 复核带宽、内存生效。

六、常见问题(FAQ)

6.1 手工改了 freenet.ini,重启后被改回去了

节点关闭时会回写 freenet.ini(首行注释原文)。在节点运行中编辑等于白改。正确顺序:先 ./run.sh stop 再编辑,或直接用 Web 配置页 /config/node。

6.2 改了 JVM 内存却不生效

堆参数在 wrapper.conf 而非 freenet.ini,且必须重启节点。验证方法(实测可用):

ps -ef | grep [f]reenet.node.NodeStarter

确认命令行中 -Xms/-Xmx 数值;JRE 环境无 jps,不要依赖它。

6.3 storeSize 能随便调吗

可以调,但注意三点:单位是字节;storePreallocate=true 时启动即占满,确认磁盘余量;调整后首次启动需要重建/校验存储,耗时与数据量相关,建议停机窗口内操作。

6.4 想让局域网其他机器访问 Web 界面

把 fproxy.bindTo 加上本机内网 IP、把客户端 IP 加入 fproxy.allowedHosts,同时保持 allowedHostsFullAccess 只有回环地址,并在防火墙上只对可信网段放行 8888/TCP。FCP 同理。Hyphanet 的 FProxy 无强认证机制,暴露面越大风险越高,公网直暴不可取。

6.5 端口 17420/39121 被占用或被封

改为其他空闲 UDP 端口(node.listenPort / node.opennet.listenPort),重启节点并同步更新防火墙;Darknet 好友侧需重新交换节点引用(node reference),Opennet 会经 seednodes 自动重新引导。

6.6 哪些参数必须停机改,哪些可以在线改

freenet.ini 的多数业务参数(带宽、插件清单、端口)支持 Web 页修改后按提示重启;但涉及存储(storeSize/storeType)与 JVM(wrapper.conf)的参数一律停止节点后修改。通用原则:能停机就停机改,避免节点关闭回写覆盖手工改动。

七、参考链接