Задать вопрос
@DromHour

В связке FreeSwitch + FusionPBX не могу подключиться к event_socket с внешнего IP, почему?

Есть свежеустановленный сервер, на который поставил:
  • FreeSwitch
  • FusionPBX
  • MongoDB 5.0
  • Node.JS 16.14.0

FusionPBX, очевидно, подключается к сокету.
Однако, мне нужно подключиться в дополнение с собственного приложения.
Вот код, который я запускаю через node.js:
const net = require('net');

const client = new net.Socket();
console.log('connecting')
client.connect(8021, '<Убрал IP>', function(a) {
	console.log('Connected', a);
	client.write('ClueCon');
});


client.on('data', function(data) {
	console.log('Received: ' + data);
	client.destroy();
});

client.on('close', function() {
	console.log('Connection closed');
});


Запуская это с сервера, выводит:
connecting
Connected undefined
Received: Content-Type: auth/request

Соответственно, доступ к сокету есть (ну почти)

А вот что случается, когда я пробую сделать это со своего компьютера:
Error: connect ECONNREFUSED <Убрал IP>:8021

Я дал доступ компу с iptables, и в этом я уверен - иначе был бы Timeout, как с другими портами.

Также прилагаю настройки event_socket модуля:
<configuration name="event_socket.conf" description="Socket Client">
  <settings>
    <param name="nat-map" value="false"/>
    <param name="listen-ip" value="<Убрал IP (внешний, а не 127.0.0.1)>"/>
    <param name="listen-port" value="8021"/>
    <param name="password" value="ClueCon"/>
    <param name="apply-inbound-acl" value="dromhour"/>
  </settings>
</configuration>
  • Вопрос задан
  • 224 просмотра
Подписаться 1 Сложный 2 комментария
Решения вопроса 1
@DromHour Автор вопроса
Для тех, кто столкнётся с такой же проблемой:
  • Через iptables всё же можно открыть порт для себя, но я бы предпочёл просто использовать что-то наподобие ufw, который работает через тот же iptables, но настраивается проще. При настройке напрямую, я всё же что-то упустил.
  • Вы, скорее всего, поменяете пароль от сокета. Не забудьте сделать то же во FusionPBX, по адресу /app/settings/setting_edit.php
  • FreeSwitch запрашивают авторизацию, и с первого взгляда вообще не понятно, как ввести пароль. На деле, в официальной документации, указана команда "auth my_password".
  • Под Node.JS есть модуль "esl", который упрощает работу с самим сокетом. Документация практически отсутствует, надеюсь когда-нибудь автор найдёт на неё вдохновение.
  • Подсказки в комментариях сверху сработали, я смог приконнектиться к сокету

Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы