Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

mhomed does not work with virtual IPs created by keepalived #3002

Closed
ccolumbu999 opened this issue Jan 13, 2022 · 2 comments
Closed

mhomed does not work with virtual IPs created by keepalived #3002

ccolumbu999 opened this issue Jan 13, 2022 · 2 comments

Comments

@ccolumbu999
Copy link

ccolumbu999 commented Jan 13, 2022

Description

I enabled mhomed=1 as well as ip_free_bind=1, but kamailio does not recognize that there is internal and external traffic.
For example I also enabled modparam("rr", "enable_double_rr", 1), but the 2 Record-Routes both have the external IP.
In addition fix_nated_contact() and fix_nated_sdp don't work because they think all traffic is coming from the external IP.

Troubleshooting

I tried a lot of things.

Reproduction

Set up a server with keepalived and a virtual IP and use any standard NAT config and it won't work.

Debugging Data

(paste your debugging data here)

Log Messages

(paste your log messages here)

SIP Traffic

(paste your sip traffic here)

Possible Solutions

I thought that ip_free_bind=1 would fix this issue, but it does not seem to have any effect.

Additional Information

  • Kamailio Version - output of kamailio -v
(paste your output here)
  • Operating System:
    Debian 10
    4.19.0-18-amd64 API for ruby #1 SMP Debian 4.19.208-1 (2021-09-29) x86_64 GNU/Linux
(paste your output here)
@miconda
Copy link
Member

miconda commented Jan 14, 2022

The mhomed tries to query the IP routing table from OS to see what's the network interface/ip that has a route to target. If it happens that the virtual IP has a route to the target, no matter it is internal or external, then it is used.

Moreover, as I observed in some cases the virtual IP, if it is like a second IP associated to the same network interface/card, is not properly reported and the target ip of incoming traffic, again, it is more from OS point of view.

You have to use force send socket to work around it, or if you find a better solution to push in the c code, just make a pull request. I am closing this one, it is more about using kamailio with current features, if you want to discuss further, use the sr-users@lists.kamailio.org mailing lists, maybe users have further hints and tell OS config options that can help, from developer point of view, receive/send over UDP is done using underlying OS API.

@miconda miconda closed this as completed Jan 14, 2022
@ccolumbu999
Copy link
Author

Ok my idea for a solution to this (and I don't know anything about kamailio internals) is to allow the internal and external IPs/interfaces be specified in the config so that mhomed can work with virtual IPs, like asterisk's sip.conf localnet (https://www.voip-info.org/asterisk-sip-localnet/).
Or it could be something as simple as an additional modifier to listen, maybe something like direction [internal|external] or [private|public]?
listen=udp:MY_PRIVATE_IP:5060 advertise MY_PUBLIC_IP:5060 direction private
listen=udp:MY_PUBLIC_IP:5060 direction public

If something like that is possible where do I suggest it?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants