在 Ubuntu 16.04 (DigitalOcean) 上,我安装了 OpenFire 4.2.1。到目前为止,我尚未设置 SSL,但我可以:
- 从家里连接到 Web 管理控制台
- 创建一些用户
- 使用 Miranda IM Windows 客户端和 Pidgin Windows 客户端连接服务器并获取“在线”状态
- 查找其他用户并将他们添加到我的联系人/好友列表
我无法做的是接收用户之间的授权请求。
我跑了:
tcpdump -n -i eth0 'tcp and (port 5222 or port 5269 or port 5280)'
然后我从一个好友向另一个好友发送了“重新请求授权”请求,并得到了以下输出:
23:09:12.295932 IP {IP-of-server}.5222 > {IP-of-requester}.56898: Flags [.], ack 158, win 191, length 0
23:09:12.358987 IP {IP-of-server}.5222 > {IP-of-requester}.56898: Flags [P.], seq 241:481, ack 158, win 191, length 240
23:09:12.492207 IP {IP-of-requester}.56898 > {IP-of-server}.5222: Flags [.], ack 481, win 255, length 0
因此,看起来服务器正在接收授权请求,是吗?是否有下一步来诊断问题?我是否遗漏了一些简单的东西?
我的服务器没有受到严重影响,因此我冒险暂时禁用了防火墙并重试发送授权请求,但这似乎并没有让收件人做出回应。
如果我遗漏了对您帮助我的重要信息,请告诉我。
答案1
好吧,我做了很多事情,现在它可以工作了,所以这是不知道哪一个修复了它的情况之一,但为了其他人的利益,这是我所做的:
- 将 SRV 记录添加到我的 DNS
在 OpenFire 的管理 Web 控制台中,我没有注意到“服务器 | 服务器管理器 | 服务器信息”下的警告:“未找到此主机的 DNS SRV 记录”。在那下面有很多关于 XMPP 需要 SRV 记录的有用信息,我以前从未听说过。简而言之,它是一种将流量从一个域转发到另一个域的机制,XMPP 有时需要它(当 DNS 和 XMPP 服务器显然不在同一台服务器上托管时)。需要注意以下几点:确保您获得正确的 SRV 记录格式,因为它并不明显;使用 Netfirms 作为我的域和 DNS 提供商,我必须让他们的技术支持添加 SRV 记录,因为在 Netfirms 中,没有办法管理它们。
- 在所有 XMPP 客户端上,我更改了帐户信息。
具体来说,对于用户名信息,我没有使用 xmpp.mydomain.com,而是使用了 mydomain.com。例如,对于用户名 joe.blow,我输入[电子邮件保护]代替[电子邮件保护]。这不是我的偏好,但我有点怀疑这就是让它起作用的原因。
直到今天,我仍然对整个 XMPP 服务器属性感到困惑:XMPP Domain Name
vs.Server Host Name (FQDN)
为什么需要两者?为什么不能只使用 FQDN?
我知道这与问题无关但是......
还有一个 OpenFire 提示,以防有人像我一样难以安全访问您的管理 Web 门户。如果您使用 Let's Encrypt 作为证书,并且您很幸运在同一台服务器上运行 Apache,那么您可以尝试让 OF 接受 xmpp.mydomain.com 证书,以便通过以下方式访问您的管理门户:https://xmpp.mydomain.com,您可以改用 Apache 作为反向代理。使用 Let's Encrypt 证书建立并自动续订 Apache Web 服务器要容易得多——至少我发现是这样。
您的 Apache conf 文件可能看起来像这样(包括从 http 到 https 的重定向):
<IfModule mod_ssl.c>
<IfModule mod_proxy.c>
<VirtualHost *:443>
ServerName xmpp.mydomain.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/xmpp
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/xmpp.mydomain.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/xmpp.mydomain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateChainFile /etc/letsencrypt/live/xmpp.mydomain.com/chain.pem
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:9090/
ProxyPassReverse / http://127.0.0.1:9090/
</VirtualHost>
</IfModule>
</IfModule>
<VirtualHost *:80>
ServerName xmpp.mydomain.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/xmpp
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https: //%{HTTP_HOST}%{REQUEST_URI} [R,L]
</VirtualHost>