Greetings,
I am trying to setup an Voice Infrastructure with 1 Main and 1 external Media Nodes, Located in different Data Centers to interact specific traffic.
Public IPs are replaced accordingly
172.121.123.35 Main
142.121.120.42 HK Node
Primary Server has Yeti-Admin, CDRs, Redis & SEMS (standalone)
Funtionality : Primary Signaling & Media, DB + Admin
PoP Nodes RPC Entry under system–>Components
Main 5 5 127.0.0.1:7080
HK 9 9 142.121.120.42:7080
sems.conf for Primary Server
general {
stderr = no
syslog_loglevel = 2
syslog_facility = LOCAL0
node_id = 5
shutdown_mode {
code = 508
reason = "Yeti node in shutdown mode"
allow_uac = true
}
media_processor_threads = 4
rtp_receiver_threads = 4
session_processor_threads = 20
sip_udp_server_threads = 2
sip_tcp_server_threads = 2
dead_rtp_time = 30
default_bl_ttl = 0
symmetric_rtp_mode = packets
symmetric_rtp_packets = 20
}
signaling-interfaces {
interface primary {
default-media-interface = primary
ip4 {
sip-udp {
address = 172.121.123.35
port = 5060
use-raw-sockets = off
}
sip-tcp {
address = 172.121.123.35
port = 5060
connect-timeout = 2000
static-client-port = on
idle-timeout=900000
use-raw-sockets = off
}
}
}
}
media-interfaces {
interface primary {
ip4 {
rtp {
address = 172.121.123.35
low-port = 16384
high-port = 32769
dscp = 46
use-raw-sockets = off
}
}
}
}
modules {
module "di_log" {}
module "mp3" {}
module "opus" {}
module "wav" {}
module "gsm" {}
module "ilbc" {}
module "adpcm" {}
module "l16" {}
module "g722" {}
module "g729bcg" {}
module "registrar_client" {}
module "postgresql" {}
module "session_timer" {}
module "jsonrpc" {
listen{
address = 127.0.0.1
port = 7080
}
server_threads = 1
}
module "http_client" {}
module-global "uac_auth" {}
module "options_prober" {}
module "radius_client" {}
module "redis" {
max_batch_size = 10
batch_timeout = 100
max_queue_size = 1000
}
module "registrar" {
redis {
use_functions = no
write {
hosts = { 127.0.0.1:6379 }
}
read {
hosts = { 127.0.0.1:6379 }
}
}
}
module "yeti" {
pop_id = 5
lega_cdr_headers {
header(p-charge-info, string)
header(diversion, array)
}
auth {
realm = yeti-switch
}
msg_logger_dir = /var/spool/sems/dump
audio_recorder_dir = /var/spool/sems/records
audio_recorder_compress = false
db_refresh_interval = 5
ip_auth_reject_if_no_matched = true
routing {
schema = switch21
function = route_release
init = init
pass_input_interface_name = true
master_pool {
host = 127.0.0.1
port = 5432
name = master
user = whlsl_su
pass = xxxxxxxxxxxx
size = 4
check_interval = 10
max_exceptions = 0
statement_timeout = 3000
}
failover_to_slave = false
slave_pool {
host = 127.0.0.1
port = 5432
name = master
user = whlsl_su
pass = xxxxxxxxxxxx
size = 4
check_interval = 10
max_exceptions = 0
statement_timeout = 3000
}
}
cdr {
dir = /var/spool/sems/cdrs
completed_dir = /var/spool/sems/cdrs/completed
pool_size = 2
auth_pool_size = 2
schema = switch
function = writecdr
master {
host = 127.0.0.1
port = 5432
name = cdr
user = whlsl_su
pass = xxxxxxxxxx
}
failover_to_slave = false
slave {
host = 127.0.0.1
port = 5432
name = cdr
user = whlsl_su
pass = xxxxxxxxxx
}
failover_requeue = true
failover_to_file = false
serialize_dynamic_fields = true
batch_size = 1
batch_timeout = 5000
auth_batch_size = 1
auth_batch_timeout = 20000
}
resources {
reject_on_error = false
reduce_operations = true
write {
hosts = { 127.0.0.1:6379 }
timeout = 500
}
read {
hosts = { 127.0.0.1:6379 }
timeout = 1000
}
}
registrations {
check_interval = 5000
}
rpc {
calls_show_limit = 10000
}
core_options_handling = yes
}
}
routing {
application = yeti
}
Node B is Located in Hong Kong with (Pgqd, Redis, Sems)
Pgqd Is connected to Primary, DB successfully
● pgqd.service - PgQ maintenance daemon
Loaded: loaded (/lib/systemd/system/pgqd.service; enabled; preset: enabled)
Active: active (running) since Sun 2025-07-13 04:49:50 GMT; 3 days ago
Main PID: 3283 (pgqd)
Tasks: 1 (limit: 9468)
Memory: 2.7M
CPU: 2min 47.178s
CGroup: /system.slice/pgqd.service
└─3283 /usr/bin/pgqd /etc/pgqd.ini
sems.conf for Node B
general {
stderr = no
syslog_loglevel = 2
syslog_facility = LOCAL0
node_id = 9
shutdown_mode {
code = 508
reason = "Yeti node in shutdown mode"
allow_uac = true
}
media_processor_threads = 4
rtp_receiver_threads = 4
session_processor_threads = 20
sip_udp_server_threads = 2
sip_tcp_server_threads = 2
dead_rtp_time = 30
default_bl_ttl = 0
symmetric_rtp_mode = packets
symmetric_rtp_packets = 20
}
signaling-interfaces {
interface primary {
default-media-interface = primary
ip4 {
sip-udp {
address = 142.121.120.42 #Note: Changing this to 172.121.123.35 throws error :failed to find interface with address: 172.121.123.35
port = 5060
use-raw-sockets = off
}
sip-tcp {
address = 142.121.120.42 #Note: Changing this to 172.121.123.35 throws error :failed to find interface with address: 172.121.123.35
port = 5060
connect-timeout = 2000
static-client-port = on
idle-timeout=900000
use-raw-sockets = off
}
}
}
default-media-interface = main
ip4 {
sip-udp {
address = 142.121.120.42 #Note: Changing this to 172.121.123.35 throws error :failed to find interface with address: 172.121.123.35
port = 5060
use-raw-sockets = off
}
sip-tcp {
address = 142.121.120.42 #Note: Changing this to 172.121.123.35 throws error :failed to find interface with address: 172.121.123.35
port = 5060
connect-timeout = 2000
static-client-port = on
idle-timeout=900000
use-raw-sockets = off
}
}
}
}
media-interfaces {
interface primary {
ip4 {
rtp {
address = 142.121.120.42
low-port = 16384
high-port = 32769
dscp = 46
use-raw-sockets = off
}
}
}
}
modules {
module "di_log" {}
module "mp3" {}
module "opus" {}
module "wav" {}
module "gsm" {}
module "ilbc" {}
module "adpcm" {}
module "l16" {}
module "g722" {}
module "g729bcg" {}
module "registrar_client" {}
module "postgresql" {}
module "session_timer" {}
module "jsonrpc" {
listen{
address = 142.121.120.42
port = 7080
}
server_threads = 1
}
module "http_client" {}
module-global "uac_auth" {}
module "options_prober" {}
module "radius_client" {}
module "redis" {
max_batch_size = 10
batch_timeout = 100
max_queue_size = 1000
}
module "registrar" {
redis {
use_functions = no
write {
hosts = { 127.0.0.1:6379 }
}
read {
hosts = { 127.0.0.1:6379 }
}
}
}
module "yeti" {
pop_id = 9
lega_cdr_headers {
header(p-charge-info, string)
header(diversion, array)
}
auth {
realm = yeti-switch
}
msg_logger_dir = /var/spool/sems/dump
audio_recorder_dir = /var/spool/sems/records
audio_recorder_compress = false
db_refresh_interval = 5
ip_auth_reject_if_no_matched = true
routing {
schema = switch21
function = route_release
init = init
pass_input_interface_name = true
master_pool {
host = 172.121.123.35
port = 5432
name =master
user =whlsl_su
pass = xxxxxxxxxxxxx
size = 4
check_interval = 10
max_exceptions = 0
statement_timeout = 3000
}
failover_to_slave = false
slave_pool {
host = 172.121.123.35
port = 5432
name = master
user = whlsl_su
pass = xxxxxxxxxxxxx
size = 4
check_interval = 10
max_exceptions = 0
statement_timeout = 3000
}
}
cdr {
dir = /var/spool/sems/cdrs
completed_dir = /var/spool/sems/cdrs/completed
pool_size = 2
auth_pool_size = 2
schema = switch
function = writecdr
master {
host = 172.121.123.35
port = 5432
name = cdr
user = whlsl_su
pass = xxxxxxxxxxxxx
}
failover_to_slave = false
slave {
host = 172.121.123.35
port = 5432
name = cdr
user = whlsl_su
pass = xxxxxxxxxxxxx
}
failover_requeue = true
failover_to_file = false
serialize_dynamic_fields = true
batch_size = 1
batch_timeout = 5000
auth_batch_size = 1
auth_batch_timeout = 20000
}
resources {
reject_on_error = false
reduce_operations = true
write {
hosts = { 127.0.0.1:6379 }
timeout = 500
}
read {
hosts = { 127.0.0.1:6379 }
timeout = 1000
}
}
registrations {
check_interval = 5000
}
rpc {
calls_show_limit = 10000
}
core_options_handling = yes
}
}
routing {
application = yeti
}
Result The Primary server is not able to send/connect calls/media to Node B, The Dashboard on Primary server goes in loop/procesing only & not able to pull data.
Required:
What configuration changes in sems.conf are required to make this functional without overloading Yeti-Admin & Nginx on each of the node.
Objective
There are some conditions where Telco Partners require Local Media Terminations/Origination.
Looking forward to have some valuable inputs at earliest.
Thanks
Important Note I added the following line in sems.conf of Node B here but in real this comment is not there to cause any error
#Note: Changing this to 172.121.123.35 throws error :failed to find interface with address: 172.121.123.35