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@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; } } }
Hi Carsten,
I would say maybe the requests are not sent from the proper interfaces( Ex: sending from the public interface requests to the local proxies). Please check this with tcpump.
when you have multiple interface, there are two options: - do the interface selection manually via the force_send_socket() - let the kernel to choose the appropriate interface based on the destination address. For this you need to enable the proxy option mhomed. See http://openser.org/dokuwiki/doku.php?id=openser_core_cookbook#mhomed
regards, bogdan
Carsten Bock wrote:
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@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; } } }
Users mailing list Users@openser.org http://openser.org/cgi-bin/mailman/listinfo/users