Guacamole 仅在 IPv6 本地主机上监听

Guacamole 仅在 IPv6 本地主机上监听

我最近在 Ubuntu 20.04 上安装了 Apache Guacamole,并在 21.10 上测试了相同的结果。我一切正常,但由于这个问题,我不得不采取一些变通措施。

这里是指导我在完成安装并解决所有问题后创建了它。

我的问题是,是否有人知道让 guacd 同时监听 IPv4 和 v6 的方法?我最初的解决方法是禁用服务器上的 IPv6,但每次启动时都需要运行该操作。然后我发现我可以将监听地址更改为 127.0.0.1,这样它就会监听 IPv4 而不是 v6。我知道这可能是解决办法,但我不明白为什么我不能让 guacd 同时监听两者。

答案1

由于您不是在寻求解决方法,而是在寻求完整的背景:

  1. 检查你的 bind_host (即“localhost”) 解析到的地址:
$ python3 -c "import socket
print(set([a[4][0] for a in socket.getaddrinfo('localhost', 4822)]))"

{'127.0.0.1', '::1'}
  1. 可能会为 guacd 打开一个新问题,以正确实现对双栈 IPv4/IPv6 的支持,并允许指定具有多个不同地址的 bind_host。

我做了一些工作来修复 guacd 中仅对 IPv6 的支持https://issues.apache.org/jira/browse/GUACAMOLE-1190对于我的目的来说这已经足够了。

在任何 TCP 服务器中支持适当的 IPv6 双栈,同时还允许用户限制绑定到特定地址意味着:

  • 创建多个套接字
  • bind()返回的所有地址getaddrinfo()(127.0.0.1 和 ::1 表示“localhost”)
  • listen()在所有成功绑定的套接字上
  • 使用select()poll()同时对所有绑定套接字上的传入客户端做出反应
  • 在集合中的某个套接字返回无错误后,调用accept()接受客户端连接select()

作为参考,请参阅以下答案/网站:

双栈操作系统中的 :: 和 0.0.0.0 语义

如何同时支持 IPv4 和 IPv6 连接

select - 同步 I/O 复用

答案2

由于这仍然是该问题的高搜索结果,guacamole 1.4 已移动了配置位置。

https://guacamole.apache.org/doc/gug/configuring-guacamole.html#configuring-guacd

因此添加/etc/guacamole/guacd.conf

[server]

bind_host = 127.0.0.1
bind_port = 4822

或者其他绑定主机将恢复 ipv4 行为。

相关内容