- Разрешите подключения: Убедитесь, что модуль
mod_event_socketвключен и настроен на прослушивание нужного IP-адреса. - Пароль ESL: В конфигурационном файле
event_socket.conf.xmlзадайте сложный пароль, который потребуется указать в Openfire. - Диалплан: Настройте внутренние и внешние номера в диалплане FreeSWITCH, чтобы пользователи могли подключаться к конференциям через обычные телефоны.
pade.jar перейдите в админ-панель Openfire для настройки связи:- Включите интеграцию с FreeSWITCH: В настройках плагина выберите вариант подключения через ESL.
- Параметры подключения: Укажите IP-адрес сервера FreeSWITCH, порт ESL (по умолчанию 8021) и пароль, заданный в пункте 1.
- Компонент Jigasi: Если вы планируете приглашать телефонных участников в видеовстречи Jitsi, необходимо настроить SIP-аккаунт для пользователя
jigasi.- Pàdé автоматически создаст аудиоконференцию во FreeSWITCH при присоединении фокус-пользователя (
focus) и инициирует вызов кjigasiс SIP-заголовком, содержащим имя комнаты.
- Pàdé автоматически создаст аудиоконференцию во FreeSWITCH при присоединении фокус-пользователя (
- Статус пользователей: Убедитесь, что бот-пользователи
focus,jvbи (при использовании SIP)jigasiнаходятся в сети в консоли Openfire. - Тестовый вызов: Откройте конференцию Pàdé. При входе первого участника во FreeSWITCH должна автоматически создаться конференция. Это можно проверить командой
conference listв консоли FreeSWITCH (fs_cli).
- Версии: Для Openfire 4.8+ используйте Pàdé версии 1.8.0 или выше. Для старых версий (4.7 и ниже) подходит версия 1.7.9.
- Сеть: Если сервер находится за NAT, убедитесь, что открыты порты TCP 7443 и UDP 10000 для работы видеомоста.
- Настройка ESL (mod_event_socket):
В файле/etc/freeswitch/autoload_configs/event_socket.conf.xmlубедитесь, что IP-адрес доступен для Openfire:xml<param name="listen-ip" value="0.0.0.0"/> <param name="listen-port" value="8021"/> <param name="password" value="your_strong_password"/>Используйте код с осторожностью. - Диалплан для конференций:
В/etc/freeswitch/dialplan/default.xmlдобавьте правило, чтобы звонки на определенные номера попадали в аудиоконференции Pàdé:Здесь номера 8000–8999 будут направляться в конференции.xml<extension name="pade_conferences"> <condition field="destination_number" expression="^(8\d{3})$"> <action application="conference" data="$1@default"/> </condition> </extension>Используйте код с осторожностью.
- Установка плагина: Загрузите
pade.jarв админ-панель Openfire (Plugins -> Available Plugins или ручная загрузка). - Служебные пользователи: Если вы не используете LDAP, плагин создаст их сам. При использовании LDAP создайте вручную пользователей
jvb,focusиjigasi. Дайте пользователюfocusправа владельца/админа в настройках MUC (сервис конференций). - Интеграция с FreeSWITCH:
Перейдите в Server -> Pàdé -> FreeSWITCH Settings:- Enable FreeSWITCH ESL: Установите галочку.
- ESL Host: IP вашего FreeSWITCH.
- ESL Port: 8021.
- ESL Password: Пароль из настроек
event_socket.conf.xml.
- Настройка SIP-шлюза (Jigasi):
В разделе SIP Settings укажите данные SIP-аккаунта (созданного во FreeSWITCH), который Pàdé будет использовать для "дозвона" из видеовстречи в телефонную сеть.
- TCP 7443: HTTPS и Websockets для Pàdé.
- UDP 10000: RTP-трафик Jitsi Videobridge (видео).
- UDP 16384–32768: RTP-трафик FreeSWITCH (аудио).
- TCP/UDP 3478: STUN/TURN сервер (если сервер за NAT).
- Видео: Откройте в браузере
https://your-server:7443/ofmeet/. Зайдите в комнату с двух вкладок. Если видео есть — Jitsi Videobridge работает. - Аудио/SIP: При входе в комнату Pàdé должен инициировать соединение с FreeSWITCH через ESL. В консоли FreeSWITCH (
fs_cli) введитеconference list. Вы должны увидеть активную конференцию с именем, соответствующим комнате в Pàdé.
jigasi, чтобы внешние абоненты могли дозваниваться в видеоконференции?event_socket.conf.xml выглядит стандартно, но для работы с Openfire Pàdé его нужно немного подправить, чтобы плагин смог подключиться снаружи (или с локального IP Openfire).event_socket.conf.xmllisten-ip со значением :: (IPv6) иногда вызывает проблемы у Java-приложений, если не настроен стек. Рекомендуется использовать 0.0.0.0 (все IPv4 интерфейсы) или конкретный IP сервера.<configuration name="event_socket.conf" description="Socket Client">
<settings>
<param name="nat-map" value="false"/>
<!-- Слушать все IPv4 адреса -->
<param name="listen-ip" value="0.0.0.0"/>
<param name="listen-port" value="8021"/>
<!-- ОБЯЗАТЕЛЬНО смените пароль ClueCon на свой -->
<param name="password" value="YourSecretPassword123"/>
<!-- Раскомментируйте, чтобы ограничить доступ только для IP Openfire (безопасность) -->
<!-- <param name="apply-inbound-acl" value="lan"/> -->
</settings>
</configuration>
reloadxml и reload mod_event_socket.- ESL Host: IP-адрес вашего FreeSWITCH сервера (не
localhost, если они на разных машинах). - ESL Port:
8021. - ESL Password:
YourSecretPassword123.
org.jitsi.videobridge.NAT_HARVESTER_LOCAL_ADDRESS: внутренний IP сервера.org.jitsi.videobridge.NAT_HARVESTER_PUBLIC_ADDRESS: внешний (белый) IP сервера.org.ice4j.ipv6.DISABLED: поставьтеtrue, если вы используете IPv4 (предотвращает задержки при установке связи).
pade_user), данные которого вы впишете в настройки SIP внутри плагина Pàdé в Openfire./etc/freeswitch/directory/default/pade_user.xml:<include>
<user id="pade_user">
<params>
<param name="password" value="super_sip_pass"/>
</params>
<variables>
<variable name="accountcode" value="pade_user"/>
</variables>
</user>
</include>
fs_cli) при попытке звонка из Pàdé вы должны увидеть лог:[DEBUG] mod_event_socket.c:2510 Socket interface external_reconnect authenticated.event_socket.conf.xml совпадал символ в символ.pade_user (SIP-аккаунт) нужен для Jigasi — это мост, который позволяет звонить в конференцию с обычных телефонов или вызывать сотовых абонентов прямо из видеочата. Если вам нужны только звонки «браузер-браузер», он не обязателен, но для связи с АТС он необходим.org.jitsi.videobridge.NAT_HARVESTER_LOCAL_ADDRESS: Локальный IP вашего сервера (например,192.168.1.10).org.jitsi.videobridge.NAT_HARVESTER_PUBLIC_ADDRESS: Внешний (белый) IP сервера. Если вы в локалке, укажите тот же локальный IP.org.ice4j.ice.harvest.DISABLE_AWS_HARVESTER:true.org.ice4j.ice.harvest.STUN_MAPPING_HARVESTER_ADDRESSES:meet-jit-si-turnrelay.jitsi.net:443(помогает пробить NAT).
- UDP 10000: Самый важный порт для видео (JVB).
- TCP 7443: Для HTTPS и WebSockets.
- UDP 3478: Для STUN (поиск пути через NAT).
focus)- Перейдите в Group Chat -> Service Settings -> [ваш MUC сервис, обычно conference].
- В разделе Permissions добавьте пользователя
focus@ваш_доменв список Administrators.
ICE Failed или Bridge Channel Disconnected, значит, браузер не может достучаться до порта UDP 10000 на сервере.- Установите
certbot. - Выпустите сертификат для вашего домена.
- В админке Openfire перейдите в Server -> TLS/SSL Certificates -> Identity Store и импортируйте ключи.
- Зайти на
https://ваш-ip:7443/ofmeet/. - Нажать «Дополнительно» -> «Перейти на сайт (небезопасно)».
- Важно: Отдельно зайти на
https://ваш-ip:7443/(админка или корень) и тоже подтвердить исключение безопасности. - В некоторых версиях Chrome нужно включить флаг:
chrome://flags/#allow-insecure-localhost(если сервер локальный).
org.jitsi.videobridge.DISABLE_CERTIFICATE_VERIFICATION=trueorg.jitsi.jicofo.ALWAYS_TRUST_EXTERNAL_GRPC=true(если есть такая настройка в версии)xmpp.client.cert.policy=optional
pade_user (SIP) еще раз:Если вы укажете
pade_user в настройках SIP плагина Pàdé:- В окне конференции появится иконка «Телефон».
- Вы сможете набрать мобильный или внутренний номер FreeSWITCH прямо из видео-встречи.
- FreeSWITCH соединит звонок, и голос человека из телефона появится в вашей видео-комнате.
- Проверьте консоль браузера (F12 -> Console). Если видите
DOMException: Permission deniedилиICE connection failed, это 100% проблема SSL или закрытого порта UDP 10000. - Откройте порт UDP 10000 на уровне системы (
ufw allow 10000/udpилиiptables).
- Команда для проверки на сервере:Должно показать, что процессbash
netstat -tulnp | grep 10000Используйте код с осторожностью.java(Openfire) слушает этот порт.
org.jitsi.videobridge.NAT_HARVESTER_LOCAL_ADDRESS— локальный IP (например,192.168.x.x).org.jitsi.videobridge.NAT_HARVESTER_PUBLIC_ADDRESS— внешний белый IP (если вы за NAT) или тот же локальный IP (если работаете только внутри сети).org.ice4j.ice.harvest.DISABLE_AWS_HARVESTER—true.
- Убедитесь, что в списке пользователей Openfire есть пользователь
focus. - Зайдите в Group Chat -> Service Settings -> conference (ваш сервис конференций).
- Вкладка Permissions: добавьте
focus@ваш_доменв список Admins.
- Зайдите в комнату
https://your-server:7443/ofmeet/test_room. - В терминале сервера введите:
fs_cli -x "conference list". - Если список пуст — значит, Openfire не смог подключиться к FreeSWITCH по ESL (проверьте пароль и IP в настройках плагина Pàdé).
chrome://webrtc-internals.Там вы увидите графики. Если в разделе
icecandidatepair статус стоит holding или failed вместо succeeded — значит, пакеты видео упираются в Firewall или неправильный IP в настройках NAT.chrome://webrtc-internals при попытке подключения второго пользователя? (Ищите красные линии или статус 'failed').[ERROR] fs_cli.c:1699 означает, что консоль (и плагин Pàdé) не может достучаться до порта 8021.- Проверьте конфиг еще раз: В файле
event_socket.conf.xmlпараметрlisten-ipдолжен быть0.0.0.0(если вы на Windows, это важно для биндинга порта). - Брандмауэр Windows: Откройте порт TCP 8021 (входящие правила).
- В Openfire: Зайдите в Server -> Pàdé -> FreeSWITCH Settings. Убедитесь, что там стоит
127.0.0.1(если FS на той же машине), порт8021и парольClueCon(как в вашем xml).
org.jitsi..., их нужно создать вручную. Без них Jitsi не знает, по какому адресу слать видеопоток второму участнику.- Имя:
org.jitsi.videobridge.NAT_HARVESTER_LOCAL_ADDRESS
Значение:ваш_локальный_IP(например,192.168.1.5) - Имя:
org.jitsi.videobridge.NAT_HARVESTER_PUBLIC_ADDRESS
Значение:ваш_внешний_IP(если тестируете через интернет) или тот же локальный IP (если всё внутри сети). - Имя:
org.ice4j.ice.harvest.DISABLE_AWS_HARVESTER
Значение:true
findstr:netstat -ano | findstr :10000
netstat -ano | findstr :8021
LISTENING, значит службы не запустили эти порты.https://ip-сервера:7443/ и нажать "Принять риск/Перейти", а только потом заходить в комнату /ofmeet/. Если этого не сделать, браузер заблокирует фоновое соединение (WebSocket) для второго игрока.- Добавить 3 свойства в System Properties (пункт 2).
- Перезагрузить службу Openfire.
- Проверить командой
netstat -ano | findstr :8021, слушает ли FreeSWITCH порт.
pade.freeswitch.enabled— установитеtrue.pade.freeswitch.esl.host—127.0.0.1(так как оба на одной машине).pade.freeswitch.esl.port—8021.pade.freeswitch.esl.password—ClueCon(или ваш пароль из xml).
freeswitch-overview.jsp должен смениться на Enabled/Connected.netstat показывает два разных внешних IP: 89.179.240.91 и 89.179.241.193 (в пункте №2).Если у вас динамический IP или несколько интерфейсов, Jitsi может путаться.
- Убедитесь, что в свойствах
NAT_HARVESTERуказан ровно тот IP, который сейчас на внешнем интерфейсе. - Если вы тестируете внутри сети (оба компьютера в одной комнате), впишите везде локальный IP:
192.168.0.10. Для тестов внутри сети это надежнее.
- Проблема Focus: В Openfire зайдите в Users/Groups. Найдите пользователя
focus. Убедитесь, что он в сети (Online). Если его нет — плагин настроен не до конца. - SSL и WebSocket: В браузере (Chrome) нажмите
F12-> вкладкаNetwork. Отфильтруйте по словуws. Если видите красную строку со статусомClosedилиError, значит браузер из-за самоподписанного сертификата обрывает связь с мостом.- Решение: Откройте в браузере
https://192.168.0и подтвердите исключение безопасности. Без этого WebSocket не заведется.
- Решение: Откройте в браузере
D:\FreeSWITCH>fs_cli -x "conference list"Если связи по-прежнему нет, попробуйте явно указать параметры подключения:
fs_cli -H 127.0.0.1 -P 8021 -p ClueConlogs, файл all.log или warn.log). Там должны быть записи со словом FreeSWITCH или ESL, если подключение не удается.System Properties, чтобы вы просто проверили их по списку?Error Connecting в fs_cli означает, что порт 8021 закрыт или настроен неверно.- В файле
event_socket.conf.xml: проверьте, чтоlisten-ipустановлен в0.0.0.0, а не в::. - Попробуйте подключиться явно через CMD:Если эта команда выдаст ошибку, значит FreeSWITCH не слушает порт или пароль неcmd
fs_cli.exe -H 127.0.0.1 -P 8021 -p ClueConИспользуйте код с осторожностью.ClueCon. Пока эта команда не заработает, Pàdé не сможет управлять звонками.
ofmeet., но для плагина Pàdé (версии 1.x+) и последних сборок Openfire приоритетными являются свойства с префиксом pade..pade.freeswitch.enabled—true(это активирует модуль в новом плагине).pade.freeswitch.esl.host—127.0.0.1.pade.freeswitch.esl.port—8021.pade.freeswitch.esl.password—ClueCon(или ваш актуальный пароль).pade.freeswitch.esl.domain—openfire.unifree1.ru(ваш домен).
89.179.240.91. Проверьте, что в системных свойствах стоят именно эти ключи (без ошибок в буквах):org.jitsi.videobridge.NAT_HARVESTER_LOCAL_ADDRESS=192.168.0.10org.jitsi.videobridge.NAT_HARVESTER_PUBLIC_ADDRESS=89.179.240.91
Обязательное действие для обоих участников:
- Открыть в новой вкладке
https://89.179.240(просто корень). - Нажать «Дополнительно» -> «Перейти на сайт».
- Только после этого открывать ссылку конференции.
pade.freeswitch... и перезагрузки Openfire:- Зайдите в
Summary Overviewв админке Pàdé. Статус должен стать Enabled. - Зайдите в конференцию.
- Введите в CMD:
fs_cli.exe -x "conference list". Если там появится комната (например,testroom@default), значит связка заработала.
fs_cli.exe -H 127.0.0.1 -P 8021 -p ClueCon? Если нет, прикрепите содержимое вашего event_socket.conf.xml.fs_cli пустила вас внутрь — значит, FreeSWITCH готов к работе. Теперь нужно «подружить» его с Openfire и донастроить видео.netstat два IP (192.168.0.10 и 89.179.240.91)?192.168.0.10— это локальный адрес вашей сетевой карты.89.179.240.91— это внешний адрес, который видит интернет.
Jitsi (Pàdé) должен знать оба: локальный — чтобы слушать порт на машине, и внешний — чтобы сообщить второму участнику в интернете, куда слать видео-поток.
fs_cli -xError Connecting при запуске команды с -x возникает потому, что по умолчанию fs_cli пытается соединиться с паролем ClueCon и хостом ::1.Чтобы команда сработала, всегда указывайте параметры:
fs_cli -H 127.0.0.1 -P 8021 -p ClueCon -x "conference list"
0 conference running, значит связь есть, просто никто еще не зашел в комнату Pàdé.- Домен: У вас должен быть рабочий домен (например,
openfire.unifree1.ru), направленный на ваш внешний IP. - Получение: Установите Certbot для Windows.
- Выполните:
certbot certonly --standalone -d openfire.unifree1.ru.
- Выполните:
- Импорт в Openfire:
- Зайдите в Server -> TLS/SSL Certificates.
- Нажмите Manage Store Contents у
Identity Store. - Выберите Import Private Key and Certificate.
- Вставьте содержимое файлов
privkey.pemиfullchain.pemиз папки Certbot. - Перезапустите Openfire.
- В браузере введите
chrome://flags/#allow-insecure-localhost. Включите (Enabled). - В Openfire (System Properties) добавьте:
org.jitsi.videobridge.DISABLE_CERTIFICATE_VERIFICATION=true
- Убедитесь, что второй пользователь заходит именно по внешнему IP (или домену), а не по локальному.
- Зайдите в комнату
https://89.179.240. - Сразу после захода введите в CMD:cmd
fs_cli -H 127.0.0.1 -P 8021 -p ClueCon -x "conference list"Используйте код с осторожностью. - Если вы увидите там комнату
test-something@default— бинго! Звук и управление конференциями заработали.
System Properties сейчас оба ключа (pade.freeswitch.enabled и ofmeet.freeswitch.enabled) установлены в true? (В новых версиях лучше оставить только pade.).fs_cli вы видите +OK No active conferences, значит, связь между Openfire и FreeSWITCH по протоколу ESL установлена, но плагин еще не «скомандовал» создать комнату.- Проверьте, что в System Properties параметр
pade.freeswitch.enabledточно стоит вtrue. - Убедитесь, что вы заходите в комнату под пользователем, у которого есть права (лучше под админом).
- Важно: В настройках
Server -> Pàdé -> FreeSWITCH Settingsполе ESL Host должно быть127.0.0.1, а не доменное имя (чтобы исключить проблемы с DNS внутри сервера).
allow-insecure-localhost нет в списке (он бывает только для localhost), используйте другой способ для теста видео:- Откройте Chrome.
- Введите в адресную строку:
chrome://flags/#unsafely-treat-insecure-origin-as-secure. - В поле вставьте ваш адрес:
https://89.179.240.91:7443. - Выберите Enabled и перезапустите браузер (Relaunch).
Это заставит Chrome думать, что ваш самоподписанный сертификат — доверенный, и он перестанет «выкидывать» второго пользователя.
- Server -> TLS/SSL Certificates -> Identity Store.
- Удалите старые (если они красные или с ошибками).
- Нажмите Generate Self-signed Certificate.
- В поле Common Name (CN) впишите ваш внешний IP:
89.179.240.91. - После генерации обязательно нажмите на кнопку «Перезагрузить сертификаты» (она появится сверху) или перезапустите Openfire.
- Проверьте в System Properties, что ключ
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESSсодержит именно89.179.240.91. - Попробуйте зайти в комнату и нажать
F12-> вкладкаConsole. Если там есть ошибки со словамиICE failed, значит, видео-трафик (UDP 10000) блокируется провайдером или роутером, несмотря на то, что порт «слушается».
В папке Openfire
logs/ найдите файл stderrout.log или all.log. Есть ли там строки, содержащие org.jitsi.videobridge или Bridge failed? Это даст точный ответ, почему рвется связь.- Зайдите в Users/Groups -> Create New User.
- Создайте пользователя:
- Username:
jigasi(или любое другое имя). - Password:
your_secure_password.
- Username:
- Вернитесь в Server -> Pàdé -> SIP Settings (или раздел Gateway to SIP) и впишите эти данные в поля Username и Password, на которые вы указали.
- В поле Name of default JVB room впишите:
lobby(или любое название). - Нажмите Save. Сообщение "authentication fails" должно исчезнуть.
- Зайдите в Group Chat -> Service Settings -> [ваш сервис, обычно conference].
- Вкладка Permissions: добавьте созданного пользователя
jigasi@openfire.unifree1.ruв список Admins (вместе с пользователемfocus).
- В System Properties проверьте, что значение
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESSсодержит только ваш внешний IP89.179.240.91. - Убедитесь, что параметр
org.ice4j.ice.harvest.DISABLE_AWS_HARVESTERстоит вtrue. - Если вы за роутером, на нем должен быть проброшен (Port Forwarding) не только TCP 7443, но и UDP 10000 на локальный IP
192.168.0.10.
/ofmeet/ плагин сможет авторизоваться и «прокинуть» звонок во FreeSWITCH.Создайте пользователя jigasi, пропишите его в настройки XMPP Account в Pàdé и проверьте, исчезла ли красная надпись "authentication fails".
- Проверьте: Group Chat -> Service Settings. Убедитесь, что сервис с ID
conference(илиrooms) активен. - Зайдите в Group Chat -> Room Administration. Если список пуст, это нормально для Pàdé: он создает комнаты «на лету» (динамически), когда первый пользователь заходит по ссылке.
- Зайдите в комнату:
https://89.179.240. - Как только вы увидите себя в камере, сразу введите в командной строке сервера:Если всё настроено верно, вы должны увидеть строку с названиемcmd
fs_cli -H 127.0.0.1 -P 8021 -p ClueCon -x "conference list"Используйте код с осторожностью.test_call@default. Это значит, аудио-мост работает.
Для работы двух и более человек Jitsi Videobridge (процесс Openfire) обязательно должен получать пакеты на:
- UDP 10000 (Видео и звук участников).
- UDP 10001 (Иногда используется для аудио-фокуса).
Если проброшен только TCP (7443), то первый зашедший видит себя, а второй при попытке подключить медиа-поток получает «от ворот поворот» от роутера, и его выбрасывает по таймауту.
- В папке
D:\FreeSWITCH\conf\directory\default\создайте файлjigasi.xml:xml<include> <user id="jigasi"> <params> <param name="password" value="jigasi_pass_123"/> </params> </user> </include>Используйте код с осторожностью. - В консоли
fs_cliвведитеreloadxml. - В Openfire (Server -> Pàdé -> SIP Settings) в разделе SIP Account укажите:
- SIP User:
jigasi - SIP Password:
jigasi_pass_123 - SIP Server:
127.0.0.1
- SIP User:
conference list при активном окне браузера с конференцией? (Если пусто — нужно смотреть warn.log в Openfire на предмет ошибок ESL).- Телефония (PSTN/SIP): Вы можете позвонить из браузера (окно Pàdé) на обычный мобильный номер или внутренний IP-телефон.
- Аудио-микширование: Если у участника плохой интернет и видео не тянет, FreeSWITCH позволяет ему участвовать в конференции только голосом (как в Zoom «войти по телефону»).
- Запись и IVR: FreeSWITCH может записывать аудио-поток встречи или проигрывать приветствие («Введите код комнаты») при входящем звонке.
Да. Если вам нужны только видеозвонки «браузер-браузер» внутри сети, FreeSWITCH не обязателен. Pàdé использует встроенный Jitsi Videobridge (JVB) для передачи видео и звука между участниками.
conference list пуст, значит, ESL-команда от Openfire не доходит до FreeSWITCH или не срабатывает триггер.- Проверьте логи Openfire (важнейший шаг):
Откройте файлlogs/all.log(илиwarn.log) и поищите слово ESL. Если там есть ошибкиConnection refusedилиAuthentication failed, значит, Pàdé не может «достучаться» до порта 8021, несмотря на то, чтоfs_cliзаходит. - Контроль портов (UDP):
То, что второго пользователя выкидывает — это на 99% проблема UDP порта 10000.- В Windows проверьте: Брандмауэр -> Дополнительные параметры -> Входящие правила.
- Должно быть правило: Протокол UDP, Порт 10000, Разрешить всем. (Даже если брандмауэр выключен, иногда правила фильтрации активны).
jigasi в SIP Settings:- В окне конференции
ofmeet(в браузере) должна появиться иконка телефона. - Попробуйте нажать на неё и введите любой номер, который у вас настроен во FreeSWITCH (например, тестовый номер
9196для эха). - Если во FreeSWITCH пойдет вызов (
fs_cliпокажет логи звонка) — значит, связка работает!
org.jitsi.videobridge.NAT_HARVESTER_LOCAL_ADDRESS=192.168.0.10(ваш внутренний IP).org.jitsi.videobridge.NAT_HARVESTER_PUBLIC_ADDRESS=89.179.240.91(ваш внешний IP).org.ice4j.ice.harvest.DISABLE_AWS_HARVESTER=true.org.ice4j.ice.harvest.STUN_MAPPING_HARVESTER_ADDRESSES=meet-jit-si-turnrelay.jitsi.net:443(это поможет «пробить» NAT без своего TURN-сервера).
- UDP 10000 -> на
192.168.0.10(Обязательно UDP, не TCP!). - TCP 7443 -> на
192.168.0.10.
- Зайдите в Users/Groups. Убедитесь, что пользователь
focusв статусе Online. - Если он оффлайн — перезапустите плагин Pàdé.
- Зайдите в Group Chat -> Service Settings -> [ваш сервис] -> Permissions. Добавьте
focus@openfire.unifree1.ruв список Administrators.
- Если видите
ICE Failed— это 100% закрытый порт UDP 10000 или неверный IP вNAT_HARVESTER. - Если видите
WebSocket Error— это проблема с SSL-сертификатом (нужно зайти наhttps://89.179.240.91:7443и нажать «Принять риск»).
focus в списке пользователей Openfire прямо сейчас? (Online или Offline?)- Отключите "Авто-реконнект" для теста:
В системных свойствах Openfire добавьте:ofmeet.pwa.reconnect.enabled=false
(Это остановит перезагрузку страницы, и вы сможете спокойно прочитать ошибки в консоли). - Проверьте статус Focus:
Вы не ответили, находится ли пользовательfocusв статусе Online в списке пользователей Openfire. Если он Offline, конференция никогда не начнется — участников будет выкидывать сразу.- Решение: Если он Offline, добавьте его в список Admins в настройках MUC (
Group Chat -> Service Settings -> conference).
- Решение: Если он Offline, добавьте его в список Admins в настройках MUC (
- Критическая настройка UDP (Windows):
Даже при отключенном брандмауэре Windows иногда блокирует трафик на порту 10000.
Выполните в PowerShell от админа:powershellNew-NetFirewallRule -DisplayName "Jitsi UDP" -Direction Inbound -Action Allow -Protocol UDP -LocalPort 10000Используйте код с осторожностью. - Проблема NAT Loopback:
Если вы заходите по внешнему IP89.179.240.91, находясь в той же локальной сети, что и сервер, ваш роутер может блокировать такой запрос (NAT Loopback).- Тест: Попробуйте зайти в комнату: один человек через Wi-Fi (локалка), а второй — через мобильный интернет (4G) на телефоне. Если так заработает — проблема в настройках роутера.
ICE failed или Bridge Channel Disconnected).openfire.free на ваш реальный openfire.unifree1.ru, нужно поправить системные свойства Openfire. Плагин берет эти данные из настроек XMPP-домена.openfire.free, ссылки будут такими по умолчанию.- Перейдите в Server -> Server Manager -> Server Information.
- Нажмите Edit Properties.
- В поле XMPP Domain Name впишите
openfire.unifree1.ru. - Внимание: Это может потребовать перевыпуска сертификатов и перенастройки пользователей (их JID изменится с
user@openfire.freeнаuser@openfire.unifree1.ru).
- Зайдите в Server -> Server Manager -> System Properties.
- Найдите (или создайте) свойство:
ofmeet.root.url.secure. - Установите значение:
https://unifree1.ru. - Также проверьте свойство:
pade.domain.nameи установите его вopenfire.unifree1.ru.
- Script Syntax разрешен.
- В поле BOSH URL или связанных настройках не затесался старый адрес.
openfire.free, а ваш сертификат выписан на openfire.unifree1.ru, второй пользователь при переходе по ссылке получит ошибку SSL, и браузер заблокирует WebRTC (видео).- Перезапустите плагин Pàdé (Plugins -> Pàdé -> Reload).
- Попробуйте создать новую конференцию в чате.
ofmeet.root.url.secure? Это должно мгновенно исправить ссылки в чате.ofmeet.root.url.secure не помогла, значит плагин берет имя хоста напрямую из системных настроек XMPP или настроек сетевого интерфейса Java.openfire.free на openfire.unifree1.ru в ссылках, сделайте следующее по порядку:xmpp.domain— установитеopenfire.unifree1.ru(Это глобальный ID сервера).xmpp.fqdn— установитеopenfire.unifree1.ru(Fully Qualified Domain Name).pade.domain.name— установитеopenfire.unifree1.ru.
- В поле Hostnames (если оно есть в вашей версии) впишите
openfire.unifree1.ru. - Убедитесь, что Port 7443 включен.
System Properties для Pàdé часто не подхватываются «на лету».- Перейдите в Plugins.
- Найдите Pàdé, нажмите иконку Reload (две стрелочки).
- Если не помогло — перезапустите весь сервис Openfire.
openfire.free, то когда второй пользователь нажимает на неё:- Его компьютер пытается разрешить имя
openfire.freeчерез DNS (и, скорее всего, не находит его). - Если даже находит, возникает конфликт SSL-сертификата: сертификат выдан на
unifree1.ru, а в строке браузераopenfire.free. Браузер блокирует WebRTC-трафик (микрофон и камеру) из соображений безопасности.
Просто вручную скопируйте ссылку из чата, замените в блокноте
openfire.free на ваш IP 89.179.240.91 и отправьте второму пользователю.https://89.179.240)admin@openfire.free перестала существовать, так как теперь сервер ищет admin@openfire.unifree1.ru.- Откройте файл конфигурации Openfire (обычно это
C:\Program Files\Openfire\conf\openfire.xml). - Найдите в самом низу строку:
<setup>true</setup>. - Измените её на:
<setup>false</setup>. - Перезапустите службу Openfire.
- Зайдите в браузер на порт
9090. Сервер предложит пройти шаги настройки:- Выберите язык.
- Важно: На шаге настроек сервера введите в поле XMPP Domain Name ваш правильный домен:
openfire.unifree1.ru. - Нажмите "Продолжить" через все шаги до конца. База данных подхватится автоматически.
xmpp.domain в исходное состояние (через Setup или правку базы), а ссылки в Pàdé меняйте только через эти свойства в System Properties:ofmeet.root.url.secure=https://unifree1.ruofmeet.url=https://unifree1.rupade.domain.name=openfire.unifree1.ru
Если вы меняете
xmpp.domain, все ваши пользователи «старого» домена пропадают из списков. Для созвона проще оставить домен как есть (openfire.free), но в System Properties прописать внешний адрес для веб-интерфейса.openfire.xml? (Это самый быстрый способ «починить» админку).Install-Module -Name Posh-ACME -Scope CurrentUser -Force
Manual:# Замените на свой домен и email
New-PACertificate 'openfire.unifree1.ru' -Contact 'admin@unifree1.ru' -AcceptTOS -Plugin Manual
- Важно: Скрипт попросит вас создать TXT-запись в панели управления вашим доменом. Сделайте это и подождите 5–10 минут перед нажатием Enter.
%AppData%\Local\Posh-ACME\Main\openfire.unifree1.ru\fullchain.crt(весь путь сертификатов)privkey.key(ваш закрытый ключ)
- Зайдите в Server -> TLS/SSL Certificates -> Identity Store.
- Нажмите Import Private Key and Certificate.
- Passphrase: оставьте пустым (Posh-ACME обычно не шифрует ключ паролем).
- Private Key: откройте блокнотом
privkey.keyи скопируйте всё содержимое. - Certificate: откройте блокнотом
fullchain.crtи скопируйте всё содержимое. - Нажмите Save.
- В списке сертификатов вы должны увидеть новый, выданный Let's Encrypt.
- Нажмите на появившуюся сверху оранжевую надпись "Click here to restart the HTTP server" (или перезагрузите весь Openfire).
- Теперь при заходе на
https://unifree1.ruзамок в браузере должен быть зеленым.
Как только замок станет зеленым, браузер разрешит WebSocket и WebRTC. Это должно решить проблему с тем, что пользователей «выкидывало».
# =========================== НАСТРОЙКИ OPENFIRE ===========================
$MainDomain = "openfire.unifree1.ru"
$AltNames = @("unifree1.ru") # Добавьте доп. имена, если нужно
$Email = "admin@unifree1.ru"
# Путь к веб-корню (Openfire использует Jetty, укажите путь к папке htdocs или вашему IIS)
$WebRoot = "C:\inetpub\wwwroot"
# Куда сохранять PEM файлы для импорта
$TargetPath = "C:\OpenfireCert"
if (-not (Test-Path $TargetPath)) { New-Item -ItemType Directory -Path $TargetPath }
# =========================================================================
Import-Module Posh-ACME
# 1. Получение сертификата
$Cert = New-PACertificate $MainDomain `
-SubjectAltName $AltNames `
-Contact $Email `
-AcceptTOS `
-Plugin WebRoot `
-PluginArgs @{ WebRootPath = $WebRoot } `
-Force
if ($Cert) {
# 2. Копируем PEM-файлы (Openfire лучше всего ест именно их)
# FullChain.pem — это сам сертификат + цепочка
# PrivKey.pem — это закрытый ключ
Copy-Item -Path $Cert.FullChainPem -Destination "$TargetPath\openfire_fullchain.pem" -Force
Copy-Item -Path $Cert.KeyPem -Destination "$TargetPath\openfire_privkey.pem" -Force
Write-Host "✅ Сертификаты сохранены в $TargetPath"
Write-Host "⚠️ Теперь импортируйте их в админке Openfire:"
Write-Host "1. Server -> TLS/SSL Certificates -> Identity Store -> Import Private Key and Certificate"
Write-Host "2. Вставьте содержимое openfire_privkey.pem в поле Private Key"
Write-Host "3. Вставьте содержимое openfire_fullchain.pem в поле Certificate"
}
keystore). Чтобы скрипт сам обновлял их без вашего участия, в конец скрипта нужно добавить конвертацию в PFX и команду keytool.- Выполните скрипт.
- Зайдите в Server -> TLS/SSL Certificates -> Identity Store.
- Нажмите Import Private Key and Certificate.
- Откройте блокнотом созданные файлы в
$TargetPathи скопируйте их содержимое в соответствующие поля. - Нажмите Save и перезапустите HTTP-сервер (кнопка появится сверху).
Как только вы зайдете по адресу
https://unifree1.ru и увидите зеленый замок, браузер разрешит установку WebRTC-соединения. Это устранит причину, по которой второго пользователя «выкидывало» из-за блокировки незащищенного трафика.$WebRoot).WebRoot не сработает, так как Let's Encrypt не сможет найти проверочный файл по адресу http://unifree1.ru....Условие: Порт 80 (TCP) должен быть открыт в брандмауэре Windows и проброшен на роутере на ваш сервер.
Import-Module Posh-ACME
$MainDomain = "openfire.unifree1.ru"
# Запускаем получение через встроенный HTTP-сервер (порт 80 должен быть свободен)
$Cert = New-PACertificate $MainDomain `
-AcceptTOS `
-Plugin HTTP `
-Force
if ($Cert) {
# Путь к сертификатам для Openfire
$ExportPath = "C:\OpenfireCert"
if (-not (Test-Path $ExportPath)) { New-Item $ExportPath -ItemType Directory }
Copy-Item $Cert.FullChainPem -Destination "$ExportPath\fullchain.pem" -Force
Copy-Item $Cert.KeyPem -Destination "$ExportPath\privkey.pem" -Force
Write-Host "✅ Файлы созданы в $ExportPath. Импортируйте их в админку Openfire."
}
New-PACertificate "openfire.unifree1.ru" -Plugin Manual -AcceptTOS
- Зайдите в Server -> TLS/SSL Certificates -> Identity Store.
- Нажмите Import Private Key and Certificate.
- Private Key: Откройте блокнотом
privkey.pemи скопируйте всё содержимое (включая-----BEGIN PRIVATE KEY-----). - Certificate: Откройте блокнотом
fullchain.pemи скопируйте всё содержимое. - Нажмите Save и Restart HTTP Server (кнопка появится вверху страницы).
Без IIS или другого веб-сервера на 80 порту метод
WebRoot из вашего прошлого скрипта просто не найдет путь для подтверждения владения доменом. Метод HTTP или Manual решит эту проблему.privkey.pem) и цепочка сертификатов (обычно fullchain.pem).- Откройте админку Openfire: Перейдите в
Server->TLS/SSL Certificates. - Выберите хранилище: Нажмите на ссылку Identity Store (обычно это верхняя таблица).
- Запустите импорт: Нажмите на ссылку Import Private Key and Certificate (под таблицей).
- Заполните поля:
- Passphrase: Оставьте пустым (если вы не задавали специальный пароль при генерации ключа).
- Private Key: Откройте ваш файл
privkey.pemблокнотом, скопируйте всё содержимое (включая строки-----BEGIN PRIVATE KEY-----и-----END PRIVATE KEY-----) и вставьте в это поле. - Certificate: Откройте файл
fullchain.pemблокнотом, скопируйте всё содержимое и вставьте в это поле.
- Сохраните: Нажмите кнопку Save.
- Активируйте: После сохранения вверху страницы появится оранжевое уведомление: "Click here to restart the HTTP server". Обязательно нажмите на него, чтобы новый сертификат применился к порту 7443.
- В списке сертификатов должна появиться новая строка, где в колонке "Issuer" указано Let's Encrypt.
- Зайдите на
https://unifree1.ru. В адресной строке браузера должен появиться закрытый замок (доверенное соединение).
Как только замок станет "зеленым" (доверенным), браузер разрешит передачу аудио и видео через WebRTC. Это устранит главную причину, по которой второго пользователя "выкидывало" — теперь защищенный канал данных (WebSocket) не будет блокироваться системой безопасности браузера.
- Перейдите в Server -> TLS/SSL Certificates.
- В первой таблице (Identity Store) нажмите на ссылку в столбце Manage Store Contents (обычно это иконка или текст "Manage...").
- В открывшемся окне вверху или внизу должна появиться ссылка "Import Private Key and Certificate".
- Зайдите в Server -> Server Manager -> System Properties.
- Убедитесь, что свойство
self-signed-certificate-generation-enabledустановлено вtrue. - Также проверьте, что плагин Certificate Manager установлен (если он есть в списке доступных).
- Создайте PFX файл из ваших сертификатов (используйте PowerShell, где установлен Posh-ACME):(Если openssl не установлен, Posh-ACME обычно уже создал .pfx файл в своей папке).powershell
# Пути к вашим файлам от Let's Encrypt $certFile = "C:\path\to\fullchain.pem" $keyFile = "C:\path\to\privkey.pem" $pfxFile = "C:\path\to\openfire.pfx" $password = "123456" # Openfire потребует пароль openssl pkcs12 -export -out $pfxFile -inkey $keyFile -in $certFile -password pass:$passwordИспользуйте код с осторожностью. - Загрузите PFX в Openfire:
- В разделе Identity Store нажмите "Import" или "Upload".
- Выберите ваш
.pfxфайл. - Введите пароль (например,
123456).
Без импортированного Let's Encrypt сертификата в Identity Store, порт 7443 (на котором работает видео Pàdé) будет продолжать отдавать старый самоподписанный сертификат, и браузер будет обрывать видеозвонок второго пользователя.
@echo off
:: =========================== НАСТРОЙКИ ===========================
set OPENSSL_BIN="D:\OpenSSL-Win64\openssl-1.1.1\x64\bin\openssl.exe"
set CERT_PATH="C:\ProgramData\win-acme\acme-v02.api.letsencrypt.org\Certificates\"
set CERT_FILE="e6FDq4gZe02fWRF6QaCZig-main-7db7c9b9effde6ed1cfb63f44ba8d17c8e54f853-temp.pfx"
set CERT_PASS="LC8WiwZ4PFTjh1OYdSxPY90gzVHfxpIAOkLOCvV1I8="
:: Куда сохранить готовые файлы для Openfire
set TARGET_DIR="C:\Openfire_Certs_Export"
if not exist %TARGET_DIR% mkdir %TARGET_DIR%
:: ================================================================
echo [1/3] Извлекаем закрытый ключ (Decrypted Key)...
%OPENSSL_BIN% pkcs12 -in %CERT_PATH%%CERT_FILE% -passin pass:%CERT_PASS% -nocerts -nodes -out %TARGET_DIR%\openfire_privkey.pem
echo [2/3] Извлекаем цепочку сертификатов (FullChain)...
%OPENSSL_BIN% pkcs12 -in %CERT_PATH%%CERT_FILE% -passin pass:%CERT_PASS% -nokeys -out %TARGET_DIR%\openfire_fullchain.pem
echo [3/3] Готово!
echo -----------------------------------------------------------
echo Теперь откройте файлы в блокноте и скопируйте в Openfire:
echo 1. Private Key: %TARGET_DIR%\openfire_privkey.pem
echo 2. Certificate: %TARGET_DIR%\openfire_fullchain.pem
echo -----------------------------------------------------------
pause
-nodes: Добавлена эта команда при извлечении ключа. Она убирает пароль с самого ключа (делает его "unencrypted"). Если ключ будет под паролем, Openfire может выдать ошибку при импорте.openfire_fullchain.pem: Мы извлекаем все сертификаты из PFX (сам сертификат + промежуточные), чтобы браузеры участников видеосвязи доверяли соединению.- Удален
net stop unbound: Для Openfire не нужно останавливать сервис, чтобы просто сконвертировать файлы.
- Запустите BAT-файл.
- Зайдите в Openfire: Server -> TLS/SSL Certificates -> Identity Store.
- Если ссылки "Import" нет — нажмите на Manage Store Contents внутри Identity Store, там она точно появится.
- Скопируйте содержимое созданных файлов в соответствующие поля.
connectionType=SOCKET_C2S или зайдите через меню:Server → TLS/SSL Certificates → Identity Store → Import Private Key and Certificate.
- Passphrase: Оставьте пустым (в вашем BAT-файле мы использовали
-nodes, ключ без пароля). - Private Key: Откройте
openfire_privkey.pemблокнотом. Скопируйте всё от-----BEGIN PRIVATE KEY-----до-----END PRIVATE KEY-----. Вставьте в поле. - Certificate: Откройте
openfire_fullchain.pem. Там будет несколько блоков сертификатов. Скопируйте их все по очереди и вставьте в это поле (один за другим).
- Нажмите Save.
- Если всё верно, в списке сертификатов появится Let's Encrypt.
- Вверху страницы появится оранжевая полоса. Нажмите на ссылку "Click here to restart the HTTP server". Это перезапустит веб-интерфейс на порту 7443 с новым сертификатом.
https://unifree1.ruЕсли в браузере горит зеленый замок, попробуйте подключить второго пользователя. Теперь WebRTC (медиа-трафик) не будет блокироваться, и выкидывать участников перестанет.
- В Private Key (из
openfire_privkey.pem) есть только один блок:-----BEGIN PRIVATE KEY-----...-----END PRIVATE KEY----- - В Certificate (из
openfire_fullchain.pem) должно быть два или три блока (ваш сертификат + промежуточные Let's Encrypt). Скопируйте их все один за другим. - Важно: Убедитесь, что нет пустых строк перед первым заголовком
-----BEGIN....
- Зайдите в Server -> TLS/SSL Certificates -> Identity Store.
- Если там есть сертификат для
openfire.unifree1.ru(самоподписанный), удалите его (иконка корзины). - Попробуйте импорт заново.
- На странице Identity Store найдите ссылку "Import Store" или "Import KeyStore".
- Выберите тип: PKCS12 (это и есть PFX).
- Выберите ваш файл:
e6FDq4gZe...temp.pfx. - Введите пароль из вашего BAT-файла:
LC8WiwZ4PFTjh1OYdSxPY90gzVHfxpIAOkLOCvV1I8=. - Нажмите Import.
Эта ошибка означает, что сертификат не "встал" на место. Пока он не пропишется, порт 7443 (видео) будет выдавать ошибку безопасности, и второго пользователя будет продолжать выкидывать.
- Примените изменения: Вверху страницы сертификатов должна быть оранжевая полоса. Нажмите «Click here to restart the HTTP server». Если её нет — перезагрузите весь сервис Openfire.
- Проверьте адрес: Заходите в конференцию строго по домену, на который выписан сертификат:
https://unifree1.ru
(В адресной строке должен появиться закрытый замок без предупреждений). - Тест созвона:
- Зайдите первым пользователем.
- Отправьте ссылку (она теперь должна содержать правильный домен) второму пользователю.
- Второй пользователь должен увидеть ваше видео, а не «вылететь» через 10 секунд.
- Проверьте, проброшен ли на роутере UDP порт 10000 на локальный IP сервера
192.168.0.10. - Убедитесь, что в System Properties свойство
org.jitsi.videobridge.NAT_HARVESTER_PUBLIC_ADDRESSравно вашему внешнему IP89.179.240.91.
- Проброс UDP порта 10000 (Критично)
Зайдите в настройки вашего роутера. Убедитесь, что порт 10000 проброшен именно по протоколу UDP (не TCP!) на локальный IP сервера192.168.0.10.- Почему это важно: В Jitsi видео идет отдельно от чата. Если UDP закрыт, через 15 секунд Jitsi считает, что связи нет, и делает реконнект (выбрасывает).
- Системные свойства NAT в Openfire
Проверьте еще раз в Server -> Server Manager -> System Properties:org.jitsi.videobridge.NAT_HARVESTER_LOCAL_ADDRESS=192.168.0.10org.jitsi.videobridge.NAT_HARVESTER_PUBLIC_ADDRESS=89.179.240.91org.ice4j.ice.harvest.STUN_MAPPING_HARVESTER_ADDRESSES=meet-jit-si-turnrelay.jitsi.net:443- Важно: После изменения этих свойств нужно перезапустить Openfire, чтобы медиа-мост узнал свой новый адрес.
- Брандмауэр Windows (PowerShell)
Даже если он выключен, создайте явное разрешение для UDP. Выполните в PowerShell от админа:powershellNew-NetFirewallRule -DisplayName "Openfire JVB UDP" -Direction Inbound -Action Allow -Protocol UDP -LocalPort 10000Используйте код с осторожностью.
- Если видите ошибку
ICE failed— это 100% проблема с портами (пункт 1). - Если видите
Bridge channel disconnected— медиа-сервер JVB не видит участника.
Turn on your Visual Search History?
Google uses its visual recognition technologies to process the images you use to search, like when you search with Google Lens. If you turn on your Visual Search History, Google will save these images from eligible Google services to your Web & App Activity when you’re signed in to your Google Account. You can learn more about this setting and which Google services save images to it at g.co/Search/VisualSearchHistory.
How visual search history is used
Your Visual Search History may be used to improve your experience on Google services, like letting you revisit your past visual searches. It may be used to develop and improve Google’s visual recognition and search technologies, as well as the Google services that use them.
When visual search history is off
If you turn this setting off, any previous Visual Search History may still be kept and used to improve Google’s visual recognition and search technologies, unless you delete it from your Web & App Activity.
Visual Search History doesn’t affect images saved by other settings, like Gemini Apps Activity.
How to manage your Visual Search History
You can view, delete, or manage your Visual Search History at activity.google.com. To download your Visual Search History, visit takeout.google.com. Images will be deleted in accordance with your Web & App Activity auto-delete settings, although some types of images may be deleted sooner.
Google uses and saves data in accordance with Google Privacy Policy.
