Проблемы с docker контейнером

Alex YYY

New Member
Имеется docker-compose файл с такими настройками:

YAML:
  wcsserver:
    image: flashphoner/webcallserver:5.2.898
    container_name: wcsserver
    network_mode: host
    expose:
       - "8080-8084"
       - "8443-8445"
       - "554"
       - "1935"
       - "1935/udp"
       - "30000-35000"
       - "30000-35000/udp"
       - "50999"
    environment:
      PASSWORD: "xxxxxxxx"
      LICENSE: "xxxxxxxxx-xxxxxxx-xxxxxx-xxxxxx-xxxxxxxxxxx"
    volumes:
      - ./wcsserver/logs:/usr/local/FlashphonerWebCallServer/logs
    logging:
      options:
        max-size: "2m"
        max-file: "3"
Контейнер стартует нормально, в логах видно что лицензия активирована. Захожу на демо-страницу, пытаюсь использовать Phone пример. Ввожу нужные данные, статус сессии показан как ESTABLISHED, однако я не получаю сообщение о регистрации на вэбсокет.

Порты открыты:
8443-8445/tcp 8080-8090/tcp 554/tcp 1935/tcp 30000-35000/udp 30000-35000/tcp 1935/udp 50999/tcp

В логах вижу вот это:
URL:http://localhost:8081/apps/EchoApp/connect
OBJECT:
{
"nodeId" : "OD1EE4RahWXhMPQDanmqKg7bmGRieKzK@",
"appKey" : "defaultApp",
"sessionId" : "/193.200.84.43:57949/185.22.172.44:8080-d7e7caa5-f4c4-4f45-93d3-c52076cd2305",
"sipRegisterRequired" : true,
"sipLogin" : "xxxxxxxxxxxxxxxxxxxxxxx",
"sipAuthenticationName" : "xxxxxxxxxxxxxxxxxxx",
"sipPassword" : "xxxxxxxxxxxxxxxxxxxxx",
"sipDomain" : "xxxxxxxxxxxxxxxxxxx",
"sipOutboundProxy" : "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"sipPort" : 5060,
"useWsTunnel" : false,
"useWsTunnelPacketization2" : false,
"msePacketizationVersion" : 2,
"useBase64BinaryEncoding" : false,
"mediaProviders" : [ "MSE", "WSPlayer" ],
"clientVersion" : "2.0.164",
"clientOSVersion" : "5.0 (Windows)",
"clientBrowserVersion" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0",
"keepAlive" : false,
"origin" : "http://185.22.172.44:8081"
}
16:16:35,620 INFO WCS4Handler - API-ASYNC-pool-13-thread-4 onConnect client: WSClient{channel=[id: 0x3b55bb0c, /193.200.84.43:57949 => /185.22.172.44:8080], handler=com.flashphoner.server.client.handler.DelegateHandler@2d4aef0d, closed=false, pageUrl='null', countUnansweredPing=0}; params: Connection{sipRegisterRequired=true, sipLogin='xxxxxxxxxxxxxxxxxxxxxxxxx', sipAuthenticationName='xxxxxxxxxxxxxxxxxxxx', sipPassword='xxxxxxxxxxxxxxxxxxxxx', sipVisibleName='null', sipDomain='xxxxxxxxxxxxxx', sipOutboundProxy='xxxxxxxxxxxxxxxxx', sipPort=5060, sipContactParams='null', width=null, height=null, supportedResolutions='null', useDTLS=null, mediaProviders=[MSE, WSPlayer], appMainClass='com.flashphoner.server.client.handler.wcs4.WCS4Handler', authToken='null', status='null', restClientConfig=null, clientVersion=2.0.164, keepAlive=false}Context{custom={origin=http://185.22.172.44:8081}, nodeId='null', appKey='defaultApp', sessionId='/193.200.84.43:57949/185.22.172.44:8080-d7e7caa5-f4c4-4f45-93d3-c52076cd2305'}
16:16:35,622 INFO SoftphoneFactory - API-ASYNC-pool-13-thread-4 newCustomSoftphone login=xxxxxxxxxxxxxxxxxx password=xxxxxxxxxxxxxx domain=5.100.248.94outboundProxy=5.100.248.94 port=5060 visibleName=42891781297664
16:16:35,624 INFO SipUserAgentListener - API-ASYNC-pool-13-thread-4 Put by uri sip:42891781297664-744156238@127.0.0.1:30001 SipUserAgent SIP UA: login: 42891781297664 assignedPort: 30001 listeningPort: 30001
16:16:35,624 INFO PagerModeClient - API-ASYNC-pool-13-thread-4 No chat listener detected
16:16:35,624 INFO SipUserAgent - API-ASYNC-pool-13-thread-4 Init instance. Count: 4 this: SIP UA: login: xxxxxxxxxxxx assignedPort: 30001 listeningPort: 30001
16:16:35,626 INFO SipUserAgentListener - API-ASYNC-pool-13-thread-4 Requested by uri sip:42891781297664-744156238@127.0.0.1:30001 SipUserAgent SIP UA: login: 42891781297664 assignedPort: 30001 listeningPort: 30001
16:16:35,627 ERROR UDPMessageChannel - API-ASYNC-pool-13-thread-4 IOException:
java.io.IOException: Invalid argument
at java.base/java.net.PlainDatagramSocketImpl.send(Native Method)
at java.base/java.net.DatagramSocket.send(DatagramSocket.java:695)
at gov.nist.javax.sip.stack.UDPMessageChannel.sendMessage(UDPMessageChannel.java:717)
at gov.nist.javax.sip.stack.UDPMessageChannel.sendMessage(UDPMessageChannel.java:592)
at gov.nist.javax.sip.stack.SIPTransaction.sendMessage(SIPTransaction.java:731)
at gov.nist.javax.sip.stack.SIPClientTransaction.sendMessage(SIPClientTransaction.java:467)
at gov.nist.javax.sip.stack.SIPClientTransaction.sendRequest(SIPClientTransaction.java:960)
at com.flashphoner.sip.SipUserAgent.register(Unknown Source)
at com.flashphoner.sdk.softphone.Softphone.register(Unknown Source)
at com.flashphoner.sdk.softphone.Softphone.<init>(Unknown Source)
at com.flashphoner.sdk.softphone.SoftphoneFactory.newCustomSoftphone(Unknown Source)
at com.flashphoner.sdk.client.AbstractWCSClient.initCustomSoftphone(Unknown Source)
at com.flashphoner.sdk.client.AbstractWCSClient.<init>(Unknown Source)
at com.flashphoner.server.client.MainWCSClient.<init>(Unknown Source)
at com.flashphoner.server.client.handler.wcs4.WCS4Handler.createNewWCSClient(Unknown Source)
at com.flashphoner.server.client.handler.wcs4.WCS4Handler.connection(Unknown Source)
at com.flashphoner.server.client.handler.DelegateHandler.connection(Unknown Source)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at com.flashphoner.server.client.handler.HandlerUtils.lambda$processThroughREST$0(Unknown Source)
at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
at java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:478)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:835)
16:16:35,628 DEBUG sipMessages - API-ASYNC-pool-13-thread-4

