ngIRCd 28 介绍与选型指南

目标:面向准备自建 IRC 服务器的运维与社区管理者,讲清 ngIRCd 28 的产品定位、单二进制架构、功能特性与发行形态,并给出与 InspIRCd、UnrealIRCd、Ergo 的量化选型对比。本文为认知篇,全部结论通过官方渠道联网溯源核验(检索日期 2026-10-26),不依赖本地实测数据。

ngircdngircdIRC即时通讯2026/10/26

ngIRCd 28 介绍与选型指南

目标:面向准备自建 IRC 服务器的运维与社区管理者,讲清 ngIRCd 28 的产品定位、单二进制架构、功能特性与发行形态,并给出与 InspIRCd、UnrealIRCd、Ergo 的量化选型对比。本文为认知篇,全部结论通过官方渠道联网溯源核验(检索日期 2026-10-26),不依赖本地实测数据。

一、环境信息

本文为认知与选型篇,全部信息来自以下官方渠道,检索日期均为 2026-10-26:

版本基线:ngIRCd 28(官网下载页标注「ngIRCd Release 28 (2026-07-12)」,源码包内 NEWS 文件首行同日记录「ngIRCd 28 (2026-07-12)」,双源交叉确认)。本系列 ngIRCd 文章统一以该版本为准。

💡 说明:ngIRCd 的版本号不带「v」前缀(写作 28 而非 v28)。其发行节奏为低频稳健型:上一稳定版 27 发布于 2024-04-26(NEWS 记录),28 与 27 间隔约两年三个月。

二、软件概述

ngIRCd(Next Generation IRC Daemon)是一个用 C 语言编写的免费、可移植、轻量级 IRC 服务器,官网对其定位的原始表述是「a free, portable and lightweight Internet Relay Chat server for small or private networks」(面向小型或私有网络的轻量 IRC 服务器)。项目由 Alexander Barton 于 2001 年发起,官网明确标注「ngIRCd has been in development for 25 years」,版权声明覆盖 2001–2026,是同类 IRCd 中维护时间跨度最长的项目之一。仓库页在 2026-10-26 实查时为 582 stars。

ngIRCd 的名字「next-generation IRC daemon」是作者自嘲——官网首页原话是「which is a little bit exaggerated: lightweight Internet Relay Chat server most probably would have been a better name」(「下一代」有点夸张,叫「轻量级 IRC 服务器」可能更贴切)。

核心定位可以概括为三点:

  1. 极轻量:单二进制、单进程、事件驱动,基础功能运行不依赖任何外部服务(无数据库、无缓存),资源占用极低,适合树莓派、NAS、路由器等低配设备。
  2. 易配置:单一 ngircd.conf 配置文件,官方示例模板注释完备(约 400 行覆盖全部参数),配套 ngircd --configtest 自检命令,可在启动前验证配置解释结果。
  3. 可移植性极广:官网优势列表列出的支持平台包括 AIX、A/UX、FreeBSD、Haiku、HP-UX、IRIX、Linux、macOS、NetBSD、OpenBSD、Solaris,以及 Windows(WSL 或 Cygwin 形态),覆盖面在同类 IRCd 中少见。

💡 技术拓展:IRC 服务器(IRCd)只是 IRC 网络里的「节点」角色,完整自托管 IRC 社区通常还需要配套组件:

组件角色作用常见实现
IRCd(本文主题)提供接入、频道、消息转发ngIRCd / InspIRCd / UnrealIRCd / Ergo
Services(账户与昵称/频道注册服务)注册账号、昵称保护、频道所有权Anope / Atheme / Ergo 内置
Web 客户端浏览器直接聊天The Lounge / Kiwi IRC / Glowing Bear

ngIRCd 没有官方 Services 方案——它不提供账户注册、昵称保护、频道所有权这类持久化账户能力,这是它与 Ergo(内置账户体系)和「InspIRCd + Anope/Atheme」组合的关键差异。选型时若需要注册账户体系,ngIRCd 不是合适对象。

