Bbb: различия между версиями

Материал из wiki.nntc.nnov.ru
Перейти к навигации Перейти к поиску
(Какие забрасывать порты)
(Действие второе)
 
(не показано 27 промежуточных версий этого же участника)
Строка 1: Строка 1:
=Какие забрасывать порты=
+
=Проблематика=
  
UDP ports 16384-32768 (WebRtc), 24577-32768(Kurento)
+
==Работа BBB за NAT==
  
TCP/UDP ports 5066 (этот под вопросом. Возможно, не нужно), 7443, 443 (через nginx proxy with letsencrypt)
+
Когда веб-клиент пытается установить соединение с аудио посредством WebRTC, то в протоколе внутри WebSocket сервер отдаёт внутренний IP сервера вместо внешнего. На этом этапе аудио соединение рушится и это проблема.
  
=Особенности=
+
==Проксирование через Nginx==
  
Видеоконфа по звуку никогда не будет работать через http. Это ограничения браузера, наряду со всякими CORS и т.п (веяния времени, безопасность и все такое...). Только https, причём валидный (LetsEncrypt, например).
+
Если порт 443 и 80 заняты другим сервером (очень часто так бывает), то для работы BBB на определённом домене необходимо настраивать реверс-прокси на внешнем веб сервере (как правило это Nginx). В случае с BBB здесь достаточно хитрая настройка reverse-proxy.
  
=Проблемы запуска bbb=
+
Также необходимо учитывать, что инсталлер BBB не может установить решение без использования certbot и настройки валидного сертификата (с некоторых пор без валидного сертификата в браузерах не работает WebRTC. Вот совсем не работает... Совсем-совсем...).
По этой инструкции
 
  
https://docs.bigbluebutton.org/2.2/install.html
+
Поэтому алгоритм установки BBB для работы за reverse-proxy тоже специфический. Можно даже это назвать некоторым лайвхаком...
  
https://docs.bigbluebutton.org/2.2/configure-firewall.html
+
==Другие важные моменты==
  
https://docs.bigbluebutton.org/2.2/customize.html
+
===Момент 1===
  
 +
На самом BBB сервере домен, на котором далее будет доступен этот BBB сервер из интернета, должен ресолвиться во внутренний ip адрес
  
==Проблема №1 Нет аудио==
+
127.0.0.1
  
https://github.com/bigbluebutton/bigbluebutton/issues/8514
+
этого BBB-сервера (не в ip адрес Nginx Reverse-Proxy ни в коем случае, если что!)
  
 +
===Момент 2===
  
I had error 1006 after some updates.
+
При интеграции с Moodle сам хост, на котором работает Moodle должен адекватно добираться до BBB сервера по адресу https://<доменное имя>, потому что сам Moodle, помимо того, что отдаёт ссылки на BBB сервер по его внешнему домену, ещё и сам дёргает за API этого BBB-сервера, чтобы, например, создать на нём конференцию, запросить список записей или что-то ещё в этом роде.
I solved my problem by editing "/etc/bigbluebutton/nginx/sip.nginx" file:
 
I changed
 
proxy_pass http://x.x.x.x:5066;
 
to
 
proxy_pass https://x.x.x.x:7443;
 
  
I hope it works for you.
+
===Момент 3===
  
 +
Может так получиться, что "умный" инсталлер BBB поднимет на локальной петле дополнительный ip адрес (это может возникнуть, когда DNS-сервер ресолвит <доменное имя> не в ip адрес BBB сервера, а в ip адрес фронтального реверс-прокси (например, Nginx)).
  
==Проблема №2 Ошибка камеры==
+
В этом случае нужно заглушить сервис:
  
change ws:// to wss://
+
systemctl disable --now dummy-nic.service
  
/usr/share/meteor/bundle/programs/server/assets/app/config/settings.yml
+
либо удалить совсем
 +
 
 +
rm /lib/systemd/system/dummy-nic.service
 +
systemctl daemon-reload
 +
 
 +
Затем перезагрузиться.
 +
 
 +
Также нужно обратить внимание, что параметры
 +
 
 +
ip
 +
sip_ip
 +
 
 +
в файле
 +
 
 +
/etc/bigbluebutton/bbb-webrtc-sfu/production.yml
 +
 
 +
и параметр
 +
 
 +
proxy_pass
 +
 
 +
в файле
 +
 
 +
/usr/share/bigbluebutton/nginx/sip.nginx
 +
 
 +
, а также параметры
 +
 
 +
