• Bindaddr problems in dual stack

    From Michiel van der Vlist@2:280/5555 to Binkd team on Tuesday, November 07, 2023 17:20:40
    Hello Binkd team,

    The bindaddr keyword is used to select the IP address for making outgoing calls in case there is more than one IP address that the system can use. This is usefull in case one has more binkd clients running on one and the same system or when one wants to override the system default in order to present a 2001:DB8::f1d0:zone:net:node address instead of a SLAAC or random privacy address.


    The problem.
    ------------

    bindaddr works fine in a single stack envionment (IPv4 or IPv6 only) but it encounters problems in a dual stack environment.

    bindaddr accepts a literal address (IPv4 or IPv6) or a hostname. Specifying multiple bindaddr lines in the config does not result in an error, but only the last takes effect.

    specifying:

    bindaddr fido.vlist.eu

    or

    bindaddr [2001:1c02:1103:2a00:f1d0:2:280:5555]

    Results in binkd using that address for outgoing IPv6 calls.

    In the windows version it results in a warning when making outgoing IPv4 calls: "bind: {W32 API error 10049} The requested address is not valid in its context" or ."bind -- getaddrinfo: Der angegebene Host ist unbekannt. (11001)"

    In the Linux version, the literal address must be specified without the square brackets and attempts to make outgoing IPv4 calls fail. So one can not use bindaddr to specify an outgoing IPv6 address without breaking outgoing IPv4 capability.


    Proposed solution
    -----------------

    To remedie the situation I suggest to split up the bindaddr in an IPv6 and an IPv4 part.

    bindaddr6 <literal IPv6 address | host name>

    This only affects the IPv6 address used for outpoing calls.

    bindaddr4 <literal IPv4 address | host name>

    This only affects the IPv4 address used for outgoing calls.

    For backward compatibility bindaddr is an alias of bindaddr4

    Or alternatively:

    bindaddr -6 <literal IPv6 address | host name>

    bindaddr -4 <literal IPv4 address | host name>


    How about it?


    Cheers, Michiel

    ---
    * Origin: http://www.vlist.eu (2:280/5555)