GuidoD
(Guido Drehsen)
29.Январь.2023 11:24:03
1
К вашему сведению, я только что создал запрос на слияние (pull request) для файла web.ssl.template.yml, чтобы в экземпляре Discourse можно было использовать функцию NAT IPv6 в Docker.
Благодаря моему изменению я смог использовать NAT IPv6 в Docker с Discourse.
Без моего изменения запросы от клиентов с IPv6-адресами отклонялись Discourse; принимались только запросы от клиентов с IPv4-адресами.
Теперь NAT для IPv6 обрабатывается Docker аналогично NAT для IPv4.
main ← GuidoDr:patch-1
closed 05:40PM - 04 Apr 23 UTC
the "listen [::]:443 ssl http2;" is also required in the first rewrite section w… here it was only rewritten to "listen 443 ssl http2;" Otherwise Discourse will reject requests from pure IP6 webbrowser access.
it has to be:
- replace: filename: "/etc/nginx/conf.d/discourse.conf" from: /listen 80;\s+listen \[::\]:80;\s+gzip on;/m to: | listen 443 ssl http2; listen [::]:443 ssl http2; SSL_TEMPLATE_SSL_BLOCK
With this change the docker IPv6 NAT is handled correctly by Discourse.
In order to enable IP6 in docker without the userland-proxy do create the file /etc/docker/daemon.json and do restart the docker daemon. Then the original IP6 from the accessing client is visible in Discourse for the admins under last IP address and can be checked with the IP check. With the userland-proxy only the IP4 address of the docker daemon would be shown there.
Here the content of my daemon.json (I just anonymized my DNS servers a little bit with the xxx): {
"userland-proxy": false,
"ipv6": true,
"fixed-cidr-v6": "fd00::/80",
"experimental": true,
"ip6tables": true,
"dns": ["xxx.169.148.34","xxx.214.7.22","8.8.8.8","8.8.4.4"]
}
With this the docker container is not exposed directly to the internet with a global IPv6 but instead it is running with a ULA that is not accessible globally. So IP6 is handled in docker with NAT like IP4.
And Discourse is now reachable by IP4 and IP6 and always the original IP address is visible in Discourse.
GuidoD
(Guido Drehsen)
04.Апрель.2023 10:35:48
2
Кто-нибудь из команды основных разработчиков Discourse, пожалуйста, проверьте мой PR, чтобы его либо приняли, либо отклонили и закрыли.
sam
(Sam Saffron)
04.Апрель.2023 10:45:28
3
Проблема здесь в том, что я не уверен, хотим ли мы по умолчанию увеличивать эту поверхность.
Я сомневаюсь насчёт изменения этого для всех установок: открытие v6 может соответствовать, а может и не соответствовать намерениям пользователя.
Задам вопрос внутри команды, хотим ли мы внести это изменение или нет.
Согласен. Ниже представлен более правильный способ реализации, который предоставляет удобный путь для включения этого поведения:
main ← ipv6_template
merged 11:03PM - 04 Apr 23 UTC
By default nginx in the container only listens for IPv4 connections. Some users
… want to enable direct IPv6 connectivity to the container either via forwarding
or NAT. This provides an easy method to allow that.
GuidoD
(Guido Drehsen)
05.Апрель.2023 06:47:36
6
Спасибо за PR. Он сразу же был слит в образ Docker для Discourse.
Я просто выполнил git pull, включил файл “templates/web.ipv6.template.yml” в app.yml и пересобрал приложение после того, как отключил свои изменения в web.ssl.template.yml.
Наш сайт по-прежнему отлично работает как по IPv4, так и по IPv6.