--------------------> REGISTER sip:5.100.248.94;lr SIP/2.0
from: /127.0.0.1:30001
to: /5.100.248.94:5060
time: 1614269795627
timeStamp:
isSender: true
transactionId: z9hg4bk90e8fa28508a9346467e487a823d447c
callId: 2a3b34bd8b97ea1884d809f955de3476@

REGISTER sip:5.100.248.94;lr SIP/2.0
Call-ID: 2a3b34bd8b97ea1884d809f955de3476@
CSeq: 1 REGISTER
From: <sip:42891781297664@5.100.248.94>;tag=4777543f
To: <sip:42891781297664@5.100.248.94>
Via: SIP/2.0/UDP 127.0.0.1:30001;branch=z9hG4bK90e8fa28508a9346467e487a823d447c
Max-Forwards: 70
User-Agent: WebCallServer
Allow: MESSAGE,REFER,NOTIFY,CANCEL,ACK,UPDATE,INVITE,OPTIONS,INFO,BYE
Contact: <sip:42891781297664-744156238@127.0.0.1:30001>;expires=3600
Expires: 3600
Content-Length: 0



Подскажите куда смотреть.
 

Max

Administrator
Staff member
Добрый день.
"origin" : "http://***.**.***.**:8081"
Прежде всего, обращаем внимание, что при открытии страницы примера в браузере по HTTP пример не будет работать, поскольку не будет работать WebRTC. Необходимо открывать страницу по HTTPS.
Ввожу нужные данные, статус сессии показан как ESTABLISHED, однако я не получаю сообщение о регистрации на вэбсокет.
Это говорит о том, что не проходит регистрация на SIP сервере. Проблема должна быть видна в сообщениях SIP сигналинга в логе. И, скорее всего. проблема заключается вот в этом:
--------------------> REGISTER sip:5.100.248.94;lr SIP/2.0
from: /127.0.0.1:30001
to: /5.100.248.94:5060
SIP сервер расположен на отдельном хосте, получает запрос от WCS, пытается соединиться с адресом 127.0.0.1 и не может этого сделать, т.к. с его точки зрения это локальный адрес его хоста.
Необходимо в настройке ip_local указать адрес хоста, если Вы используете host сеть:
Code:
docker run \
-e PASSWORD=password \
-e LICENSE=license_number \
-e LOCAL_IP=host_ip \
-e EXTERNAL_IP=host_ip \
--net host \
--name wcs-docker-test --rm -d flashphoner/webcallserver:latest
 

