После обновления fedora 27 на fedora 28 (asterisk 14.7.x на asterisk 15.3.x) перестал работать SRTP.
Соединение устанавливается корректно (без ошибок), но голоса нет.
95.95.95.95 - IP 2-ух клиентов за NAT на Android CSipSimple
96.96.96.96 - external static IP Asterisk server 15.3.0
При установке соединения с SRTP на сервере:
Код: Выделить всё
sip set debug on
...
INVITE sips
Via: SIP/2.0/TLS
...
CSeq: 11970 INVITE
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
Supported: replaces, 100rel, timer, norefersub
Session-Expires: 1800
Min-SE: 90
User-Agent: CSipSimple_ASUS_Mobile/r2457
Content-Type: application/sdp
Content-Length: 588
v=0
o=- 3739380822 3739380822 IN IP4 192.168.7.5
s=pjmedia
c=IN IP4 192.168.7.5
t=0 0
m=audio 4006 RTP/SAVP 99 0 8 101
c=IN IP4 192.168.7.5
a=rtcp:4007 IN IP4 192.168.7.5
a=sendrecv
a=rtpmap:99 SILK/24000
a=fmtp:99 useinbandfec=0
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
...
a=crypto:1 AES_CM_128_HMAC_SHA1_80
a=crypto:2 AES_CM_128_HMAC_SHA1_32
sip: TLS transport is used for immediate hop
sips: End-to-end signaling is supported secure
SRTP
Все протоколы без SRTP (UDP, TCP, TLS) - работают корректно.
При звонке с TLS+SRTP, на UDP, абонент настроенный на UDP слышит голос (т.е. голос в одну сторону)
tcpdump корректное голосовое соединение, например UDP-UDP (без SRTP):
Код: Выделить всё
IP (tos 0x20, ttl 52, id 3339, offset 0, flags [DF], proto UDP (17), length 92)
95.95.95.95.newoak > 96.96.96.96.19129: [udp sum ok] UDP, length 64
IP (tos 0x20, ttl 52, id 3340, offset 0, flags [DF], proto UDP (17), length 92)
95.95.95.95.newoak > 96.96.96.96.19129: [udp sum ok] UDP, length 64
IP (tos 0x20, ttl 52, id 3341, offset 0, flags [DF], proto UDP (17), length 120)
95.95.95.95.terabase > 96.96.96.96.19128: [udp sum ok] UDP, length 92
IP (tos 0x20, ttl 52, id 3342, offset 0, flags [DF], proto UDP (17), length 200)
95.95.95.95.terabase > 96.96.96.96.19128: [udp sum ok] UDP, length 172
IP (tos 0x20, ttl 52, id 0, offset 0, flags [DF], proto UDP (17), length 200)
95.95.95.95.telelpathstart > 96.96.96.96.18824: [udp sum ok] UDP, length 172
IP (tos 0x20, ttl 52, id 0, offset 0, flags [DF], proto UDP (17), length 200)
95.95.95.95.telelpathstart > 96.96.96.96.18824: [udp sum ok] UDP, length 172
Код: Выделить всё
IP (tos 0x20, ttl 52, id 0, offset 0, flags [DF], proto UDP (17), length 210)
95.95.95.95.4000 > 96.96.96.96.17862: [udp sum ok] UDP, length 182
IP (tos 0x0, ttl 64, id 11542, offset 0, flags [DF], proto UDP (17), length 210)
96.96.96.96.12830 > 95.95.95.95.4010: [bad udp cksum 0x74dd -> 0x0cfb!] UDP, length 182
IP (tos 0x20, ttl 52, id 34375, offset 0, flags [DF], proto UDP (17), length 210)
95.95.95.95.4010 > 96.96.96.96.12830: [udp sum ok] UDP, length 182
IP (tos 0x0, ttl 64, id 11543, offset 0, flags [DF], proto UDP (17), length 210)
96.96.96.96.17862 > 95.95.95.95.4000: [bad udp cksum 0x74dd -> 0xc30d!] UDP, length 182
IP (tos 0x20, ttl 52, id 34376, offset 0, flags [DF], proto UDP (17), length 210)
95.95.95.95.4010 > 96.96.96.96.12830: [udp sum ok] UDP, length 182
IP (tos 0x0, ttl 64, id 11544, offset 0, flags [DF], proto UDP (17), length 210)
96.96.96.96.17862 > 95.95.95.95.4000: [bad udp cksum 0x74dd -> 0x4b15!] UDP, length 182
Код: Выделить всё
[general]
...
udpbindaddr=0.0.0.0
tcpenable=yes
tcpbindaddr=0.0.0.0
tlsenable=yes
tlsbindaddr=0.0.0.0
transport=udp
srvlookup=yes
tlscertfile=/etc/pki/asterisk/asterisk.pem
tlsprivatekey=/etc/pki/asterisk/asterisk.pem
tlsdontverifyserver=yes
tlscipher=ALL
tlsclientmethod=tlsv1
nat = force_rport,comedia
directmedia=yes
...
[authentication]
;My Start
[office](!)
type=friend
context=call-out
secret=mysecret
host=dynamic
qualify=yes
canreinvite=no
callgroup=1
pickupgroup=1
dtmfmode=auto
allow=alaw
allow=ulaw
allow=g729
allow=g723
allow=g722
allow=gsm
allow=g726
До обновления данная конфигурация была вполне рабочей.
Судя по всему нужно решать проблему bad udp cksum, которая проявляется только с SRTP. Но что стало ее причиной не понятно. Если кто сталкивался с подобным или может направить на мысль, буду благодарен. Если что-то еще важное упустил, пишите, предоставлю.