[Design] requirements list
John Denker
jsd@research.att.com
Fri, 17 Aug 2001 17:03:11 -0400
At 08:52 PM 8/3/01 -0400, Michael Richardson wrote:
> >>>>> "John" == John Denker <jsd@research.att.com> writes:
> John> Currently klips1 apparently identifies a tunnel by what remote
> John> subnet it serves. That means that if a new tunnel is brought up
> John> serving the same subnet, it supersedes the previous one.
>
> John> We need a more complex semantics, and some way of expressing it.
> John> -- SOMETIMES you do want the new tunnel to supersede the old one.
> John> -- SOMETIMES you want the new tunnel to operate in parallel,
> John> using equal-cost multipath, for load sharing.
>
> When you say this, what precisely is it that you would actually express?
>
> Is this expressed by the operator? Would you tell pluto?
>
> Or is this something that pluto tells KLIPS?
Well, that's an interesting question. I don't have definitive answers, but
here are some desiderata and hypotheses that we can consider:
1) First, let's consider the ordinary prosaic scenario: There is
conceptually only one tunnel. There is only one "conn" defined in
ipsec.conf. A little while before the old SA expires, we negotiate a new
one. We want to start using the new one as soon as it is available, in
order to prevent lost packets due to race conditions (such as
time-in-transit effects, or clock drift relative to our peer, et cetera).
This process, where an elderly SA retires and is succeeded by a younger
one, we can call a "lineage".
In this case, pluto takes the initiative and keep klips informed. I don't
think the routing daemons need to know about it at all. This is a feature,
because it means that prosaic users don't need to get tangled up in the
complexity of routing daemons.
2) Now let's consider the failover scenario, i.e. UNequal-cost
multipath. Pluto can contact its peer and negotiate N different tunnels
serving the same subnets. Each of these will have its own separate
lineage, its own succession of SAs over time.
The collection of all N lineages serving the same same subnets via the same
gateways we can call a "tribe".
Conceptually, at the IPsec level, each lineage "theoretically" should be
managed separately. The tasks of sorting out which tunnel to use, moment
by moment, "theoretically" should be foisted on the routing daemons.
For the pluto at this end, it might be almost that simple. However, at the
far end, there are some devilish details. Suppose our end contacts the far
end and proposes a renewal. The packet format on the wire does not make it
super-easy to distinguish a proposal for renewing tunnel A from a proposal
for renewing some other tunnel in the same tribe.
The best tactic I can think of is to let each lineage have its own RSA
id. (If that means we can't use pre-shared secrets for multipath, so be
it.) If somebody has a better tactic, please let us know.
3) Now let's consider the load-sharing scenario, i.e. equal-cost multipath.
I think it can be treated as a special case of the failover scenario, where
multiple lineages are assigned the same cost.
Actually it may be much simpler than the failover scenario, because it can
be done without involving router daemons, just relying on the kernel's
built-in equal-cost multipath features.
> I can very simply see one expressing:
>
>conn me-you1
> left=5.6.7.8
> leftsubnet=1.2.3.0/24
> right=9.1.2.3
> rightsubnet=10.2.3.0/24
>
>conn me-you2
> left=5.6.7.8
> leftsubnet=1.2.3.0/24
> right=9.2.4.5
> rightsubnet=10.2.3.0/24
That's about right.
We will need to add something to specify the IP address of the mast
device(s) -- in contrast to left=... which specifies the wild-side address.
And BTW recall that the right=... concept needs to be redesigned to handle
road warriors, especially when we have address inertia. But that is a
whole nother topic.
> And then some kind of thing to state relationship, e.g.:
> multipath=me-you1
> or
> fail-over-to=me-you2
Do we need that? The alternative would be to handle this at the router
level, by assigning some sort of cost to the route created by each conn.
This begs the question of to what extent the router configuration file
needs to be coordinated with the IPsec configuration file.
-- Is the cost assigned in the ipsec.conf file, or
-- is the cost assigned in the router.conf file, or
-- do we derive both of those from higher-order configuration specification?
> I'm not sure how the mobility system occurs.
I'm not either. Here are some vague preliminary thoughts:
This requires layer-crossing. That's the whole point. In one scenario,
the mobile unit measures the RF signal strength on various channels, and
then sends a message suggesting which tunnel should be used.
-- HD suggested that there could be special IKE messages for this IBM
and/or IWBM (I've Been Moved and/or I Will Be Moved).
-- Another possibility is to just send ordinary router messages through
the tunnel. (This poses some mild chicken-and-egg problems, but there
should be ways of solving them.....)