Re: Replace ip address of source

Antonio via sr-users <[email protected]>
Newsgroups gmane.comp.voip.ser
Message-ID <CAFgS45vtPNBisSSxzOzj=wSq1D4FM=0oqA-h5SzEjJnu0HaqpA@mail.gmail.com>
Can I ask here if  this subst function reliable enough
To use for replacing ip to domain
And leave everything else as it is in Contact header ?


*Antony*
[email protected]



ср, 4 черв. 2025 р. о 11:18 Federico Cabiddu via sr-users <
[email protected]> пише:

> Hi,
> have a look at the uac module and its uac_replace_to function (
> https://kamailio.org/docs/modules/6.0.x/modules/uac.html#uac.f.uac_replace_to_uri
> ).
>
> Regards,
>
> Federico
>
> On Wed, Jun 4, 2025 at 10:04 AM disa_369--- via sr-users <
> [email protected]> wrote:
>
>> Hello to everyone.
>> I deployed Kamailio on Debian system. Install was successfull.
>> I have the task to use Kamailio as proxy between Avaya PBX and
>> Videoconference System.
>> Outgoing calls only from
>> IPPhone ----- Avaya PBX  ---sip----> Kamailio -----sip----> Video
>> System-IVR
>> IVR number is 3000.
>> Avaya Prefix for routing to Kamailio is 1234.
>> When we dial number 12343000 the call goes to Video system with Header
>> "TO" 12343000@ip_of_PBXAvaya and call drops.
>> How to replace ip-address of Avaya to ip-address of Video_System? What to
>> add in kamailio.cfg?
>>
>>
>> ip video_system - *.*.60.3
>> ip avaya *.*.20.10
>>
>> My route config
>>
>>
>> ####### Routing Logic ########
>> /* Main SIP request routing logic
>>  * - processing of any incoming SIP request starts with this route
>>  * - note: this is the same as route { ... } */
>> request_route {
>>         # per request initial checks
>>         route(REQINIT);
>>
>>         # NAT detection
>>         route(NATDETECT);
>>
>>         # CANCEL processing
>>         if (is_method("CANCEL")) {
>>                 if (t_check_trans()) {
>>                         route(RELAY);
>>                 }
>>                 exit;
>>         }
>>
>>         # handle retransmissions
>>         if (!is_method("ACK")) {
>>                 if(t_precheck_trans()) {
>>                         t_check_trans();
>>                         exit;
>>                 }
>>                 t_check_trans();
>>         }
>>
>>         # handle requests within SIP dialogs
>>         route(WITHINDLG);
>>
>>
>>         ### only initial requests (no To tag)
>>
>>         # authentication
>>         route(AUTH);
>>
>>         # record routing for dialog forming requests (in case they are
>> routed)
>>         # - remove preloaded route headers
>>         remove_hf("Route");
>>         if (is_method("INVITE|SUBSCRIBE")) {
>>                 record_route();
>>         }
>>
>>         # account only INVITEs
>>         if (is_method("INVITE")) {
>>                 setflag(FLT_ACC); # do accounting
>>         }
>>
>> if ($rU==$null) {
>>  sl_send_reply("484", "Address Incomplete");
>>  exit;
>>
>>  }
>>
>> $du = "sip:*.*.60.3:5060";
>> route(RELAY);
>> exit;
>>
>> }
>>
>> # Wrapper for relaying requests
>> route[RELAY] {
>>
>>         # enable additional event routes for forwarded requests
>>         # - serial forking, RTP relaying handling, a.s.o.
>>         if (is_method("INVITE|BYE|SUBSCRIBE|UPDATE")) {
>>                 if(!t_is_set("branch_route"))
>> t_on_branch("MANAGE_BRANCH");
>>         }
>>         if (is_method("INVITE|SUBSCRIBE|UPDATE")) {
>>                 if(!t_is_set("onreply_route")) t_on_reply("MANAGE_REPLY");
>>         }
>>         if (is_method("INVITE")) {
>>                 if(!t_is_set("failure_route"))
>> t_on_failure("MANAGE_FAILURE");
>>         }
>>
>>         if (!t_relay()) {
>>                 sl_reply_error();
>>         }
>>         exit;
>> }
>>
>> # Per SIP request initial checks
>> route[REQINIT] {
>>         # no connect for sending replies
>>         set_reply_no_connect();
>>         # enforce symmetric signaling
>>         # - send back replies to the source address of request
>>         force_rport();
>>
>> #!ifdef WITH_ANTIFLOOD
>>         # flood detection from same IP and traffic ban for a while
>>         # be sure you exclude checking trusted peers, such as pstn
>> gateways
>>         # - local host excluded (e.g., loop to self)
>>         if(src_ip!=myself) {
>>                 if($sht(ipban=>$si)!=$null) {
>>                         # ip is already blocked
>>                         xdbg("request from blocked IP - $rm from $fu
>> (IP:$si:$sp)\n");
>>                         exit;
>>                 }
>>                 if (!pike_check_req()) {
>>                         xlog("L_ALERT","ALERT: pike blocking $rm from $fu
>> (IP:$si:$sp)\n");
>>                         $sht(ipban=>$si) = 1;
>>                         exit;
>>                 }
>>         }
>> #!endif
>>         if($ua =~
>> "friendly|scanner|sipcli|sipvicious|VaxSIPUserAgent|pplsip") {
>>                 # silent drop for scanners - uncomment next line if want
>> to reply
>>                 # sl_send_reply("200", "OK");
>>                 exit;
>>         }
>>
>>         if (!mf_process_maxfwd_header("10")) {
>>                 sl_send_reply("483","Too Many Hops");
>>                 exit;
>>         }
>>
>>         if(is_method("OPTIONS") && uri==myself && $rU==$null) {
>>                 sl_send_reply("200","Keepalive");
>>                 exit;
>>         }
>>
>>         if(!sanity_check("17895", "7")) {
>>                 xlog("Malformed SIP request from $si:$sp\n");
>>                 exit;
>>         }
>> }
>>
>> # Handle requests within SIP dialogs
>> route[WITHINDLG] {
>>         if (!has_totag()) return;
>>
>>         # sequential request withing a dialog should
>>         # take the path determined by record-routing
>>         if (loose_route()) {
>>                 route(DLGURI);
>>                 if (is_method("BYE")) {
>>                         setflag(FLT_ACC); # do accounting ...
>>                         setflag(FLT_ACCFAILED); # ... even if the
>> transaction fails
>>                 } else if ( is_method("ACK") ) {
>>                         # ACK is forwarded statelessly
>>                         route(NATMANAGE);
>>                 } else if ( is_method("NOTIFY") ) {
>>                         # Add Record-Route for in-dialog NOTIFY as per
>> RFC 6665.
>>                         record_route();
>>                 }
>>                 route(RELAY);
>>                 exit;
>>         }
>>
>>         if (is_method("SUBSCRIBE") && uri == myself) {
>>                 # in-dialog subscribe requests
>>                 route(PRESENCE);
>>                 exit;
>>         }
>>         if ( is_method("ACK") ) {
>>                 if ( t_check_trans() ) {
>>                         # no loose-route, but stateful ACK;
>>                         # must be an ACK after a 487
>>                         # or e.g. 404 from upstream server
>>                         route(RELAY);
>>                         exit;
>>                 } else {
>>                         # ACK without matching transaction ... ignore and
>> discard
>>                         exit;
>>                 }
>>         }
>>         sl_send_reply("404","Not here");
>>         exit;
>> }
>>
>> # Handle SIP registrations
>> route[REGISTRAR] {
>>         if (!is_method("REGISTER")) return;
>>
>>         if(isflagset(FLT_NATS)) {
>>                 setbflag(FLB_NATB);
>> #!ifdef WITH_NATSIPPING
>>                 # do SIP NAT pinging
>>                 setbflag(FLB_NATSIPPING);
>> #!endif
>>         }
>>         if (!save("location")) {
>>                 sl_reply_error();
>>         }
>>         exit;
>> }
>>
>> # User location service
>> route[LOCATION] {
>>
>> #!ifdef WITH_SPEEDDIAL
>>         # search for short dialing - 2-digit extension
>>         if($rU=~"^[0-9][0-9]$") {
>>                 if(sd_lookup("speed_dial")) {
>>                         route(SIPOUT);
>>                 }
>>         }
>> #!endif
>>
>> #!ifdef WITH_ALIASDB
>>         # search in DB-based aliases
>>         if(alias_db_lookup("dbaliases")) {
>>                 route(SIPOUT);
>>         }
>> #!endif
>>
>>         $avp(oexten) = $rU;
>>         if (!lookup("location")) {
>>                 $var(rc) = $rc;
>>                 route(TOVOICEMAIL);
>>                 t_newtran();
>>                 switch ($var(rc)) {
>>                         case -1:
>>                         case -3:
>>                                 send_reply("404", "Not Found");
>>                                 exit;
>>                         case -2:
>>                                 send_reply("405", "Method Not Allowed");
>>                                 exit;
>>                 }
>>         }
>>
>>         # when routing via usrloc, log the missed calls also
>>         if (is_method("INVITE")) {
>>                 setflag(FLT_ACCMISSED);
>>         }
>>
>>         route(RELAY);
>>         exit;
>> }
>>
>> # Presence server processing
>> route[PRESENCE] {
>>         if(!is_method("PUBLISH|SUBSCRIBE")) return;
>>
>>         if(is_method("SUBSCRIBE") && $hdr(Event)=="message-summary") {
>>                 route(TOVOICEMAIL);
>>                 # returns here if no voicemail server is configured
>>                 sl_send_reply("404", "No voicemail service");
>>                 exit;
>>         }
>>
>> #!ifdef WITH_PRESENCE
>> #!ifdef WITH_MSGREBUILD
>>         # apply changes in case the request headers or body were modified
>>         msg_apply_changes();
>> #!endif
>>         if (!t_newtran()) {
>>                 sl_reply_error();
>>                 exit;
>>         }
>>
>>         if(is_method("PUBLISH")) {
>>                 handle_publish();
>>                 t_release();
>>         } else if(is_method("SUBSCRIBE")) {
>>                 handle_subscribe();
>>                 t_release();
>>         }
>>         exit;
>> #!endif
>>
>>         # if presence enabled, this part will not be executed
>>         if (is_method("PUBLISH") || $rU==$null) {
>>                 sl_send_reply("404", "Not here");
>>                 exit;
>>         }
>>         return;
>> }
>>
>> # IP authorization and user authentication
>> route[AUTH] {
>> #!ifdef WITH_AUTH
>>
>> #!ifdef WITH_IPAUTH
>>         if((!is_method("REGISTER")) && allow_source_address()) {
>>                 # source IP allowed
>>                 return;
>>         }
>> #!endif
>>
>>         if (is_method("REGISTER") || from_uri==myself) {
>>                 # authenticate requests
>>                 if (!auth_check("$fd", "subscriber", "1")) {
>>                         auth_challenge("$fd", "0");
>>                         exit;
>>                 }
>>                 # user authenticated - remove auth header
>>                 if(!is_method("REGISTER|PUBLISH"))
>>                         consume_credentials();
>>         }
>>         # if caller is not local subscriber, then check if it calls
>>         # a local destination, otherwise deny, not an open relay here
>>         if (from_uri!=myself && uri!=myself) {
>>                 sl_send_reply("403","Not relaying");
>>                 exit;
>>         }
>>
>> #!else
>>
>>         # authentication not enabled - do not relay at all to foreign
>> networks
>>         if(uri!=myself) {
>>                 sl_send_reply("403","Not relaying");
>>                 exit;
>>         }
>>
>> #!endif
>>         return;
>> }
>>
>> # Caller NAT detection
>> route[NATDETECT] {
>> #!ifdef WITH_NAT
>>         if (nat_uac_test("19")) {
>>                 if (is_method("REGISTER")) {
>>                         fix_nated_register();
>>                 } else {
>>                         if(is_first_hop()) {
>>                                 set_contact_alias();
>>                         }
>>                 }
>>                 setflag(FLT_NATS);
>>         }
>> #!endif
>>         return;
>> }
>>
>> # RTPProxy control and signaling updates for NAT traversal
>> route[NATMANAGE] {
>> #!ifdef WITH_NAT
>>         if (is_request()) {
>>                 if(has_totag()) {
>>                         if(check_route_param("nat=yes")) {
>>                                 setbflag(FLB_NATB);
>>                         }
>>                 }
>>         }
>>         if (!(isflagset(FLT_NATS) || isbflagset(FLB_NATB))) return;
>>
>> #!ifdef WITH_RTPENGINE
>>         if(nat_uac_test("8")) {
>>                 rtpengine_manage("SIP-source-address replace-origin
>> replace-session-connection");
>>         } else {
>>                 rtpengine_manage("replace-origin
>> replace-session-connection");
>>         }
>> #!else
>>         if(nat_uac_test("8")) {
>>                 rtpproxy_manage("co");
>>         } else {
>>                 rtpproxy_manage("cor");
>>         }
>> #!endif
>>
>>         if (is_request()) {
>>                 if (!has_totag()) {
>>                         if(t_is_branch_route()) {
>>                                 add_rr_param(";nat=yes");
>>                         }
>>                 }
>>         }
>>         if (is_reply()) {
>>                 if(isbflagset(FLB_NATB)) {
>>                         if(is_first_hop())
>>                                 set_contact_alias();
>>                 }
>>         }
>>
>>         if(isbflagset(FLB_NATB)) {
>>                 # no connect message in a dialog involving NAT traversal
>>                 if (is_request()) {
>>                         if(has_totag()) {
>>                                 set_forward_no_connect();
>>                         }
>>                 }
>>         }
>> #!endif
>>         return;
>> }
>>
>> # URI update for dialog requests
>> route[DLGURI] {
>> #!ifdef WITH_NAT
>>         if(!isdsturiset()) {
>>                 handle_ruri_alias();
>>         }
>> #!endif
>>         return;
>> }
>>
>> # Routing to foreign domains
>> route[SIPOUT] {
>>         if (uri==myself) return;
>>
>>         append_hf("P-Hint: outbound\r\n");
>>         route(RELAY);
>>         exit;
>> }
>>
>> # PSTN GW routing
>> route[PSTN] {
>> #!ifdef WITH_PSTN
>>         # check if PSTN GW IP is defined
>>         if (strempty($sel(cfg_get.pstn.gw_ip))) {
>>                 xlog("SCRIPT: PSTN routing enabled but pstn.gw_ip not
>> defined\n");
>>                 return;
>>         }
>>
>>         # route to PSTN dialed numbers starting with '+' or '00'
>>         #     (international format)
>>         # - update the condition to match your dialing rules for PSTN
>> routing
>>         if(!($rU=~"^(\+|00)[1-9][0-9]{3,20}$")) return;
>>
>>         # only local users allowed to call
>>         if(from_uri!=myself) {
>>                 sl_send_reply("403", "Not Allowed");
>>                 exit;
>>         }
>>
>>         # normalize target number for pstn gateway
>>         # - convert leading 00 to +
>>         if (starts_with("$rU", "00")) {
>>                 strip(2);
>>                 prefix("+");
>>         }
>>
>>         if (strempty($sel(cfg_get.pstn.gw_port))) {
>>                 $ru = "sip:" + $rU + "@" + $sel(cfg_get.pstn.gw_ip);
>>         } else {
>>                 $ru = "sip:" + $rU + "@" + $sel(cfg_get.pstn.gw_ip) + ":"
>>                                         + $sel(cfg_get.pstn.gw_port);
>>         }
>>
>>         route(RELAY);
>>         exit;
>> #!endif
>>
>>         return;
>> }
>>
>> # JSONRPC over HTTP(S) routing
>> #!ifdef WITH_JSONRPC
>> event_route[xhttp:request] {
>>         set_reply_close();
>>         set_reply_no_connect();
>>         if(src_ip!=127.0.0.1) {
>>                 xhttp_reply("403", "Forbidden", "text/html",
>>                                 "<html><body>Not allowed from
>> $si</body></html>");
>>                 exit;
>>         }
>>         if ($hu =~ "^/RPC") {
>>                 jsonrpc_dispatch();
>>                 exit;
>>         }
>>
>>         xhttp_reply("200", "OK", "text/html",
>>                                 "<html><body>Wrong URL
>> $hu</body></html>");
>>     exit;
>> }
>> #!endif
>>
>> # Routing to voicemail server
>> route[TOVOICEMAIL] {
>> #!ifdef WITH_VOICEMAIL
>>         if(!is_method("INVITE|SUBSCRIBE")) return;
>>
>>         # check if VoiceMail server IP is defined
>>         if (strempty($sel(cfg_get.voicemail.srv_ip))) {
>>                 xlog("SCRIPT: VoiceMail routing enabled but IP not
>> defined\n");
>>                 return;
>>         }
>>         if(is_method("INVITE")) {
>>                 if($avp(oexten)==$null) return;
>>
>>                 $ru = "sip:" + $avp(oexten) + "@" +
>> $sel(cfg_get.voicemail.srv_ip)
>>                                 + ":" + $sel(cfg_get.voicemail.srv_port);
>>         } else {
>>                 if($rU==$null) return;
>>
>>                 $ru = "sip:" + $rU + "@" + $sel(cfg_get.voicemail.srv_ip)
>>                                 + ":" + $sel(cfg_get.voicemail.srv_port);
>>         }
>>         route(RELAY);
>>         exit;
>> #!endif
>>
>>         return;
>> }
>>
>> # Manage outgoing branches
>> branch_route[MANAGE_BRANCH] {
>>         xdbg("new branch [$T_branch_idx] to $ru\n");
>>         route(NATMANAGE);
>>         return;
>> }
>>
>> # Manage incoming replies
>> reply_route {
>>         if(!sanity_check("17604", "6")) {
>>                 xlog("Malformed SIP response from $si:$sp\n");
>>                 drop;
>>         }
>>         return;
>> }
>>
>> # Manage incoming replies in transaction context
>> onreply_route[MANAGE_REPLY] {
>>         xdbg("incoming reply\n");
>>         if(status=~"[12][0-9][0-9]") {
>>                 route(NATMANAGE);
>>         }
>>         return;
>> }
>>
>> # Manage failure routing cases
>> failure_route[MANAGE_FAILURE] {
>>         route(NATMANAGE);
>>
>>         if (t_is_canceled()) exit;
>>
>> #!ifdef WITH_BLOCK3XX
>>         # block call redirect based on 3xx replies.
>>         if (t_check_status("3[0-9][0-9]")) {
>>                 t_reply("404","Not found");
>>                 exit;
>>         }
>> #!endif
>>
>> #!ifdef WITH_BLOCK401407
>>         # block call redirect based on 401, 407 replies.
>>         if (t_check_status("401|407")) {
>>                 t_reply("404","Not found");
>>                 exit;
>>         }
>> #!endif
>>
>> #!ifdef WITH_VOICEMAIL
>>         # serial forking
>>         # - route to voicemail on busy or no answer (timeout)
>>         if (t_check_status("486|408")) {
>>                 $du = $null;
>>                 route(TOVOICEMAIL);
>>                 exit;
>>         }
>> #!endif
>>         return;
>> __________________________________________________________
>> Kamailio - Users Mailing List - Non Commercial Discussions --
>> [email protected]
>> To unsubscribe send an email to [email protected]
>> Important: keep the mailing list in the recipients, do not reply only to
>> the sender!
>>
> __________________________________________________________
> Kamailio - Users Mailing List - Non Commercial Discussions --
> [email protected]
> To unsubscribe send an email to [email protected]
> Important: keep the mailing list in the recipients, do not reply only to
> the sender!
>

__________________________________________________________
Kamailio - Users Mailing List - Non Commercial Discussions -- [email protected]
To unsubscribe send an email to [email protected]
Important: keep the mailing list in the recipients, do not reply only to the sender!
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.