diff --git a/kamailio/default-listeners.cfg b/kamailio/default-listeners.cfg new file mode 100644 index 0000000..3e0f223 --- /dev/null +++ b/kamailio/default-listeners.cfg @@ -0,0 +1,34 @@ + +## YOU SHOULD NOT HAVE TO CHANGE THESE! +## This will bind the default SIP listeners +## as determined above. The tls-role and +## websocket-role will use the appropriate +## definitions if enabled. These are here +## for those with complex layouts who know +## what they are doing :) + +#!ifdef WITH_ADVERTISE_LISTENER +listen=SIP_UDP_ADVERTISED_LISTENER +listen=SIP_TCP_ADVERTISED_LISTENER +listen=ALG_UDP_ADVERTISED_LISTENER +listen=ALG_TCP_ADVERTISED_LISTENER +#!endif + +#!ifdef WITH_EXTERNAL_LISTENER +listen=SIP_UDP_EXTERNAL_LISTENER +listen=SIP_TCP_EXTERNAL_LISTENER +listen=ALG_UDP_EXTERNAL_LISTENER +listen=ALG_TCP_EXTERNAL_LISTENER +#!endif + +#!ifndef WITHOUT_DEFAULT_LISTENER +listen=SIP_UDP_LISTENER +listen=SIP_TCP_LISTENER +listen=ALG_UDP_LISTENER +listen=ALG_TCP_LISTENER +#!endif + +#!ifdef WITH_INTERNAL_LISTENER +listen=PORT_PROTO_INTERNAL_LISTENER +#!endif + diff --git a/kamailio/default.cfg b/kamailio/default.cfg index f1370c3..0459884 100644 --- a/kamailio/default.cfg +++ b/kamailio/default.cfg @@ -725,6 +725,10 @@ route[EXTERNAL_TO_INTERNAL_RELAY] t_set_fr(0, $sel(cfg_get.kazoo.to_internal_no_response_timer)); + #!ifdef WITH_INTERNAL_LISTENER + force_send_socket(PORT_PROTO_INTERNAL_LISTENER); + #!endif + t_relay(); } diff --git a/kamailio/defs.cfg b/kamailio/defs.cfg index 003951b..852c311 100644 --- a/kamailio/defs.cfg +++ b/kamailio/defs.cfg @@ -25,6 +25,12 @@ kazoo.to_external_no_response_timer = INTERNAL_TO_EXTERNAL_NO_RESPONSE_TIMER des #!endif #!endif +#!ifndef MY_PUBLIC_IP_ADDRESS +#!ifdef MY_PUBLIC_IP +#!substdef "!MY_PUBLIC_IP_ADDRESS!$def(MY_PUBLIC_IP)!g" +#!endif +#!endif + #!ifndef WEBSOCKET_NO_ORIGIN_RESTRICTION #!ifndef MY_WEBSOCKET_DOMAIN #!substdef "!MY_WEBSOCKET_DOMAIN!$HN(d)!g" diff --git a/kamailio/kamailio.cfg b/kamailio/kamailio.cfg index 4cc4abc..dea3258 100644 --- a/kamailio/kamailio.cfg +++ b/kamailio/kamailio.cfg @@ -39,13 +39,26 @@ loadmodule "ipops.so" loadmodule "pv.so" loadmodule "textops.so" - ####### Local Configuration ######## include_file "local.cfg" +####### Custom defs ######## +import_file "custom-defs.cfg" + ####### defaults not configured in local ######## include_file "defs.cfg" +####### listeners defs ######## +include_file "listener-defs.cfg" + +####### custom listeners ######## +import_file "custom-listeners.cfg" + +####### default listeners ######## +#!ifndef SKIP_DEFAULT_LISTENERS +include_file "default-listeners.cfg" +#!endif + ####### Default Configuration ###### include_file "default.cfg" diff --git a/kamailio/listener-defs.cfg b/kamailio/listener-defs.cfg new file mode 100644 index 0000000..73d7889 --- /dev/null +++ b/kamailio/listener-defs.cfg @@ -0,0 +1,72 @@ +## YOU SHOULD NOT HAVE TO CHANGE THESE! +## By setting MY_IP_ADDRESS above these will resolve +## to the proper bindings. These are here +## for those with complex layouts who know +## what they are doing :) + +#!trydef SIP_PORT 5060 +#!trydef SIP_S_PORT 5061 +#!trydef ALG_PORT 7000 +#!trydef ALG_S_PORT 7001 +#!trydef WS_PORT 5064 +#!trydef WSS_PORT 5065 +#!trydef INTERNAL_PORT 5070 +#!trydef INTERNAL_PROTO udp +#!trydef SIP_PUBLIC_PORT 5060 +#!trydef SIP_S_PUBLIC_PORT 5061 +#!trydef ALG_PUBLIC_PORT 7000 +#!trydef ALG_S_PUBLIC_PORT 7001 + +#!substdef "!UDP_SIP!udp:MY_IP_ADDRESS:$def(SIP_PORT)!g" +#!substdef "!TCP_SIP!tcp:MY_IP_ADDRESS:$def(SIP_PORT)!g" +#!substdef "!TLS_SIP!tls:MY_IP_ADDRESS:$def(SIP_S_PORT)!g" + +#!substdef "!UDP_ALG!udp:MY_IP_ADDRESS:$def(ALG_PORT)!g" +#!substdef "!TCP_ALG!tcp:MY_IP_ADDRESS:$def(ALG_PORT)!g" +#!substdef "!TLS_ALG!tls:MY_IP_ADDRESS:$def(ALG_S_PORT)!g" + +#!substdef "!TCP_WS!tcp:MY_IP_ADDRESS:$def(WS_PORT)!g" +#!substdef "!TLS_WSS!tls:MY_IP_ADDRESS:$def(WSS_PORT)!g" + +#!substdef "!PROTO_PORT_INTERNAL!$def(INTERNAL_PROTO):MY_IP_ADDRESS:$def(INTERNAL_PORT)!g" + +#!substdef "!UDP_ADVERTISED_SIP!udp:MY_IP_ADDRESS:$def(SIP_PORT) advertise $def(MY_PUBLIC_IP):$def(SIP_PUBLIC_PORT)!g" +#!substdef "!TCP_ADVERTISED_SIP!tcp:MY_IP_ADDRESS:$def(SIP_PORT) advertise $def(MY_PUBLIC_IP):$def(SIP_PUBLIC_PORT)!g" +#!substdef "!TLS_ADVERTISED_SIP!tcp:MY_IP_ADDRESS:$def(SIP_S_PORT) advertise $def(MY_PUBLIC_IP):$def(SIP_S_PUBLIC_PORT)!g" +#!substdef "!UDP_ADVERTISED_ALG!udp:MY_IP_ADDRESS:$def(ALG_PORT) advertise $def(MY_PUBLIC_IP):$def(ALG_PUBLIC_PORT)!g" +#!substdef "!TCP_ADVERTISED_ALG!tcp:MY_IP_ADDRESS:$def(ALG_PORT) advertise $def(MY_PUBLIC_IP):$def(ALG_PUBLIC_PORT)!g" +#!substdef "!TLS_ADVERTISED_ALG!tcp:MY_IP_ADDRESS:$def(ALG_S_PORT) advertise $def(MY_PUBLIC_IP):$def(ALG_S_PUBLIC_PORT)!g" + +#!substdef "!UDP_EXTERNAL_SIP!udp:MY_IP_ADDRESS:$def(SIP_PUBLIC_PORT) advertise $def(MY_PUBLIC_IP):$def(SIP_PUBLIC_PORT)!g" +#!substdef "!TCP_EXTERNAL_SIP!tcp:MY_IP_ADDRESS:$def(SIP_PUBLIC_PORT) advertise $def(MY_PUBLIC_IP):$def(SIP_PUBLIC_PORT)!g" +#!substdef "!TLS_EXTERNAL_SIP!tcp:MY_IP_ADDRESS:$def(SIP_S_PUBLIC_PORT) advertise $def(MY_PUBLIC_IP):$def(SIP_S_PUBLIC_PORT)!g" +#!substdef "!UDP_EXTERNAL_ALG!udp:MY_IP_ADDRESS:$def(ALG_PUBLIC_PORT) advertise $def(MY_PUBLIC_IP):$def(ALG_PUBLIC_PORT)!g" +#!substdef "!TCP_EXTERNAL_ALG!tcp:MY_IP_ADDRESS:$def(ALG_PUBLIC_PORT) advertise $def(MY_PUBLIC_IP):$def(ALG_PUBLIC_PORT)!g" +#!substdef "!TLS_EXTERNAL_ALG!tcp:MY_IP_ADDRESS:$def(ALG_S_PUBLIC_PORT) advertise $def(MY_PUBLIC_IP):$def(ALG_S_PUBLIC_PORT)!g" + +#!substdef "!SIP_UDP_LISTENER!UDP_SIP!g" +#!substdef "!SIP_TCP_LISTENER!TCP_SIP!g" +#!substdef "!SIP_TLS_LISTENER!TLS_SIP!g" +#!substdef "!ALG_UDP_LISTENER!UDP_ALG!g" +#!substdef "!ALG_TCP_LISTENER!TCP_ALG!g" +#!substdef "!ALG_TLS_LISTENER!TLS_ALG!g" + +#!substdef "!WS_TCP_LISTENER!TCP_WS!g" +#!substdef "!WSS_TLS_LISTENER!TLS_WSS!g" + +#!substdef "!SIP_UDP_EXTERNAL_LISTENER!UDP_EXTERNAL_SIP!g" +#!substdef "!SIP_TCP_EXTERNAL_LISTENER!TCP_EXTERNAL_SIP!g" +#!substdef "!SIP_TLS_EXTERNAL_LISTENER!TLS_EXTERNAL_SIP!g" +#!substdef "!ALG_UDP_EXTERNAL_LISTENER!UDP_EXTERNAL_ALG!g" +#!substdef "!ALG_TCP_EXTERNAL_LISTENER!TCP_EXTERNAL_ALG!g" +#!substdef "!ALG_TLS_EXTERNAL_LISTENER!TLS_EXTERNAL_ALG!g" + +#!substdef "!SIP_UDP_ADVERTISED_LISTENER!UDP_ADVERTISED_SIP!g" +#!substdef "!SIP_TCP_ADVERTISED_LISTENER!TCP_ADVERTISED_SIP!g" +#!substdef "!SIP_TLS_ADVERTISED_LISTENER!TLS_ADVERTISED_SIP!g" +#!substdef "!ALG_UDP_ADVERTISED_LISTENER!UDP_ADVERTISED_ALG!g" +#!substdef "!ALG_TCP_ADVERTISED_LISTENER!TCP_ADVERTISED_ALG!g" +#!substdef "!ALG_TLS_ADVERTISED_LISTENER!TLS_ADVERTISED_ALG!g" + +#!substdef "!PORT_PROTO_INTERNAL_LISTENER!PROTO_PORT_INTERNAL!g" + diff --git a/kamailio/local.cfg b/kamailio/local.cfg index a7a3882..11ca987 100644 --- a/kamailio/local.cfg +++ b/kamailio/local.cfg @@ -125,33 +125,3 @@ ## then you can mirror INVITE and MESSAGE here # # #!define SIP_TRACE_URI "sip:127.0.0.1:9060" # # #!define HEP_CAPTURE_ID 1 - -include_file "defs.cfg" - -## YOU SHOULD NOT HAVE TO CHANGE THESE! -## By setting MY_IP_ADDRESS above these will resolve -## to the proper bindings. These are here -## for those with complex layouts who know -## what they are doing :) -#!substdef "!UDP_SIP!udp:MY_IP_ADDRESS:5060!g" -#!substdef "!TCP_SIP!tcp:MY_IP_ADDRESS:5060!g" -#!substdef "!TLS_SIP!tls:MY_IP_ADDRESS:5061!g" -#!substdef "!UDP_ALG_SIP!udp:MY_IP_ADDRESS:7000!g" -#!substdef "!TCP_ALG_SIP!tcp:MY_IP_ADDRESS:7000!g" -#!substdef "!TLS_ALG_SIP!tls:MY_IP_ADDRESS:7001!g" -#!substdef "!TCP_WS!tcp:MY_IP_ADDRESS:5064!g" -#!substdef "!UDP_WS_SIP!udp:MY_IP_ADDRESS:5064!g" -#!substdef "!TLS_WSS!tls:MY_IP_ADDRESS:5065!g" -#!substdef "!UDP_WSS_SIP!udp:MY_IP_ADDRESS:5065!g" - -## YOU SHOULD NOT HAVE TO CHANGE THESE! -## This will bind the default SIP listeners -## as determined above. The tls-role and -## websocket-role will use the appropriate -## definitions if enabled. These are here -## for those with complex layouts who know -## what they are doing :) -listen=UDP_SIP -listen=TCP_SIP -listen=UDP_ALG_SIP -listen=TCP_ALG_SIP diff --git a/kamailio/registrar-role.cfg b/kamailio/registrar-role.cfg index a70c8d6..de4523f 100644 --- a/kamailio/registrar-role.cfg +++ b/kamailio/registrar-role.cfg @@ -410,8 +410,16 @@ route[SAVE_LOCATION] if(af==INET6) { $var(AdvIP) = "[" + $RAi + "]"; } + + #!ifdef WITH_INTERNAL_LISTENER + $var(proxy_path) = $_s(sip:MY_IP_ADDRESS:$def(INTERNAL_PORT)); + $var(proto) = $def(INTERNAL_PROTO); + #!else + $var(proxy_path) = $_s(sip:MY_IP_ADDRESS:$var(port)); + $var(proto) = $proto; + #!endif - $var(amqp_payload_request) = $_s({"Event-Category" : "directory", "Event-Name" : "reg_success", "Status" : "$var(Status)", "Event-Timestamp" : $TS, "Expires" : $(var(expires){s.int}), "First-Registration" : $var(new_reg), "Contact" : "$(ct{s.escape.common}{s.replace,\','}{s.replace,$$,})", "Call-ID" : "$ci", "Realm" : "$fd", "Username" : "$fU", "From-User" : "$fU", "From-Host" : "$fd", "To-User" : "$tU", "To-Host" : "$td", "User-Agent" : "$(ua{s.escape.common}{s.replace,\','}{s.replace,$$,})" , "Custom-Channel-Vars" : $xavp(ulattrs=>custom_channel_vars), "Proxy-Path" : "sip:MY_IP_ADDRESS:$var(port)", "Proxy-Protocol" : "$proto", "Proxy-IP" : "$var(AdvIP)", "Proxy-Port" : "$RAp", "Source-IP": "$si", "Source-Port": "$sp" }); + $var(amqp_payload_request) = $_s({"Event-Category" : "directory", "Event-Name" : "reg_success", "Status" : "$var(Status)", "Event-Timestamp" : $TS, "Expires" : $(var(expires){s.int}), "First-Registration" : $var(new_reg), "Contact" : "$(ct{s.escape.common}{s.replace,\','}{s.replace,$$,})", "Call-ID" : "$ci", "Realm" : "$fd", "Username" : "$fU", "From-User" : "$fU", "From-Host" : "$fd", "To-User" : "$tU", "To-Host" : "$td", "User-Agent" : "$(ua{s.escape.common}{s.replace,\','}{s.replace,$$,})" , "Custom-Channel-Vars" : $xavp(ulattrs=>custom_channel_vars), "Proxy-Path" : "$var(proxy_path)", "Proxy-Protocol" : "$var(proto)", "Proxy-IP" : "$var(AdvIP)", "Proxy-Port" : "$RAp", "Source-IP": "$si", "Source-Port": "$sp" }); $var(amqp_routing_key) = "registration.success." + $(fd{kz.encode}) + "." + $(fU{kz.encode}); kazoo_publish("registrar", $var(amqp_routing_key), $var(amqp_payload_request)); diff --git a/kamailio/tls-role.cfg b/kamailio/tls-role.cfg index df6507e..8b2f413 100644 --- a/kamailio/tls-role.cfg +++ b/kamailio/tls-role.cfg @@ -1,7 +1,7 @@ enable_tls = yes -listen=TLS_SIP -listen=TLS_ALG_SIP +listen=SIP_TLS_LISTENER +listen=ALG_TLS_LISTENER ####### TLS Parameters ######### loadmodule "tls.so" diff --git a/kamailio/websockets-role.cfg b/kamailio/websockets-role.cfg index 53c9c8d..d8d183a 100644 --- a/kamailio/websockets-role.cfg +++ b/kamailio/websockets-role.cfg @@ -1,8 +1,8 @@ tcp_accept_no_cl=yes -listen=TCP_WS +listen=WS_TCP_LISTENER #!ifdef TLS_ROLE -listen=TLS_WSS +listen=WSS_TLS_LISTENER #!endif ######## NAT Traversal module - signaling functions ######## diff --git a/system/sbin/kazoo-kamailio b/system/sbin/kazoo-kamailio index 23321be..bdd3dc4 100755 --- a/system/sbin/kazoo-kamailio +++ b/system/sbin/kazoo-kamailio @@ -45,8 +45,14 @@ RAM_DISK_SIZE=${RAM_DISK_SIZE:-256m} RAM_DISK_FREE_SIZE_PERC=${RAM_DISK_FREE_SIZE:-30} RAM_DISK_ENABLED=${RAM_DISK_ENABLED:-false} EXTRA_OPTIONS=${EXTRA_OPTIONS:-"-x tlsf -w /tmp"} +LOCAL_IP_INTERFACE=${LOCAL_IP_INTERFACE:-none} + +if [[ "${LOCAL_IP_INTERFACE}" != "none" ]]; then + MY_LOCAL_IP=$(ip -4 addr show ${LOCAL_IP_INTERFACE} | grep -oP '(?<=inet\s)\d+(\.\d+){3}') +else + MY_LOCAL_IP=$(ip route get 8.8.8.8 2> /dev/null | awk '{print ""$7""; exit}') +fi -MY_LOCAL_IP=$(ip route get 8.8.8.8 2> /dev/null | awk '{print ""$7""; exit}') if is_ipaddress ${MY_LOCAL_IP}; then EXTRA_OPTIONS+=" -A MY_LOCAL_IP=${MY_LOCAL_IP}" fi @@ -298,6 +304,11 @@ case "$1" in check) check_config ;; + boot) + shift + prepare + start -DD $@ + ;; *) echo $"Usage: $0 {prepare|start|background|stop|restart|reset-restart|status|check|pid}" esac