2012-10-03 5 views
4

여러 개의 IP를 수신하는 OpenSIPS 서버가 있습니다. 전화를 다음 지점으로 되돌려 보내는 경우 원래 신호가 착신 된 IP에서 모든 신호와 미디어가 전송되도록하고 싶습니다 (발신자와 수신자가 서로의 IP 주소를 알지 못하게하고 싶습니다).OpenSIPS/Kamailio/OpenSER로 RTP 프록 싱

나는 RTPProxy와 같은 것을 위해 무엇이 필요한지 믿습니다.

내 질문에 IP 주소 하나당 하나의 RTPProxy 서버가 필요합니까? 아니면 단일 서버를 통해 여러 IP를 라우팅 할 수 있습니까? 더 나은 해결책이 있습니까?

나는 이것을 직접 시도 할 것이지만, RTPProxy 서버가 올바르게 실행되도록 고심하고있다. 나는 내가 시간을 낭비하고 있는지 아는 사람이 있는지 미리 확인했다.

[업데이트]

는 관심있는 사람들을위한, 이것은 내가 내가 최종 솔루션이 실행하려는 모르겠어요 비록이 작업했던 방식이다. 더 많은 테스트가 필요합니다. 토폴로지 숨김 및 RTP 프록 싱을 사용하는 2 개의 IP의 경우. 아래 답변과 함께, 나는 그것이 누군가를 돕기를 바랍니다.

로드 rtpproxy 프로세스 -

rtpproxy -l _your_public_ip_1_ -s udp:localhost:7722 
rtpproxy -l _your_public_ip_2_ -s udp:localhost:7723 

그 다음 kamailio.cfg 파일 개조 -

loadmodule "/usr/local/lib64/kamailio/modules/topoh.so" 
modparam("topoh", "mask_key", "Your_key_here") 
modparam("topoh", "mask_ip", "10.0.0.1") 

다음 비트는 RTP 프록시 두 그룹 생성 - 1 & 2 -

#!ifdef WITH_NAT 
    # ----- rtpproxy params ----- 
    modparam("rtpproxy", "rtpproxy_sock", "1 == udp:127.0.0.1:7722") 
    modparam("rtpproxy", "rtpproxy_sock", "2 == udp:127.0.0.1:7723") 

표준 (선적 된) 구성의 NAT 섹션에서 다음 중 어느 것을 선택합니까? 그룹은 인바운드 콜이 착신 한 IP를 기반으로 프록시에서 사용할 그룹입니다. rtp_proxy_manage는 force_ 및 unforce_ 명령의 매우 상위 버전입니다. 기본적으로는 그냥 화재와 당신을 위해 모든 것을 않습니다 - 당신이 RTPProxy를 사용하는 경우 IP 주소 당 하나 개의 RTPProxy 서버를 필요

route[NATMANAGE] { 
    #!ifdef WITH_NAT 
     .... 
     if($Ri=="X.X.X.1") 
      set_rtp_proxy_set("1"); 

     if($Ri=="X.X.X.2") 
      set_rtp_proxy_set("2"); 

     rtpproxy_manage("",$Ri); 

답변

7

.

# /usr/sbin/rtpproxy -l 10.10.10.10 -s unix:/var/run/rtpproxy/rtpproxy1.sock -u rtpproxy rtpproxy -p /var/run/rtpproxy/rtpproxy1.pid & 
# /usr/sbin/rtpproxy -l 10.10.10.11 -s unix:/var/run/rtpproxy/rtpproxy2.sock -u rtpproxy rtpproxy -p /var/run/rtpproxy/rtpproxy2.pid & 

당신은 독립적 인 opensips/openser/kamailio 인스턴스와 그 일치해야합니다 : 당신은 '-l'매개 변수를 수신 할 IP를 지정할 수 있습니다

listen=udp:10.10.10.10:5060 
... 
loadmodule "rtpproxy.so" 

modparam("rtpproxy", "rtpproxy_sock", "unix:/var/run/rtpproxy/rtpproxy1.sock") 

... 
unforce_rtp_proxy(); 
... 
force_rtp_proxy(); 

listen=udp:10.10.10.11:5060 
... 
loadmodule "rtpproxy.so" 

modparam("rtpproxy", "rtpproxy_sock", "unix:/var/run/rtpproxy/rtpproxy2.sock") 

... 
unforce_rtp_proxy(); 
... 
force_rtp_proxy(); 

C에 대한 경험이있는 경우 여러 rtpproxy 인스턴스를 인식하도록 rtpproxy 모듈을 수정할 수 있습니다.

또한 사용자 공간을 통해 RTP를 중계한다고 생각하면 MediaProxy가 대안입니다.

openser/opensips/kamailio는 RTP 트래픽을 중계하는 사용자 공간 데몬이 아니라 JSON 웹 게시물을 통해 Python MediaDispatcher에게 사용 가능한 MediaRelay에 연락하여 Linux 커널 수준 conntrack 트래픽 전달 항목을 설정하도록 지시합니다.

이 접근법의 단점은 현재 파이썬 미디어 디스패처와 미디어 릴레이가/etc/mediaproxy/config를 읽는다는 것입니다.ini - 파이썬을 해킹하여 구성 매개 변수를 가져 와서 각 인스턴스에 대해 올바른 리디렉션을 설정하는 config.ini 파일을 여러 개 만들 수 있습니다.

/etc/mediaproxy/config.ini 같이 보일 수 있습니다 예 : 설정 파일

[Relay] 
dispatchers = 10.10.10.10:25060 

[Dispatcher] 
socket_path = /var/run/mediaproxy/dispatcher.sock 
listen = 10.10.10.10:25060 
listen_management = 10.10.10.10:25061 

[OpenSIPS] 
socket_path = '/var/run/opensips/socket' 

그리고 당신의 opensips으로는 : 당신이 rtpproxy 더 나은 행운을 가질 수있다처럼

modparam("mi_datagram", "socket_name", "/var/run/opensips/socket") 

... 

loadmodule "mediaproxy.so" 

# ----- mediaproxy params ----- 
modparam("mediaproxy", "mediaproxy_socket", "/var/run/mediaproxy/dispatcher.sock") 
#modparam("mediaproxy", "disable", 1) 
#modparam("mediaproxy", "natping_interval", 60) 

... 
engage_media_proxy(); 
... 
end_media_session(); 

소리가 난다 당신의 특별한 필요.

+1

감사합니다. 나는 이것을 대답으로 받아들이고있다. 몇 개의 IP를 실행하려면 여러 개의 프록시가 필요할 것이므로이 방법을 사용하여 Kamailio/OpenSIPS의 성능을 향상시킬 수 있을지 확신하지는 않습니다. Freeswitch의 버전을 사용하지 않을 것입니다. 프록시 미디어 모드. 이 모든 것은 물론 테스트가 필요하며 두 방법 모두를 테스트 할 것입니다. 자세한 답변을 주셔서 감사합니다. – beigerac

+1

또한 OpenSIPS와 Kamailio를 시범 적으로 테스트 중이라는 질문에 OpenSIPS를 구체적으로 언급했음을 주목합니다. 동일한 코드 기반에 속해 있음에도 불구하고 모듈에는 다른 모듈이 있습니다. 누락에 대한 사과. – beigerac

+0

전혀 문제가 없습니다. 위의 rtp_proxy 예제는 kamailio 설치에서 가져온 것입니다. 위의 mediaproxy 예제는 OpenSIPS 설치에서 가져온 것입니다 (기존의 이유로 두 가지를 혼합하여 실행합니다). – IanBlenke