Рейтинг:1

Гуакамоле прослушивает только локальный хост IPv6

флаг ru

Я недавно установил Apache Guacamole на Ubuntu 20.04, а также протестировал с тем же результатом 21.10. У меня все работает, но мне пришлось сделать некоторые обходные пути из-за этой проблемы.

Здесь гид Я создал после того, как завершил установку и разобрался со всеми проблемами.

Мой вопрос заключается в том, знает ли кто-нибудь способ заставить guacd прослушивать как IPv4, так и v6? Моя работа изначально заключалась в отключении IPv6 на сервере, но это нужно запускать при каждом запуске. Затем я обнаружил, что могу изменить адрес прослушивания на 127.0.0.1, и он будет прослушивать IPv4 вместо v6. Я знаю, что это, вероятно, исправление, но я не понимаю, почему я не могу заставить guacd слушать оба.

John Mahowald avatar
флаг cn
По этой ссылке «мне пришлось установить для guacd-hostname значение 127.0.0.1, потому что иначе он будет слушать только IPv6 и не работать». в чем именно проблема?: "не работает" не является полезным описанием проблемы. Зачем нужен двойной стек? Просто ::1 подходит для локального хоста. Кроме того, пожалуйста, не полагайтесь на внешние ссылки для деталей вашего вопроса, скопируйте соответствующие детали в свой вопрос.
флаг ru
Если он прослушивает ::1, вы должны вручную установить параметры прокси-сервера Guacamole для каждого соединения, которое вы создаете, чтобы они указывали на ::1. Если вы прослушиваете 127.0.0.1, вам не требуется никаких изменений в этой части конфигурации, так как она используется по умолчанию. Я не понимаю, почему он не может универсально слушать на локальном хосте и включать ipv4 и v6.
Рейтинг:0
флаг cn

Поскольку вы просите не обходной путь, а полный фон:

  1. Проверьте, какие адреса ваш bind_host (т.е. «localhost») разрешает:
$ python3 -c "импортировать сокет
print(set([a[4][0] для a в socket.getaddrinfo('localhost', 4822)))"

{'127.0.0.1', '::1'}
  1. Возможно, открыть новую проблему для guacd, чтобы правильно реализовать поддержку IPv4/IPv6 с двойным стеком и разрешить указывать bind_host, который имеет несколько разных адресов.

Я поработал над исправлением поддержки только IPv6 в guacd. https://issues.apache.org/jira/browse/GUACAMOLE-1190 что было достаточно для моих целей.

Поддержка надлежащего двойного стека IPv6 на любом TCP-сервере, а также предоставление пользователю возможности ограничивать привязку к определенным адресам означает:

  • Создать несколько сокетов
  • связывать() на все адреса, возвращенные получитьадресинформация() (127.0.0.1 и ::1 для "localhost")
  • Слушать() на всех успешно связанных сокетах
  • Использовать Выбрать() или же голосование() реагировать на входящих клиентов сразу на все связанные сокеты
  • Вызов принимать() принять клиентское соединение после Выбрать() возвращает без ошибок для определенного сокета в наборе

Для справки см. эти ответы/сайты:

Семантика :: и 0.0.0.0 в ОС с двойным стеком

Как поддерживать соединения IPv4 и IPv6

select - мультиплексирование синхронного ввода/вывода

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.