<X-PRE-PROCESS cmd="set" data="external_rtp_ip=
 +
<X-PRE-PROCESS cmd="set" data="external_sip_ip=
 +
 
 +
в файле XML
 +
 
 +
/opt/freeswitch/etc/freeswitch/vars.xml
 +
 
 +
и параметры
 +
 
 +
<param name="ws-binding" value="
 +
<param name="wss-binding" value="
 +
 
 +
в файле XML
 +
 
 +
/opt/freeswitch/etc/freeswitch/sip_profiles/external.xml
 +
 
 +
указывают на внутренний ip адрес BBB сервера, а не на тот ip адрес, который был поднят сервисом dummy-nic.service, о котором рассказано выше.
 +
 
 +
При необходимости этот ip нужно поменять на внутренний ip адрес BBB сервера во всех этих файлах!
 +
 
 +
Для XML файлов специально написаны не полные теги, чтобы было удобнее по этим фрагментам текста осуществлять поиск по содержимому файла.
 +
 
 +
После этого нужно перезагрузиться.
 +
 
 +
=Решение=
 +
 
 +
==Установка BBB, если требуется внешний reverse-proxy снаружи==
 +
 
 +
1. С наружнего роутера забрасываем 80 порт на внутренний ip BBB сервера (вероятно, он используется уже на действующем решении, где работает certbot и обновляет посредством этого 80 порта другие сертификаты LE, однако придётся его временно перерулить на внуренний ip BBB сервера, ведь certbot-у на этом сервере тоже нужно убедиться, что это тот сервер, который имеет право получить валидный сертификат);
 +
 
 +
2. UDP порты 16384-32768 снаружи заруливаем на внутренний ip адрес BBB и оставляем так навсегда;
 +
 
 +
3. Запускаем скрипт установки
 +
 
 +
./bbb-install.sh -v jammy-300 -s my-bbb-server.ru -e vasya@mail.ru
 +
 
 +
, где
 +
 
 +
my-bbb-server.ru
 +
 
 +
это домен вашего будущего сервера BBB, а
 +
 
 +
vasya@mail.ru
 +
 
 +
это емэйл, на который будет если что писать certbot (в нашем случае не будет, т.к. мы отключим его. Потому что у нас на реверс-прокси есть свой сертбот, который будет обновлять фронтальный сертификат. А внутри BBB сервера через 30 дней сертификат перестанет быть валидным - ну и ладно. Наружнему реверс-прокси будет сказано игнорировать это. И да, это будет безопасно для конечного пользователя);
 +
 
 +
4. Ждём завершения установки;
 +
 
 +
5. Возвращаем 80 порт на место.
 +
 
 +
Практически всё готово. Но не всё...
 +
 
 +
==Настройка внешней системы на BBB сервер на примере MOODLE==
 +
 
 +
На BBB-сервере выполняем команду
 +
 
 +
bbb-conf --secret
 +
 
 +
и получаем в ответ что-то типа
 +
 
 +
<pre>
 +
URL: https://sferum.nntc.nnov.ru/bigbluebutton/
 +
Secret: vUftg5lCmWvRC7ZUftg5lCmWvRCgByIRPZD31ffPYuQcdcQv0Z2Vu
 +
</pre>
 +
 
 +
Далее идём в настройки плагина (можно найти на официальном сайте BBB) и вставляем туда эти данные.
 +
 
 +
Всё.
 +
 
 +
==Исправление ошибки с передачей локального ip адреса BBB сервера на веб-клиент==
 +
 
 +
===Действие первое===
 +
 
 +
Как выше было описано, проблема работы звука на BBB сервере, находящемся за NAT, заключается в том, что веб-клиент получает от сервера локальный адрес,
 +
который, конечно же, неведом клиенту, который подключается к конференции из интернета.
 +
 
 +
Чтобы это исправить, нужно перенастроить сервис, посредством которого этот адрес оказывается в протоколе, посредством которого клиент и сервер через вебсокет устанавливают соединение.
 +
 
 +
Для этого на сервере BBB открываем файл
 +
 
 +
/etc/bigbluebutton/bbb-webrtc-sfu/production.yml
 +
 
 +
и за NAT-ом он настраивается хитрым образом. Если не настраивать именно так, то может не работать запись камер и трансляция рабочего стола непосредственно в записанной встрече.
 +
 
 +
Должно получиться что-то типа этого:
 +
 
 +
<pre>
 +
cat /etc/bigbluebutton/bbb-webrtc-sfu/production.yml
 +
 
 +