Alex YYY

New Member
Спасибо за наводку с портами.
Добавил SSL. От claudflare. Поскольку не нашел как в cloudflare добавить порты 8444, 8443 то сделал через Nginx Proxy - по одному поддомену для вебсокета и для тестового веб-сервера (sd1.domain.com:443->xx.xx.xx.xx:8080 и sd2.domain.com:443->xx.xx.xx.xx:8081). При открытии в браузере - с SSL все хорошо, вэбсокет тоже соединяет по wss, однако сообщения о регистрации я так и не получаю.

Вот фрагмент лог файла:




--------------------> REGISTER sip:5.100.248.94;lr SIP/2.0
from: /185.22.172.44:30004
to: /5.100.248.94:5060
time: 1614333827783
timeStamp:
isSender: true
transactionId: z9hg4bk38e5ae78db1ef2c449f821f0e40d32e2
callId: 26a3e8ab57748abe7fdfe2c21dce4332@185.22.172.44

REGISTER sip:5.100.248.94;lr SIP/2.0
Call-ID: 26a3e8ab57748abe7fdfe2c21dce4332@185.22.172.44
CSeq: 1 REGISTER
From: <sip:42891781297664@5.100.248.94>;tag=5e2e6471
To: <sip:42891781297664@5.100.248.94>
Via: SIP/2.0/UDP 185.22.172.44:30004;branch=z9hG4bK38e5ae78db1ef2c449f821f0e40d32e2
Max-Forwards: 70
User-Agent: WebCallServer
Allow: MESSAGE,REFER,NOTIFY,CANCEL,ACK,UPDATE,INVITE,OPTIONS,INFO,BYE
Contact: <sip:42891781297664-57090025@185.22.172.44:30004>;expires=3600
Expires: 3600
Content-Length: 0


10:03:51,786 DEBUG sipMessages - Flashphoner-SipStack-Timer

--------------------> REGISTER sip:5.100.248.94;lr SIP/2.0
from: /185.22.172.44:30004
to: /5.100.248.94:5060
time: 1614333831785
timeStamp:
isSender: true
transactionId: z9hg4bk38e5ae78db1ef2c449f821f0e40d32e2
callId: 26a3e8ab57748abe7fdfe2c21dce4332@185.22.172.44