三、核心架构

ngIRCd 的架构围绕「一个单二进制进程」展开,没有运行期模块体系,理解以下几点即可把握其设计:

3.1 单二进制与编译期特性裁剪

ngIRCd 不像 InspIRCd/UnrealIRCd 那样在运行期加载模块,而是把功能差异放在编译期:构建时通过 configure 的 --with-xxx/--enable-xxx 旗标决定启用哪些特性,主要包括 CHARCONV(字符集转换)、IDENT(IDENT 查询)、IPv6、IRCPLUS(服务器间扩展协议)、PAM(系统用户认证)、SSL(TLS 加密)、SYSLOG(系统日志)、TCPWRAP(TCP Wrappers 访问控制)、ZLIB(链路压缩)。

因此一份二进制支持什么功能,要看编译时打开了哪些旗标——最直接的读取方式是 ngircd --version 输出的特性旗标串。官网首页展示的 28 版本输出为:

ngIRCd 28-CHARCONV+IDENT+IPv6+IRCPLUS+PAM+SSL+SYSLOG+TCPWRAP+ZLIB-x86_64/pc/linux-gnu

同一版本的不同发行包特性集可能不同。以作者维护的非官方 Debian 仓库(下载页标注)为例,提供三个变体:ngircd(标准版,含 syslog 与压缩服务器链路)、ngircd-full(标准版 + TCP Wrappers、IDENT、IPv6、SSL)、ngircd-full-dbg(full 版 + 调试代码与符号)。

3.2 配置体系

配置收敛在单一 ngircd.conf 中,按段组织,共七类:

配置段职责
[Global]服务器身份(Name/Info/Network)、监听端口、MOTD、运行用户
[Limits]连接与频率限制(MaxConnections、PingTimeout、MaxNickLength 等)
[Options]可选行为开关(CloakHost、OperCanUseMode、PAM、DNS、IncludeDir 等)
[SSL]TLS 监听端口与证书/密钥路径
[Operator]IRC 操作员账号(Name/Password)
[Server]服务器互联 peer 定义(可多段)
[Channel]预定义频道(可多段)

官方源码树附带约 400 行的注释版示例模板(doc/sample-ngircd.conf.tmpl),每项参数都有取值说明,禁用项以「;」前缀展示默认值。配置写完后用 ngircd --configtest 验证——它会打印解析后实际生效的完整配置并报告错误行,这是 ngircd 配置工作流的核心工具。

3.3 服务器互联(简单联邦)

[Server] 段静态定义对端服务器(主机、端口、双向口令 MyPassword/PeerPassword),ngIRCd 按 ConnectRetry 周期尝试建链,组成经典 IRC 树状网络。两条要点:

  1. IRC+ 扩展协议(IRCPLUS 编译特性):服务器间握手时交换版本与特性信息,使互联链路能利用扩展能力。
  2. TLS 证书校验:自 27 版起,出向服务器链路默认校验对端 TLS 证书,证书无效(自签、过期、域名不匹配)即断链,确需跳过时须在对应 [Server] 段显式设置 SSLVerify = false(NEWS 原述)。

3.4 运行模型

  • 单进程事件驱动:一个进程处理全部连接,Linux 上 IO 后端默认使用 epoll(亦支持 poll/select 等备选);无线程模型,配置面因此非常小。
  • 安全降权:以 root 启动后可切换到 ServerUID/ServerGID 指定的低权用户(如发行包默认的 irc 用户),亦支持 chroot(ChrootDir)。
  • 资源自适应:启动时读取进程文件描述符上限,未设置 MaxConnections 时按上限自动适配(28 版启动日志输出「File descriptor limit is ...; "MaxConnections" is not set.」)。

四、功能特性

以下特性均可在官方渠道直接溯源验证(检索日期 2026-10-26):