freeswitch:
 +
  esl_password: <тут автосгенерированный пароль>
 +
  ip: <тут внутренний ip BBB сервера>
 +
  sip_ip: <тут тоже внутренний ip BBB сервера>
 +
 
 +
mediasoup:
 +
  webrtc:
 +
    listenIps:
 +
      - ip: 0.0.0.0
 +
        announcedIp: <тут внешний ip BBB сервера>  # для внешних клиентов
 +
      - ip: <тут внутренний ip BBB сервера>
 +
        announcedIp: <тут тоже внутренний ip BBB сервера>  # для внутреннего рекордера
 +
 
 +
  webRtcTransport:
 +
    listenIps:
 +
      - ip: 0.0.0.0
 +
        announcedIp: <тут внешний ip BBB сервера>
 +
      - ip: <тут внутренний ip BBB сервера>
 +
        announcedIp: <тут тоже внутренний ip BBB сервера>
 +
    minPort: 16384
 +
    maxPort: 32768
 +
 
 +
  plainRtp:
 +
    listenIps:
 +
      - ip: 0.0.0.0
 +
        announcedIp: <тут внешний ip BBB сервера>
 +
      - ip: <тут внутренний ip BBB сервера>
 +
        announcedIp: <тут тоже внутренний ip BBB сервера>
 +
    rtcpMux: true
 +
    minPort: 16384
 +
    maxPort: 32768
 +
 
 +
turn:
 +
  enabled: true
 +
  ip: <тут внешний ip BBB сервера>
 +
  port: 3478
 +
  secret: <этот секрет достаём из параметра static-auth-secret в файле /etc/turnserver.conf>
 +
</pre>
 +
 
 +
после этого перезапускаем сервис
 +
 
 +
systemctl restart bbb-webrtc-sfu
 +
 
 +
или просто перезагружаем сервер
 +
 
 +
reboot
 +
 
 +
===Действие второе===
 +
 
 +
В файле
 +
 
 +
/etc/turnserver.conf
 +
 
 +
необходимо проверить что такие строчки настроены правильно
 +
 
 +
listening-ip=<внутренний ip BBB сервера>
 +
relay-ip=<внутренний ip BBB сервера>
 +
realm=<внешнее доменное имя BBB сервера>
 +
 
 +
После нужно добавить
 +
 
 +
external-ip=<внешний ip BBB сервера>
 +
 
 +
а также что последние строчки этого файла похожи на это
 +
 
 +
# we only need to allow peer connections from the machine itself (from mediasoup or freeswitch).
 +
denied-peer-ip=0.0.0.0-255.255.255.255
 +
denied-peer-ip=::-ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
 +
allowed-peer-ip=<внутренний ip BBB сервера>
 +
 
 +
и кроме них в конце этого файла ни каких других строчек нет.
 +
 
 +
Далее забираем из этого же файла значение параметра
 +
 
 +
static-auth-secret
 +
 
 +
Просто положите это пока в текстовый файл.
 +
 
 +
Сохраняем файл
 +
 
 +
/etc/turnserver.conf
 +
 
 +
после изменений и рестартуем сервис
 +
 
 +
systemctl restart coturn
 +
 
 +
===Действие третье===
 +
 
 +
В файле
 +
 
 +
/usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties
 +
 
 +
ищем параметр
 +
 
 +
bigbluebutton.web.serverURL
 +
 
 +
и меняем его значение на
 +
 
 +
https://<внешнее доменное имя BBB сервера>
 +
 
 +
Например, для доменного имени
 +
 
 +
my-bbb-server.ru
 +
 
 +
полная строка с параметром и его значением будет такая
 +
 
 +
bigbluebutton.web.serverURL=https://my-bbb-server.ru
 +
 
 +
Сохраняем файл и перезапускаем BBB командой
 +
 
 +
bbb-conf --restart
 +
 
 +
==Особенности настройки реверс-прокси Nginx==
 +
 
 +
Методом проб и ошибок были найдены следующие локейшны, которых минимально необходимо и достаточно для успешной работы BBB через реверс-прокси:
 +
 
 +
