[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: shim6 @ NANOG (forwarded note from John Payne)
Iljitsch van Beijnum wrote:
True enough, and I certainly hope that frameworks, libraries and the
like that implement a connect-by-name type call do this. However, this
isn't the only way to solve this. One very interesting feature that I
discovered this summer when finally upgrading to a more recent version
of FreeBSD was the address selection policy mechanism (see the
ip6addrctl command, Windows also has it as netsh interface ipv6 show/set
prefixpolicy). With this, it's possible to control address preferences
system-wide. I'm not sure how it's implemented exactly, but apparently
this policy is applied somewhere between the DNS resolver and the
application.
ip6addrctl is an implementation of the configurable policy table which
is suggested in RFC 3484. Thus it provides a static table.
One way to put this mechanism to good use is when a DNS lookup for an
AAAA record returns more than one address, is to go out and check which
address is alive and/or apply local, remote and in-the-middle traffic
engineering policies. Since the application hasn't committed to any
particular address choice yet, this should work very well. The only
downside is that all of this will take an extra roundtrip.
Implementations of the RFC 3484 policy table do not have a way to
execute some extra code as part of doing the address selection, thus to
do what you suggest one would have to hack around.
So the existence of ip6addrctl doesn't seem to help to do something like
this.
I also question doing extra work each time a DNS lookup is performed;
the lookup might only be done to put an address/name in a log file;
checking reachability and TE policy for such a lookup would be wasteful.
I imagine that we can send out some kind of quick reachability check /
information request to the other side, maybe even towards all the
addresses returned by the DNS. I have to read up on the R1/R2 stuff, but
I imagine this could be an R1, without necessarily completing the full
handshake at this time.
If an I1/R1 exchange was extended to return all the locators and their
preferences in the R1 message (currently this isn't required), then such
an exchange could be used to find out the peer's preferences.
But doing this for all peer IP addresses would be expensive since the
number of packets could be large and the ULP communication might be
quite short. So we would be trading off better TE capability against the
benefits of deferred context establishment.
Erik
Since we're waiting for information to come back from the correspondent
anyway, we can use this time to query a policy server that's local to
the site or is located at one or more of the site's ISPs. If the servers
don't waste time, the answer for this should be back by the time the
correspondent answers anyway.
Another advantage of checking reachability at this stage is that we can
easily avoid ingress filtering: simply try the reachability check
towards the correspondent with the cartesian product of all local and
remote addresses at the same time. The probes with an ingress filtered
source address shouldn't even take up any non-local bandwidth if the
egress routers also perform this filtering.