
별표를 사용하여 보안 호출을 하기 위해 이 튜토리얼을 완료했습니다.
Ubuntu 버전 16(debian)에서 별표 버전 13.19.2를 실행하고 있는데 TLS 및 SRTP를 추가하자마자 문제가 발생했습니다.
별표를 설치하려는 경우에만 이 내용을 읽으십시오!보안 통화를 하기 위해 TLS 및 SRTP 지원과 함께 별표를 설치하려는 경우에 대비해 참고할 사항입니다.실제 질문은 맨 밑에 있어요!
- libsrtp 및 SRTP와 함께 별표 13.19.2를 설치하십시오.
{
# (1) make sure everything is up to date again
apt-get update
apt-get upgrade
# (2) Install dependencies that will be needed in order to install asterisk pjproject etc...
apt-get install aptitude -y
aptitude install build-essential -y
aptitude install git -y
aptitude install libssl-dev -y
aptitude install zlib1g-dev -y
aptitude install openssl -y
aptitude install libxml2-dev -y
aptitude install libncurses5-dev -y
aptitude install uuid-dev -y
aptitude install sqlite3 -y
aptitude install libsqlite3-dev -y
aptitude install pkg-config -y
aptitude install libjansson-dev -y
# (3) make sure everything is up to date again
apt-get update
apt-get upgrade
# (4) Install libsrtp (library used to encrypt rtp)
cd /root
wget https://github.com/cisco/libsrtp/archive/v1.6.0.tar.gz
tar -xzf v1.6.0.tar.gz
cd libsrtp-1.6.0
./configure CFLAGS=-fPIC --prefix=/usr
make
make runtest
make install
cd ..
# (5) install pjproject
git clone https://github.com/asterisk/pjproject pjproject
cd pjproject
./configure --prefix=/usr --enable-shared --disable-sound --disable-resample --disable-video --disable-opencore-amr --with-external-srtp
make dep
make
make install
cd ..
# (6) Install Asterisk WITH SRTP AND PJPROJECT
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz
tar xvf asterisk-13-current.tar.gz
cd asterisk-13.19.2
./configure --with-pjproject --with-ssl --with-srtp
make
make install
make samples
make config
키(인증서)를 생성합니다. 인증 기관에서 구매할 수도 있습니다.
# GENERATE KEYS
# make a place for our keys mkdir /etc/asterisk/keys
cd /root/asterisk-13.19.2/contrib/scripts
./ast_tls_cert -C my_company.com -O "my_company" -d /etc/asterisk/keys
# TODO later generate keys for clients (ip phones). This part is explained on first tutorial link and is not relevant to this question
sip.conf 및 Extensions.conf 생성
sip.conf:
[general]
tcpenable=yes
udpenable=yes
udpbindaddr=0.0.0.0
tcpbindaddr=0.0.0.0
; allow tls !
tlsenable=yes
tlsbindaddr=0.0.0.0:5868 ; <------------------------ note I am changing the default port 6061 to 5868
tlscertfile=/etc/asterisk/keys/asterisk.pem ; key generated on step 2
tlscafile=/etc/asterisk/keys/ca.crt ; certificate generated on step 2
tlscipher=ALL
tlsclientmethod=tlsv1
encryption=yes
tlsdontverifyserver=yes ; trust ublux more than godaddy!
videosupport=yes
nat=force_rport,comedia
; shared configuration used for ip phones
[base-config](!)
type=peer
;type=friend
disallow=all
allow=ulaw,h264,vp8
context=common ;<------------------ context used on extensions.conf
dtmfmode=auto
insecure=port,invite
canreinvite=no
host=dynamic
directmedia=no
registertrying=yes
qualify=yes; monitof peer in order to know if its connected
transport=tls ; Only allow secure transport!
encryption=yes
icesupport=yes
dtlsenabled=yes
dtlsverify=no
sip.conf의 피어
; peer 1
[101](base-config)
secret=password123
setvar=ID=Tono
setvar=Foo=test101
; peer 2
[102](base-config)
secret=password123
setvar=ID=Monir
setvar=Foo=test102
확장.conf
[general]
static=yes
writeprotect=no
[common]
exten => 101,1,NoOp(Calling 101)
same => n,NoOp(Foo = ${Foo} )
same => n,Dial(SIP/101)
same => n,Hangup()
exten => 102,1,NoOp(Calling 102)
same => n,NoOp(Foo = ${Foo} )
same => n,Dial(SIP/102)
same => n,Hangup()
어쨌든 질문은 다음과 같습니다.
해당 단계를 수행한 후에는 전화를 걸고 받을 수 있습니다.그런데 아주 이상한 일이 일어납니다! 별표가 잘못된 변수를 사용합니다.. 예를 들어 전화로 별표 101
로 전화하면 102
피어에서 변수를 선택합니다 102
!이는 두 전화기가 NAT 뒤에 있기 때문에 동일한 IP 주소를 갖는 경우에만 발생합니다.
증거는 다음과 같습니다.
ubuntu*CLI> sip show peers
Name/username Host Dyn
Forcerport Comedia ACL Port Status Description
101 170.55.7.131 D Yes Yes 50178 Unmonitored
102 170.55.7.131 D Yes Yes 50137 Unmonitored
103 170.55.7.132 D Yes Yes 50212 Unmonitored
피어 101과 102는 동일한 라우터 뒤에 있기 때문에 동일한 IP 주소를 표시합니다. 즉, 170.55.7.131은 공개 IP입니다. 다른 공용 IP 주소를 가지고 있는 경우에는 이런 일이 발생하지 않습니다. 즉, 이상한 이유로 확장 101과 103 사이에서는 이런 일이 발생하지 않습니다.
101에서 102로 전화하면 별표 로그에 다음과 같이 표시됩니다. (올바른)
Executing [102@common:1] NoOp("SIP/101-00000095", "Calling 102") in new stack
Executing [102@common:2] NoOp("SIP/101-00000095", "Foo = test101 ") in new stack
Executing [102@common:3] Dial("SIP/101-00000095", "SIP/102") in new stack
Using SIP VIDEO CoS mark 6
....
102에서 101로 전화하면 별표 로그가 표시됩니다!!: (잘못됨)
Executing [101@common:1] NoOp("SIP/101-00000097", "Calling 101") in new stack
Executing [101@common:2] NoOp("SIP/101-00000097", "Foo = test101 ") in new stack
Executing [101@common:3] Dial("SIP/101-00000097", "SIP/101") in new stack
왜 Foo= test101
같아야 하는가 test102
!!! 또한 채널 변수에는 전화가 전화 통화를 시작했기 때문에 101-00000097
포함 101
되어야 합니다 !102-00000097
102
별표 서비스를 다시 시작하고 102에서 101로 동일한 호출을 하면 별표가 표시됩니다.
Executing [101@common:1] NoOp("SIP/102-00000002", "Calling 101") in new stack
Executing [101@common:2] NoOp("SIP/102-00000002", "Foo = test102 ") in new stack
Executing [101@common:3] Dial("SIP/102-00000002", "SIP/101") in new stack
이제는 맞습니다. 별표는 변수를 IP 주소에 매핑하고 있습니까?????
이 문제를 해결하는 임시 솔루션:
어떤 이유로 IP 주소가 다른 다른 장소에 전화기를 놓으면 이런 일이 발생하지 않습니다. 이 문제는 두 전화기가 모두 동일한 네트워크에 있고 동일한 공용 IP 주소를 갖는 경우에만 발생합니다. NAT가 다른 내부 포트를 할당하기 때문에 이것은 나에게 의미가 없습니다.
보안(tls)을 제거하고 udp 또는 tcp를 전송 방법으로 사용하는 경우. 이 문제는 더 이상 발생하지 않습니다.
답변1
마침내 하루 종일 보낸 후에 해결책을 찾았습니다. 인터넷에서 구성을 복사하면 이런 일이 발생합니다!
어쨌든 문제는 내 sip.conf에 내가 가지고 있다는 것입니다.
insecure=port,invite
insecure=port에서 Google 검색을 수행하면 다음과 같은 결과가 나옵니다.
안전하지 않음=포트 ; 포트 번호가 일치하지 않고 IP 주소로 피어 일치 허용
이는 포트가 무시되는 이유를 설명합니다. 그래서 해결책은 sip.conf를 두 가지 변경하는 것이었습니다.
insecure=port,invite
로 변경insecure=invite
type=peer
로 변경type=friend