Brekeke Forum Index » Brekeke SIP Server Forum

Post new topic   Reply to topic
Source IP changes when using failover rule with redundancy.
Author Message
dudley.aoi
Brekeke Addict


Joined: 17 Oct 2018
Posts: 31

PostPosted: Fri Sep 29, 2023 1:23 pm    Post subject: Source IP changes when using failover rule with redundancy. Reply with quote

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 Patterns
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.
Back to top
View user's profile
Laurie
Brekeke Master Guru


Joined: 07 Jan 2008
Posts: 241

PostPosted: Fri Oct 06, 2023 10:02 pm    Post subject: Reply with quote

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-sip-server-redundancy-setup
Back to top
View user's profile
dudley.aoi
Brekeke Addict


Joined: 17 Oct 2018
Posts: 31

PostPosted: Thu Oct 12, 2023 12:04 pm    Post subject: Reply with quote

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.
Back to top
View user's profile
dudley.aoi
Brekeke Addict


Joined: 17 Oct 2018
Posts: 31

PostPosted: Thu Oct 12, 2023 12:09 pm    Post subject: Reply with quote

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.
Back to top
View user's profile
Tata
Brekeke Master Guru


Joined: 27 Jan 2008
Posts: 223

PostPosted: Fri Oct 13, 2023 10:10 am    Post subject: Reply with quote

Add the line below in the [Configuration]->[Advanced] page. It might meet the requirement.
Code:
net.bind.use = true
Back to top
View user's profile
dudley.aoi
Brekeke Addict


Joined: 17 Oct 2018
Posts: 31

PostPosted: Fri Oct 13, 2023 10:30 am    Post subject: Reply with quote

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-brekeke-sip-server-to-one-ip-address

Would I need to set net.bind.interface explicitly before using net.bind.use=true?
Back to top
View user's profile
Tata
Brekeke Master Guru


Joined: 27 Jan 2008
Posts: 223

PostPosted: Fri Oct 13, 2023 10:41 pm    Post subject: Reply with quote

"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.
Back to top
View user's profile
Display posts from previous:   
Post new topic   Reply to topic    Brekeke Forum Index » Brekeke SIP Server Forum All times are GMT - 7 Hours
Page 1 of 1