Forums Read-only archive

Source IP changes when using failover rule with redundancy.

7 posts · Brekeke SIP Server Forum

dudley.aoi Original post
1. Brekeke Product Name and Version:
Brekeke SIP Server 3.14.7.4/563.3

2. Java version:
OpenJDK 64-Bit Server 11.0.20

3. OS type and the version:
RHEL 8.8

4. UA (phone), gateway or other hardware/software involved:
Genesys SIP server 8.1.104.42 on Windows 2019

5. Your problem:
When a failover rule is used in Brekeke SIP Server, the initiating IP changes when failing through to the next Genesys server. The Genesys server is expecting the session to initiate from the Brekeke cluster IP, which it does in normal operations.

Let us assume the following setup:
  • Two Brekeke SIP servers in a cluster with redundancy set up, for 3 IPs (cluster, primary, secondary).
    Two Genesys SIP servers with a primary and a secondary, for 2 IPs.
Brekeke ruleset:

Match Pattern:

Code:

$request = ^INVITE
To = sip:(SOME_PREFIX..)@
Deploy Pattern:

Code:

$transport = TCP
$auth = false
$rtp = false
To = sip:%1@GENESYS_PRIMARY:5060
$session = failover sip:%1@GENESYS_SECONDARY:5060
&failover.pattern.response = ^$
Brekeke Advanced settings:
(required for dealing with Avaya equipment unrelated to Genesys, but included for completeness)

Code:

net.sip.transport.follow.request = false
net.sip.tcp.connection.put.followable = false
net.sip.tcp.keepalive.use=false

Traffic Genesys admins are expecting to see:
Normally:
  • BREKEKE_CLUSTER_IP -> GENESYS_PRIMARY
    GENESYS_PRIMARY -> BREKEKE_CLUSTER_IP
    SIP session establishes and continues
IF THE GENESYS PRIMARY FAILS:
  • BREKEKE_CLUSTER_IP -> GENESYS_PRIMARY (fails, no response)
    BREKEKE_CLUSTER_IP -> GENESYS_SECONDARY
    GENESYS_SECONDARY -> BREKEKE_CLUSTER_IP
    SIP session establishes and continues
Observed traffic:
Normally:
  • BREKEKE_CLUSTER_IP -> GENESYS_PRIMARY
    GENESYS_PRIMARY -> BREKEKE_CLUSTER_IP
    SIP session establishes and continues
IF THE GENESYS PRIMARY FAILS:
  • BREKEKE_CLUSTER_IP -> GENESYS_PRIMARY (fails, no response)
    BREKEKE_PRIMARY_IP -> GENESYS_SECONDARY
    GENESYS_SECONDARY -> BREKEKE_PRIMARY_IP
    SIP session fails with 404 unknown from Genesys.
We want to know why the inconsistency with the source IP from Brekeke using the failover rule and if there is any way to configure Brekeke to always only use the cluster IP and not the individual member node IPs.
Laurie
Are BREKEKE_CLUSTER_IP and BREKEKE_PRIMARY_IP in the same network segment?

The Brekeke's document recommends that they are in different network segments.
https://docs.brekeke.com/sip/brekeke-si ... ancy-setup
dudley.aoi
Unfortunately due to constraints imposed by our networking team based on how we observed Brekeke functioning, yes, BREKEKE_CLUSTER_IP and BREKEKE_PRIMARY_IP are in the same network segment in this example.

I believe years ago (2018) we tried initially setting it up as per the documentation example, but it required routing between the "private" cluster subnet and the public side, IIRC. Networking was ok with giving me a non-routable cluster private subnet, but making a separate "private" subnet routable they weren't happy about.

The way we've been working around this is to simply set up SIP trunks on the far end with all three IPs, cluster IP and each of the node IPs. Otherwise when Brekeke sends traffic from the node IPs the other side will reject that traffic. And technically, it should because those IPs would be otherwise unknown - it would only know about the cluster IP. We've encountered the same behavior with both Avaya and Genesys equipment. It is because there is no way to force Brekeke to ONLY use the cluster IP. This is also why we could not use a non-routable cluster private subnet for the node IPs - Brekeke will regularly send traffic from the node IPs, as evidenced by the observed behavior described in my OP.
dudley.aoi
The "fix"/workaround for this is apparently to configure SIP trunks for the Brekeke node IPs of the primary and secondary on the far end equipment.

There does not appear to be any way to force Brekeke to only use the cluster IP.
Tata
Add the line below in the [Configuration]->[Advanced] page. It might meet the requirement.

Code:

net.bind.use = true 
dudley.aoi
Can you point me to documentation on what "net.bind.use" does?

Closest I can find is net.bind.interface. Similar, but different: https://docs.brekeke.com/sip/bind-breke ... ip-address

Would I need to set net.bind.interface explicitly before using net.bind.use=true?
Tata
"net.bind.use" enables the interface binding.

> Would I need to set net.bind.interface explicitly before using net.bind.use=true?

It doesn't matter.