<pre>
 +
    location / {
 +
proxy_read_timeout 3600s;
 +
proxy_send_timeout 3600s;
 +
proxy_connect_timeout 3600s;
 +
        proxy_pass https://<внутренний ip адрес bbb сервера, доступный nginx-у>;
 +
        proxy_set_header Host $host;
 +
        proxy_set_header X-Real-IP $remote_addr;
 +
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 +
        proxy_set_header X-Forwarded-Proto https;
 +
 
 +
        proxy_http_version 1.1;
 +
        proxy_set_header Upgrade $http_upgrade;
 +
        proxy_set_header Connection "upgrade";
 +
 
 +
        proxy_ssl_server_name on;
 +
        proxy_ssl_verify off;
 +
    }
 +
 
 +
    location /ws/ {
 +
proxy_read_timeout 3600s;
 +
proxy_send_timeout 3600s;
 +
proxy_connect_timeout 3600s;
 +
        proxy_pass https://<внутренний ip адрес bbb сервера, доступный nginx-у>;
 +
        proxy_http_version 1.1;
 +
        proxy_set_header Upgrade $http_upgrade;
 +
        proxy_set_header Connection "upgrade";
 +
        proxy_set_header Host $host;
 +
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 +
        proxy_set_header X-Forwarded-Proto https;
 +
        proxy_ssl_server_name on;
 +
        proxy_ssl_verify off;
 +
    }
 +
 
 +
    location /webrtc-sfu {
 +
proxy_read_timeout 3600s;
 +
proxy_send_timeout 3600s;
 +
proxy_connect_timeout 3600s;
 +
        proxy_pass https://<внутренний ip адрес bbb сервера, доступный nginx-у>;
 +
        proxy_http_version 1.1;
 +
        proxy_set_header Upgrade $http_upgrade;
 +
        proxy_set_header Connection "upgrade";
 +
        proxy_set_header Host $host;
 +
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 +
        proxy_set_header X-Forwarded-Proto https;
 +
        proxy_ssl_server_name on;
 +
        proxy_ssl_verify off;
 +
    }
 +
 
 +
    location /html5client/socket.io/ {
 +
proxy_read_timeout 3600s;
 +
proxy_send_timeout 3600s;
 +
proxy_connect_timeout 3600s;
 +
        proxy_pass https://<внутренний ip адрес bbb сервера, доступный nginx-у>;
 +
        proxy_http_version 1.1;
 +
        proxy_set_header Upgrade $http_upgrade;
 +
        proxy_set_header Connection "upgrade";
 +
        proxy_set_header Host $host;
 +
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 +
        proxy_set_header X-Forwarded-Proto https;
 +
        proxy_ssl_server_name on;
 +
        proxy_ssl_verify off;
 +
    }
 +
</pre>
 +
 
 +
==Отключение таймера certbot на BBB сервере==
 +
 
 +
Поскольку LE сертификатом в такой конфигурации управляет внешний реверс-прокси, задача обновления этого сертификата будет лежать на нём. Поэтому аналогичный функционал на самом BBB сервере необходимо отключить.
 +
 
 +
Это делается путём отключения таймера systemd
 +
 
 +
systemctl disable --now certbot.timer
 +
systemctl stop certbot.service

Текущая версия на 13:14, 1 сентября 2025

Проблематика

Работа BBB за NAT

Когда веб-клиент пытается установить соединение с аудио посредством WebRTC, то в протоколе внутри WebSocket сервер отдаёт внутренний IP сервера вместо внешнего. На этом этапе аудио соединение рушится и это проблема.

Проксирование через Nginx

Если порт 443 и 80 заняты другим сервером (очень часто так бывает), то для работы BBB на определённом домене необходимо настраивать реверс-прокси на внешнем веб сервере (как правило это Nginx). В случае с BBB здесь достаточно хитрая настройка reverse-proxy.

Также необходимо учитывать, что инсталлер BBB не может установить решение без использования certbot и настройки валидного сертификата (с некоторых пор без валидного сертификата в браузерах не работает WebRTC. Вот совсем не работает... Совсем-совсем...).

Поэтому алгоритм установки BBB для работы за reverse-proxy тоже специфический. Можно даже это назвать некоторым лайвхаком...

Другие важные моменты

Момент 1

На самом BBB сервере домен, на котором далее будет доступен этот BBB сервер из интернета, должен ресолвиться во внутренний ip адрес

127.0.0.1

этого BBB-сервера (не в ip адрес Nginx Reverse-Proxy ни в коем случае, если что!)

Момент 2

При интеграции с Moodle сам хост, на котором работает Moodle должен адекватно добираться до BBB сервера по адресу https://<доменное имя>, потому что сам Moodle, помимо того, что отдаёт ссылки на BBB сервер по его внешнему домену, ещё и сам дёргает за API этого BBB-сервера, чтобы, например, создать на нём конференцию, запросить список записей или что-то ещё в этом роде.

