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