特性域说明
IRC 核心协议RFC 2812 基础命令集 + 官网列举的常用用户/频道模式(「Lots of popular user and channel modes are implemented」)
用户伪装CloakHost/CloakHostModeX/CloakHostSalt/CloakUserToNick 一组选项,隐藏客户端真实主机名
TLS 加密[SSL] 段开启加密客户端口;服务器互联口同样可加密(OpenSSL 或 GnuTLS 后端,编译期选择)
PAM 认证[Options] 的 PAM = yes 接入系统 PAM 认证(注意:pam_unix 类模块要求 root 权限,非 root 运行时不可用)
IPv6双栈监听(ConnectIPv4/ConnectIPv6),编译期旗标
IDENT 查询编译期旗标,IDENT 认证的用户名不带「~」前缀
服务器互联[Server] 段静态联邦 + IRC+ 扩展协议 + ZLIB 链路压缩
访问控制TCP Wrappers(TCPWRAP 旗标);contrib 自 27 版附带 fail2ban 过滤示例(contrib/ngircd-fail2ban.conf)
字符集转换CHARCONV 旗标,为 legacy 客户端做编码转换
日志stderr/文件 + syslog(SYSLOG 旗标)
运维自检ngircd --configtest 打印生效配置全量,配合 man 手册 ngircd(8)/ngircd.conf(5)

版本节奏:28(2026-07-12)→ 27(2024-04-26),约两年一个稳定大版,安全修复随版本滚动。28 版 NEWS 记录的主要变更包括:

  • 新增 DefaultChannelModes 配置项:新频道创建时自动设置的频道模式(此前只能手动设置)。
  • 修复一个值得注意的资源问题:向纯文本监听端口发送不含 CR/LF 终结符的数据(如二进制垃圾或误发的 TLS ClientHello)时,连接会一直占用且主循环忙转、单核 CPU 跑满,28 版已修复并按超时断开。
  • KICK/TOPIC 长度限制(KICKLEN/TOPICLEN)按 ISUPPORT 宣告值正确截断。
  • 同一配置键重复出现时改用最后一个值(此前会忽略新值)。

五、快速开始(最小可用示例)

以下步骤整理自官方下载页的发行版包列表与 Debian 仓库实际情况(检索日期 2026-10-26),给出从零到「客户端可连」的最小路径;源码编译上游 28 的完整实测步骤(依赖清单、configure 全特性旗标、systemd 单元、TLS 配置)见本系列安装篇,Docker Compose 形态见本系列部署篇,配置逐项详解见配置篇。

在 Debian 12 上用仓库自带包最快上手:

sudo apt update
sudo apt install ngircd

# 查看二进制版本与编译特性集
ngircd --version

⚠️ 注意:Debian 12 仓库提供的是 26.1-1+deb12u1,落后于上游 28(上游最新版需源码编译安装,完整步骤见本系列安装篇)。

Debian 包安装后自带默认配置 /etc/ngircd/ngircd.conf(服务器名 server.example.net),不做任何修改即可监听 6667 端口。若要最小化自定义,可精简为:

[Global]
	Name = irc.example.com
	Info = Example Server
	AdminEMail = admin@example.com
	Ports = 6667
	MotdPhrase = Welcome to the example network

重启服务并确认监听:

sudo systemctl restart ngircd
sudo systemctl is-active ngircd
ss -tlnp | grep 6667

随后用任意 IRC 客户端连接本机 6667 端口验证:终端党可用 irssi、WeeChat;浏览器党可选 Kiwi IRC(站内已有 《Kiwi IRC 1.7.1 介绍与选型指南》)或 Glowing Bear(站内已有 《Glowing Bear 0.10.0 介绍与选型指南》)。日常运维中服务启停、配置校验与运行期 IRC 操作员命令的完整用法,见本系列运维命令篇。

六、适用场景与限制

