phixx
(phixx)
2019 年12 月 18 日 20:06
1
你好!
我想在一种特殊环境中使用 Discourse:Web 服务器仅对 VPN 内少数已知用户开放。服务器 IP 类似于 10.0.0.1,因此显然无法为其配置有效的公共域名。
我了解到,正确配置邮件传输非常重要。我也看到,至少可以通过一些“变通方法”在不依赖邮箱的情况下完成管理员账户的创建。
我在想,最佳方案是什么?
a) 完全在不使用邮箱的情况下部署 Discourse。这样可行吗?我猜可能需要遵循某些不太规范的手动流程来激活每个账户,但考虑到用户数量有限,这对我来说可以接受。这样真的可行吗?如果不启用邮件传输,会有哪些限制?当然,我无法发送邮件通知(这对我来说影响不大)——就这些吗?
b) 虽然服务器使用的是私有 IP,但我或许可以另外拥有一个仅用于邮件的公共地址。我期望整个部署尽可能优化,以便轻松设置。按照常见的安装教程,我只需输入一次服务器地址,该地址可能同时用于 HTTP 重定向以及 SMTP。这样容易区分吗?我能否轻松部署一个使用私有 IP 地址、但邮件使用不同域名的服务器?
我需要说明的是,我目前还没有 Discourse 的使用经验。如果遇到实际问题,我愿意自行查找资料解决。但我认为这里存在一个根本性的选择:是走方案 a 还是方案 b?如果能得到一些建议,避免一开始就走错方向,那就太好了。
谢谢!
pfaffman
(Jay Pfaffman)
2019 年12 月 18 日 21:05
2
您需要拥有一个域名。Discourse 无法在 IP 地址上运行。
服务器能否访问互联网?在没有互联网的情况下构建 Discourse 会……有些棘手。
如果服务器可以访问互联网,那么让它能够发送邮件就不是问题。
Stephen
(Stephen)
2019 年12 月 18 日 21:18
3
请在公共连接上构建,在您的 VPN 内为私有 IP 添加一个 DNS 条目,然后关闭公共访问。
请勿使用 Let’s Encrypt,因为证书更新将失败。
您将无法轻松更新它,但如果您正在对其进行隔离,我想这应该已经很清楚了。
电子邮件是 Discourse 的核心,没有它,各种功能都无法正常工作。
phixx
(phixx)
2019 年12 月 18 日 22:17
4
感谢您提供帮助。我想我需要再详细解释一下。
首先,我应该说明哪些部分我比较熟悉,哪些不熟悉。我对底层部分(如 IP 地址、TCP 等)理解得相当好,但对于复杂 Web 应用程序所涉及的内容则没有经验。关于电子邮件:发件人是如何进行身份验证的?系统如何检查其是否发送未经授权的垃圾邮件?(我并不指望你们向我解释所有这些,只是希望澄清我的问题……)
我这里并没有完整的企业级 VPN 基础设施,目前只有一个私有 VPN 子网和基于 IP 的规则。
设置如下:服务器拥有一个可公开访问的域名,但除了 VPN 入口端口外,所有端口都被关闭。连接到 VPN 的客户端会获得一个 10.0.x.x 地址。服务器则可通过 10.0.0.1:80 访问。
我的理解(我猜这里是错的)是,服务器期望通过其域名被访问。
假设我有一个域名 xyz.com ,它解析到公网 IP 8.7.6.5。客户端仅使用该域名/IP 建立隧道。一旦隧道建立,他们的浏览器就会连接到 10.0.0.1。
如前所述,我对 Discourse 没有经验。我预期 Discourse 会使用其自己的域名进行重定向操作。例如,将打开 10.0.0.1 的新客户端重定向到 10.0.0.1/login.php(或者类似的情况,仅作为示例)。如果 Discourse 将它们重定向到 .xyz Domain Names | Join Generation XYZ VPN 外部不可访问,这些客户端就会迷失方向。这就是我认为需要配置内部地址所针对的问题类型。
至于邮件,我需要联系外部邮件服务器。在任何阶段,公共互联网都是可访问的!不过我对这个主题了解不多。我只是认为,使用“嘿,我是 10.0.0.1,请帮我发送邮件”这样的方式连接到公共邮件服务器是行不通的,因为我使用的是私有 IP 地址。在这里,我认为需要一个公共地址。
乐观地阅读您的回答后,我推测配置的域名并不用于客户端的 HTTP 会话。如果服务器可通过私有 IP 访问,而我连接到该 IP,那么所有自引用的链接和重定向都是相对路径,因此用户不会被重定向到服务器期望连接的域名。我可以将 xyz.com 配置为域名,同时仍然通过 10.0.0.1 在浏览器中打开 Discourse,而不会被重定向到(无效的)xyz.com 地址。
希望我的问题表达得还算清楚。抱歉如此混乱!
另外,不需要 HTTPS。我甚至更倾向于不使用它——我在隧道内部,用户之间不需要安全隔离。我想跳过所有与证书和主机名匹配相关的问题。
marianord
(Mariano Rodriguez)
2019 年12 月 18 日 22:25
5
这取决于邮件服务器。假设你使用 MailGun、SendGrid 等邮件服务,它们通常通过 API(如 URL 加上用户名/密码)进行身份验证。
在这种情况下,只要服务器能够访问外部 IP(仅进行入站过滤),连接到邮件服务通常不会有问题。
特别是当域名解析到正确 的 IP 地址时。
你甚至不需要为安装过程开放端口。因为如果你通过 VPN 隧道使用域名,并且该域名指向私有 IP,那么你就可以通过 VPN 访问该域名(例如 example.com )。
我不太确定 Discourse 是否只会使用相对 URL,但几乎可以确定它不会。不过,你可以修改域名的 DNS 记录,设置两条 A 记录:第一条指向 10.0.0.1,第二条指向公共 IP 8.7.6.5。这有时在解析地址、缓存等方面可能会带来一些麻烦,但你可以尝试一下。
pfaffman
(Jay Pfaffman)
2019 年12 月 18 日 22:28
6
你可以让 xyz.com 解析到 10.0.0.1。
如果服务器可以访问互联网,那么唯一的问题是,你无法创建 Let’s Encrypt 的 HTTPS 证书。
Stephen
(Stephen)
2019 年12 月 18 日 23:06
7
这里有个问题想问你:你的 VPN 实现了哪些 SSL 无法实现的功能?
一个仅限邀请的 Discourse 实例在 SSL 上已经实现了身份验证和加密。那么 VPN 又增添了什么呢?
phixx
(phixx)
2019 年12 月 19 日 09:31
8
我还有其他需要保护的服务在运行。而且我也喜欢只开放一个非典型端口的想法。
但你说得对:我应该考虑放宽这一要求,让 Discourse 在公共接口上运行,并启用 SSL。