Момент 3

Может так получиться, что "умный" инсталлер BBB поднимет на локальной петле дополнительный ip адрес (это может возникнуть, когда DNS-сервер ресолвит <доменное имя> не в ip адрес BBB сервера, а в ip адрес фронтального реверс-прокси (например, Nginx)).

В этом случае нужно заглушить сервис:

systemctl disable --now dummy-nic.service

либо удалить совсем

rm /lib/systemd/system/dummy-nic.service
systemctl daemon-reload

Затем перезагрузиться.

Также нужно обратить внимание, что параметры

ip
sip_ip

в файле

/etc/bigbluebutton/bbb-webrtc-sfu/production.yml

и параметр

proxy_pass

в файле

/usr/share/bigbluebutton/nginx/sip.nginx

, а также параметры

<X-PRE-PROCESS cmd="set" data="external_rtp_ip=
<X-PRE-PROCESS cmd="set" data="external_sip_ip=

в файле XML

/opt/freeswitch/etc/freeswitch/vars.xml

и параметры

<param name="ws-binding" value="
<param name="wss-binding" value="

в файле XML

/opt/freeswitch/etc/freeswitch/sip_profiles/external.xml

указывают на внутренний ip адрес BBB сервера, а не на тот ip адрес, который был поднят сервисом dummy-nic.service, о котором рассказано выше.

При необходимости этот ip нужно поменять на внутренний ip адрес BBB сервера во всех этих файлах!

Для XML файлов специально написаны не полные теги, чтобы было удобнее по этим фрагментам текста осуществлять поиск по содержимому файла.

После этого нужно перезагрузиться.

Решение

Установка BBB, если требуется внешний reverse-proxy снаружи

1. С наружнего роутера забрасываем 80 порт на внутренний ip BBB сервера (вероятно, он используется уже на действующем решении, где работает certbot и обновляет посредством этого 80 порта другие сертификаты LE, однако придётся его временно перерулить на внуренний ip BBB сервера, ведь certbot-у на этом сервере тоже нужно убедиться, что это тот сервер, который имеет право получить валидный сертификат);

2. UDP порты 16384-32768 снаружи заруливаем на внутренний ip адрес BBB и оставляем так навсегда;

3. Запускаем скрипт установки

./bbb-install.sh -v jammy-300 -s my-bbb-server.ru -e vasya@mail.ru

, где

my-bbb-server.ru

это домен вашего будущего сервера BBB, а

vasya@mail.ru

это емэйл, на который будет если что писать certbot (в нашем случае не будет, т.к. мы отключим его. Потому что у нас на реверс-прокси есть свой сертбот, который будет обновлять фронтальный сертификат. А внутри BBB сервера через 30 дней сертификат перестанет быть валидным - ну и ладно. Наружнему реверс-прокси будет сказано игнорировать это. И да, это будет безопасно для конечного пользователя);

4. Ждём завершения установки;

5. Возвращаем 80 порт на место.

Практически всё готово. Но не всё...

Настройка внешней системы на BBB сервер на примере MOODLE

На BBB-сервере выполняем команду

bbb-conf --secret

и получаем в ответ что-то типа

URL: https://sferum.nntc.nnov.ru/bigbluebutton/
Secret: vUftg5lCmWvRC7ZUftg5lCmWvRCgByIRPZD31ffPYuQcdcQv0Z2Vu

Далее идём в настройки плагина (можно найти на официальном сайте BBB) и вставляем туда эти данные.

Всё.

Исправление ошибки с передачей локального ip адреса BBB сервера на веб-клиент

Действие первое

Как выше было описано, проблема работы звука на BBB сервере, находящемся за NAT, заключается в том, что веб-клиент получает от сервера локальный адрес, который, конечно же, неведом клиенту, который подключается к конференции из интернета.

Чтобы это исправить, нужно перенастроить сервис, посредством которого этот адрес оказывается в протоколе, посредством которого клиент и сервер через вебсокет устанавливают соединение.

Для этого на сервере BBB открываем файл

/etc/bigbluebutton/bbb-webrtc-sfu/production.yml

и за NAT-ом он настраивается хитрым образом. Если не настраивать именно так, то может не работать запись камер и трансляция рабочего стола непосредственно в записанной встрече.

Должно получиться что-то типа этого:

cat /etc/bigbluebutton/bbb-webrtc-sfu/production.yml

freeswitch:
  esl_password: <тут автосгенерированный пароль>
  ip: <тут внутренний ip BBB сервера>
  sip_ip: <тут тоже внутренний ip BBB сервера>

