我最近在 Ubuntu 20.04 上安装了 Apache Guacamole,并在 21.10 上测试了相同的结果。我一切正常,但由于这个问题,我不得不采取一些变通措施。
这里是指导我在完成安装并解决所有问题后创建了它。
我的问题是,是否有人知道让 guacd 同时监听 IPv4 和 v6 的方法?我最初的解决方法是禁用服务器上的 IPv6,但每次启动时都需要运行该操作。然后我发现我可以将监听地址更改为 127.0.0.1,这样它就会监听 IPv4 而不是 v6。我知道这可能是解决办法,但我不明白为什么我不能让 guacd 同时监听两者。
答案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'}
- 可能会为 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()
作为参考,请参阅以下答案/网站:
答案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 行为。