使用 ZNC 的特定子域

使用 ZNC 的特定子域

我最近在一台 Fedora 22 VPS 上安装了 ZNC,我租用这台 VPS 是为了学习,以加强我的 Linux 技能和知识。我想做的一件事是使用 ZNC 在这台 VPS 上设置一个小型 IRC 弹跳器。我想为我的服务器的所有与 ZNC 相关的部分使用一个特定的子域,但在阅读了文档,我仍然不清楚如何将 ZNC 绑定到特定子域而不是服务器的根域(即 znc.example.com 与 example.com)。

我该怎么做呢?我觉得 BindHosts 选项是相关的,但我很难理解它的用途。

答案1

是的,使用了 BindHost 选项。(“bind” 一词来自 Berkeley 套接字 API,程序使用该 API 来建立网络连接。当程序想要使用特定地址时,无论是用于连接还是接受连接,它都会使用该bind(…)函数。)

这引出了一件重要的事情:

  • 程序不连接也不绑定域名;它们只使用IP 地址为了这。

    仅与服务建立连接后才会发送实际的域名。

    (例如,Web 浏览器会将“Host:”标头作为 HTTP 请求的一部分发送。但 SSH 客户端不会发送域名根本。IRC 客户端一般也不会。)


所以答案是:

首先,您需要为您的服务器获取第二个 IP 地址,然后告诉 ZNC - 使用 BindHost 选项 - 绑定到该新地址(而不是“全部”),最后将您的znc子域指向该新地址。

但要小心使用正确的选项 - ZNC 有两个单独的“绑定主机”选项,一个用于接受传入连接(来自您),一个用于建立传出连接(到 IRC 服务器)。

是的,您可能会看到有人将域名与 BindHost 结合使用。然而,这只是一个方便的技巧——ZNC 只会将给定的名称转换为地址,并且仍然只绑定到该 IP 地址,而不是名称。


未来几年,可能还有另一种答案:

尽管 TCP 和 IRC 都不知道“域名”,但它们经常与另一个知道“域名”的协议一起使用 - TLS,又名 SSL。

当使用 HTTPS(HTTP/TLS)时,所有现代 Web 浏览器也会在“服务器名称指示”字段中通过 TLS 发送域名,因此 Web 服务器可以更早地做出决定。

作为 TLS 的一部分,这不仅限于 HTTPS – 我已经看到使用 SNI 的电子邮件客户端和服务器。一些 IRC 客户端(例如 Irssi)也添加了 SN​​I 支持。还有一些程序stunnel可以根据 SNI 域名将同一 TCP 端口上的连接路由到各种不同的程序。

这意味着在不久的将来你将要能够将 ZNC “绑定” 到单个域名,而无需新的 IP 地址。但只有在全部您的 IRC 客户端获得 TLS SNI 支持。

相关内容