REGISTER sip:5.100.248.94;lr SIP/2.0
Call-ID: 26a3e8ab57748abe7fdfe2c21dce4332@185.22.172.44
CSeq: 1 REGISTER
From: <sip:42891781297664@5.100.248.94>;tag=5e2e6471
To: <sip:42891781297664@5.100.248.94>
Via: SIP/2.0/UDP 185.22.172.44:30004;branch=z9hG4bK38e5ae78db1ef2c449f821f0e40d32e2
Max-Forwards: 70
User-Agent: WebCallServer
Allow: MESSAGE,REFER,NOTIFY,CANCEL,ACK,UPDATE,INVITE,OPTIONS,INFO,BYE
Contact: <sip:42891781297664-57090025@185.22.172.44:30004>;expires=3600
Expires: 3600
Content-Length: 0


10:03:55,788 DEBUG sipMessages - Flashphoner-SipStack-Timer

--------------------> REGISTER sip:5.100.248.94;lr SIP/2.0
from: /185.22.172.44:30004
to: /5.100.248.94:5060
time: 1614333835787
timeStamp:
isSender: true
transactionId: z9hg4bk38e5ae78db1ef2c449f821f0e40d32e2
callId: 26a3e8ab57748abe7fdfe2c21dce4332@185.22.172.44

REGISTER sip:5.100.248.94;lr SIP/2.0
Call-ID: 26a3e8ab57748abe7fdfe2c21dce4332@185.22.172.44
CSeq: 1 REGISTER
From: <sip:42891781297664@5.100.248.94>;tag=5e2e6471
To: <sip:42891781297664@5.100.248.94>
Via: SIP/2.0/UDP 185.22.172.44:30004;branch=z9hG4bK38e5ae78db1ef2c449f821f0e40d32e2
Max-Forwards: 70
User-Agent: WebCallServer
Allow: MESSAGE,REFER,NOTIFY,CANCEL,ACK,UPDATE,INVITE,OPTIONS,INFO,BYE
Contact: <sip:42891781297664-57090025@185.22.172.44:30004>;expires=3600
Expires: 3600
Content-Length: 0


10:03:56,289 INFO SipUserAgentListener - EventScannerThread-30 Requested by uri sip:42891781297664-57090025@185.22.172.44:30004 SipUserAgent SIP UA: login: xxxxxxxxxxxx assignedPort: 30004 listeningPort: 30004
10:03:56,289 WARN SipUserAgentListener - EventScannerThread-30 REGISTER timeout


как видно после нескольких попыток регистрации - выдает timeout

Может ли быть дело в HTTP заголовках? Возможно нужно где-то указать допустимые домены в настройках сервера
 

Max

Administrator
Staff member
Выглядит так, что ответы от SIP сервера не доходят.
Проверьте, пожалуйста, работает ли WebRTC (публикация и проигрывание в примере TwoWayStreaming). Также проверьте, доступны ли извне UDP порты 30000-35000 в контейнере по инструкции здесь. tcpdump есть в образе WCS для этой цели.
Также снимите дамп трафика на стороне контейнера во время звонка, соберите логи по этой инструкции и пришлите, используя эту форму
 

Alex YYY

New Member
Апдейт:
- Стриминг в демо у меня работает (и видео и аудио)
- Порты пробил из другого внешнего хоста - tcpdump снимает подключения, все ок.
- Собрал нужные логи. Письмо отправил. На всякий случай прикреплю их сюда.
- Все тесты делал с выключенным firewalld. Также временно отключил SeLinux
 

Attachments

Max

Administrator
Staff member
Проверили логи. Судя по логам, WCS не получает ответа от SIP сервера на запрос REGISTER. Дамп это подтверждает, на все попытки отправить UDP пакет с порта 30001 WCS на порт 5060 SIP сервера завершаются неудачей с диагнозом Destination unreachabe (Port unreachable):
1614563911332.png

Выглядит так, что UDP порт 5060 на SIP сервере закрыт или не прослушивается. Проверьте, пожалуйста. Если SIP сервер настроен так, что поддерживает сигналинг по TCP, поможет включение SIP TCP сигналинга на стороне WCS при помощи настройки
Code:
sip_force_tcp=true
 
Top