6.1 适用场景

  1. 低资源设备:树莓派、NAS、OpenWRT 路由器(官方下载页确认 OpenWRT 有官方包)上的常驻聊天服务,资源占用几乎可以忽略。
  2. 小型私有网络:家庭实验室、朋友圈、小团队的内部 IRC 服务器,单机单网即可满足。
  3. 机器人与通知接入:为 CI/监控/告警提供一个轻量消息通道,ngIRCd 常年稳定运行无需维护。
  4. IRC 协议教学与联调:代码干净、配置极简、--configtest 可观察生效配置全量,适合作为理解 IRC 协议与服务器互联的教具。

6.2 限制与注意

  1. 无 Services 体系:没有账户/昵称/频道注册能力,也没有官方推荐的 Services 配套;需要注册体系请选 Ergo 或「InspIRCd/UnrealIRCd + Anope/Atheme」。
  2. IRCv3 覆盖基础:以 RFC 2812 为主,IRCv3 扩展矩阵远窄于 InspIRCd/Ergo,对消息标签、SASL 等现代特性有强需求的网络不适用。
  3. 无官方 Docker 镜像:官方源码树内仅提供 contrib/Dockerfile(需自行构建)与 doc/Container.md;第三方 LinuxServer.io 镜像(lscr.io/linuxserver/ngircd)截至 2026-10-24 推送的 latest 停在 27-r1,落后上游 28,选用时须知情。
  4. 命令面很弱:ngircd 命令行仅 8 个选项(无 reload/status 类子命令),运行期管理主要依赖 IRC 操作员命令(REHASH/CONNECT/SQUIT/STATS 等)与 systemd。
  5. 发行版仓库版本滞后:Debian 12 仓库为 26.1,跟不上上游;要新特性或安全修复需源码编译或作者仓库。
  6. 配置中的权限前提:ServerUID/ServerGID 降权与 chroot 均要求以 root 启动进程;PAM + pam_unix 认证同样要求 root 权限,非 root 运行时需改用其他 PAM 模块或关闭 PAM。

七、同类选型对比

四款主流开源 IRCd 的量化对比如下(数据来源:各项目官方渠道,检索日期 2026-10-26;ngIRCd 维度以官网/NEWS/GitHub 实查为准):

维度ngIRCd 28InspIRCd 4.12.1UnrealIRCd 6Ergo 2.19.1
实现语言CC++CGo
许可证GPL-2.0GPL-2.0GPL-2.0MIT
模块化程度无模块(编译期特性裁剪)极高(193 个可选模块 + extra 体系)高(模块化)无模块(单二进制)
Services(账户/频道注册)无官方方案外置 Anope / Atheme外置 Anope / Atheme内置
IRCv3 支持广度基础(RFC2812 为主)广(CAP 生态大量模块)较广广(IRCv3-first 设计)
多服务器互联支持(简单联邦 + IRC+)m_spanningtree 树状互联内置支持(server 协议)
Windows 形态WSL / Cygwin(无原生包)官方 Windows 包官方 Windows 包无
版本节奏低频(约两年一版)高频补丁(2026 年内多月度发布)稳定季度级中频
资源占用极低(单进程单二进制)中中低
适合谁极简小型网络、低资源设备精细管控、可裁剪的中大型网络传统大型公共网络单机自带账户/历史的轻量自托管

选型建议(如果……则……):

  • 如果你的目标是树莓派/NAS/路由器上的极简聊天室,或者只想给机器人一个稳定的通知频道——选 ngIRCd,它在这个生态位没有对手。
  • 如果你只想一台服务器、一个二进制、自带账户和历史消息(小团队内部用)——选 Ergo(站内已有 《Ergo 2.19 介绍与选型指南》 供对照)。
  • 如果你要中大型、可长期演进的 IRC 网络,连接管控、屏蔽词、TLS、联邦都要做细——选 InspIRCd(站内已有 《InspIRCd 4.12.1 介绍与选型指南》);已有 UnrealIRCd/Atheme 运维经验则维持 UnrealIRCd 更平滑。
  • 无论选哪个 IRCd,需要浏览器零安装接入时都可搭配 Web 客户端:Kiwi IRC(介绍与选型)、Glowing Bear(介绍与选型)或 The Lounge。

八、参考链接