mediasoup:
  webrtc:
    listenIps:
      - ip: 0.0.0.0
        announcedIp: <тут внешний ip BBB сервера>  # для внешних клиентов
      - ip: <тут внутренний ip BBB сервера>
        announcedIp: <тут тоже внутренний ip BBB сервера>  # для внутреннего рекордера

  webRtcTransport:
    listenIps:
      - ip: 0.0.0.0
        announcedIp: <тут внешний ip BBB сервера>
      - ip: <тут внутренний ip BBB сервера>
        announcedIp: <тут тоже внутренний ip BBB сервера>
    minPort: 16384
    maxPort: 32768

  plainRtp:
    listenIps:
      - ip: 0.0.0.0
        announcedIp: <тут внешний ip BBB сервера>
      - ip: <тут внутренний ip BBB сервера>
        announcedIp: <тут тоже внутренний ip BBB сервера>
    rtcpMux: true
    minPort: 16384
    maxPort: 32768

turn:
  enabled: true
  ip: <тут внешний ip BBB сервера>
  port: 3478
  secret: <этот секрет достаём из параметра static-auth-secret в файле /etc/turnserver.conf>

после этого перезапускаем сервис

systemctl restart bbb-webrtc-sfu

или просто перезагружаем сервер

reboot

Действие второе

В файле

/etc/turnserver.conf

необходимо проверить что такие строчки настроены правильно

listening-ip=<внутренний ip BBB сервера>
relay-ip=<внутренний ip BBB сервера>
realm=<внешнее доменное имя BBB сервера>

После нужно добавить

external-ip=<внешний ip BBB сервера>

а также что последние строчки этого файла похожи на это

# we only need to allow peer connections from the machine itself (from mediasoup or freeswitch).
denied-peer-ip=0.0.0.0-255.255.255.255
denied-peer-ip=::-ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
allowed-peer-ip=<внутренний ip BBB сервера>

и кроме них в конце этого файла ни каких других строчек нет.

Далее забираем из этого же файла значение параметра

static-auth-secret

Просто положите это пока в текстовый файл.

Сохраняем файл

/etc/turnserver.conf

после изменений и рестартуем сервис

systemctl restart coturn

Действие третье

В файле

/usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties

ищем параметр

bigbluebutton.web.serverURL

и меняем его значение на

https://<внешнее доменное имя BBB сервера>

Например, для доменного имени

my-bbb-server.ru

полная строка с параметром и его значением будет такая

bigbluebutton.web.serverURL=https://my-bbb-server.ru

Сохраняем файл и перезапускаем BBB командой

bbb-conf --restart

Особенности настройки реверс-прокси Nginx

Методом проб и ошибок были найдены следующие локейшны, которых минимально необходимо и достаточно для успешной работы BBB через реверс-прокси:

    location / {
	proxy_read_timeout 3600s;
	proxy_send_timeout 3600s;
	proxy_connect_timeout 3600s;
        proxy_pass https://<внутренний ip адрес bbb сервера, доступный nginx-у>;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_ssl_server_name on;
        proxy_ssl_verify off;
    }

    location /ws/ {
	proxy_read_timeout 3600s;
	proxy_send_timeout 3600s;
	proxy_connect_timeout 3600s;
        proxy_pass https://<внутренний ip адрес bbb сервера, доступный nginx-у>;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_ssl_server_name on;
        proxy_ssl_verify off;
    }

    location /webrtc-sfu {
	proxy_read_timeout 3600s;
	proxy_send_timeout 3600s;
	proxy_connect_timeout 3600s;
        proxy_pass https://<внутренний ip адрес bbb сервера, доступный nginx-у>;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_ssl_server_name on;
        proxy_ssl_verify off;
    }

    location /html5client/socket.io/ {
	proxy_read_timeout 3600s;
	proxy_send_timeout 3600s;
	proxy_connect_timeout 3600s;
        proxy_pass https://<внутренний ip адрес bbb сервера, доступный nginx-у>;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_ssl_server_name on;
        proxy_ssl_verify off;
    }

Отключение таймера certbot на BBB сервере

Поскольку LE сертификатом в такой конфигурации управляет внешний реверс-прокси, задача обновления этого сертификата будет лежать на нём. Поэтому аналогичный функционал на самом BBB сервере необходимо отключить.

Это делается путём отключения таймера systemd

systemctl disable --now certbot.timer
systemctl stop certbot.service