<!-- Kamailio Project uses GitHub Issues only for bugs in the code or feature requests. Please use this template only for bug reports.
If you have questions about using Kamailio or related to its configuration file, ask on sr-users mailing list:
* http://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
If you have questions about developing extensions to Kamailio or its existing C code, ask on sr-dev mailing list:
* http://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-dev
Please try to fill this template as much as possible for any issue. It helps the developers to troubleshoot the issue.
If there is no content to be filled in a section, the entire section can be removed.
You can delete the comments from the template sections when filling.
You can delete next line and everything above before submitting (it is a comment). -->
### 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. <!-- Explain what you did, what you expected to happen, and what actually happened. -->
### 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.
<!-- If the issue can be reproduced, describe how it can be done. -->
#### Debugging Data
<!-- If you got a core dump, use gdb to extract troubleshooting data - full backtrace, local variables and the list of the code at the issue location.
gdb /path/to/kamailio /path/to/corefile bt full info locals list
If you are familiar with gdb, feel free to attach more of what you consider to be relevant. -->
``` (paste your debugging data here) ```
#### Log Messages
<!-- Check the syslog file and if there are relevant log messages printed by Kamailio, add them next, or attach to issue, or provide a link to download them (e.g., to a pastebin site). -->
``` (paste your log messages here) ```
#### SIP Traffic
<!-- If the issue is exposed by processing specific SIP messages, grab them with ngrep or save in a pcap file, then add them next, or attach to issue, or provide a link to download them (e.g., to a pastebin site). -->
``` (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.
<!-- If you found a solution or workaround for the issue, describe it. Ideally, provide a pull request with a fix. -->
### Additional Information
* **Kamailio Version** - output of `kamailio -v`
``` (paste your output here) ```
* **Operating System**:
<!-- Details about the operating system, the type: Linux (e.g.,: Debian 8.4, Ubuntu 16.04, CentOS 7.1, ...), MacOS, xBSD, Solaris, ...; Kernel details (output of `lsb_release -a` and `uname -a`) -->
``` (paste your output here) ```
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.
Closed #3002.
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?