별표는 sip.conf에서 잘못된 변수를 사용합니다.

별표는 sip.conf에서 잘못된 변수를 사용합니다.

별표를 사용하여 보안 호출을 하기 위해 이 튜토리얼을 완료했습니다.

보안 통화 튜토리얼 | 별표 프로젝트 위키

Ubuntu 버전 16(debian)에서 별표 버전 13.19.2를 실행하고 있는데 TLS 및 SRTP를 추가하자마자 문제가 발생했습니다.

별표를 설치하려는 경우에만 이 내용을 읽으십시오!보안 통화를 하기 위해 TLS 및 SRTP 지원과 함께 별표를 설치하려는 경우에 대비해 참고할 사항입니다.실제 질문은 맨 밑에 있어요!


  1. 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
  1. 키(인증서)를 생성합니다. 인증 기관에서 구매할 수도 있습니다.

    # 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

  2. 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-00000097102

별표 서비스를 다시 시작하고 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 주소에 매핑하고 있습니까?????


이 문제를 해결하는 임시 솔루션:

  1. 어떤 이유로 IP 주소가 다른 다른 장소에 전화기를 놓으면 이런 일이 발생하지 않습니다. 이 문제는 두 전화기가 모두 동일한 네트워크에 있고 동일한 공용 IP 주소를 갖는 경우에만 발생합니다. NAT가 다른 내부 포트를 할당하기 때문에 이것은 나에게 의미가 없습니다.

  2. 보안(tls)을 제거하고 udp 또는 tcp를 전송 방법으로 사용하는 경우. 이 문제는 더 이상 발생하지 않습니다.

답변1

마침내 하루 종일 보낸 후에 해결책을 찾았습니다. 인터넷에서 구성을 복사하면 이런 일이 발생합니다!

어쨌든 문제는 내 sip.conf에 내가 가지고 있다는 것입니다.

insecure=port,invite

insecure=port에서 Google 검색을 수행하면 다음과 같은 결과가 나옵니다.

안전하지 않음=포트 ; 포트 번호가 일치하지 않고 IP 주소로 피어 일치 허용

이는 포트가 무시되는 이유를 설명합니다. 그래서 해결책은 sip.conf를 두 가지 변경하는 것이었습니다.

  1. insecure=port,invite로 변경insecure=invite

  2. type=peer로 변경type=friend

관련 정보