Hi Everybody,
I have some problems with a System which has several network interfaces
and multiple network interfaces. The system basically receives requests
on the public socket/ip and sends them, via the private socket to some
proxies, which "do the work". It's a kind of load-balancer based on
OpenSER 1.0.1 and the Dispatcher Module from 1.1 / CVS.
Everything works fine, but sometimes i see some ICMP Messages
(Destination not reachable / Port not reachable) on this "loadbalancer";
as a response to requests from the Proxies to the loadbalancer. Has
anybody seen this issue before? Any ideas, what's wrong? Any known
issues? Are there any known problems with multiple interfaces? Any known
issues with more than one processor? I've copied my configuration below,
any thing in capital letters are Parameters from my M4 file...
The system is not really on high load, has 64 children and should easily
handle the load... (Dual Intel Xeon(a)2.80GHz, 1 Gig of Ram)
Any help would be appreciated...
Thanks in advance,
Carsten
debug=3 # debug level (cmd line: -dddddddddd)
fork=yes
log_stderror=no # (cmd line: -E)
children=CHILD_PROCS
check_via=yes
dns=off
rev_dns=off
listen=DISPATCHER_EXTERNAL_IP
listen=DISPATCHER_INTERNAL_IP
port=5060
sip_warning=0
disable_core_dump=yes
# Use the FIFO
fifo="/tmp/openser_fifo"
# for more info: sip_router -h
# ------------------ module loading ----------------------------------
loadmodule "/lib/openser/modules/maxfwd.so"
loadmodule "/lib/openser/modules/sl.so"
loadmodule "/lib/openser/modules/tm.so"
loadmodule "/lib/openser/modules/xlog.so"
loadmodule "/lib/openser/modules/dispatcher.so"
loadmodule "/lib/openser/modules/textops.so"
loadmodule "/lib/openser/modules/rr.so"
loadmodule "/lib/openser/modules/mccs_dispatcher.so"
# ----------------- setting module-specific parameters ---------------
# TM Module: Timeout for a request with no provisional Answers
modparam("tm", "fr_timer", PROXY_TIMEOUT)
# No double Record-Route; we do it manually
modparam("rr", "enable_double_rr", 0)
# Dispatcher: Forward Register Requests
modparam("dispatcher", "list_file",
"/etc/openser/dispatcher.list")
# Dispatcher: Enable Failover-Support
modparam("dispatcher", "flags", 2)
route {
##################################################################################################################
# ï¿1/2berprï¿1/2fung auf zuviele Forwards.
###############################################################################################################
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483","To Many Hops");
drop();
return;
};
##################################################################################################################
# Loose-Routing (RFC3261)
###############################################################################################################
# Record-Route-Header entfernen
if (loose_route()) {
if(uri=~"sip:.*[@]INTERNAL_IP_REGEX") {
# Send via the internal Interface:
force_send_socket(DISPATCHER_INTERNAL_IP:5060);
} else {
# Send via the external Interface:
force_send_socket(DISPATCHER_EXTERNAL_IP:5060);
}
if (!t_relay()) {
sl_reply_error();
}
return;
}
##################################################################################################################
# Record-Route, damit alle Nachrichten ï¿1/2ber diesen SIP-Proxy laufen
###############################################################################################################
if (method == "INVITE") record_route();
##################################################################################################################
# Relay requests from the Gateways
###############################################################################################################
if (OTHER_PROXY_QUERY) {
if (uri != myself) {
# Send via the external Interface:
force_send_socket(DISPATCHER_EXTERNAL_IP:5060);
# Und das Paket entsprechend weiterleiten
if (!t_relay_to_udp("MCCS_GLOBAL_DISPATCHER_PRIMARY",
"MCCS_GLOBAL_DISPATCHER_PRIMARY_PORT")) {
log(1, "Not possible to relay to Dispatcher\n");
# Fehler melden
sl_reply_error();
}
return;
} else {
# Anfrage fï¿1/2r ein PSTN-Out-Gateway
if (uri=~"sip:mg_out_.*") {
# "mg_out_" entfernen
strip(7);
# PSTN-Out Mediagateway wï¿1/2hlen (Round-Robin)
ds_select_domain("2", "4");
# Send via the external Interface:
force_send_socket(DISPATCHER_EXTERNAL_IP:5060);
# Anfrage fï¿1/2r einen Mediaserver
} else if (uri=~"sip:media_.*") {
# "media_" entfernen
strip(6);
# Mediaserver wï¿1/2hlen (Round-Robin)
ds_select_domain("3", "4");
# Send via the internal Interface:
force_send_socket(DISPATCHER_INTERNAL_IP:5060);
} else {
sl_send_reply("503", "Service not available");
drop();
return;
}
# On Failure: Choose next Proxy
t_on_failure("1");
# Relay to the Proxy
if (!t_relay()) {
sl_reply_error();
}
return;
}
}
##################################################################################################################
# Routing zu den SIP-Proxys
###############################################################################################################
# Send via the internal Interface:
force_send_socket(DISPATCHER_INTERNAL_IP:5060);
# Proxy wï¿1/2hlen (Round-Robin, SIP-Proxies)
ds_select_domain("1", "4");
# On Failure: Choose next Proxy
t_on_failure("1");
# Relay to the Proxy
if (!t_relay()) {
sl_reply_error();
}
return;
}
failure_route[1] {
# Choose another gateway
if (t_check_status("408") && t_local_replied("all")) {
if (ds_next_domain()) {
# On Failure: Choose next Proxy
t_on_failure("1");
# Relay to Proxy
t_relay();
} else {
t_reply("503", "Service not available");
return;
}
}
}