Date: Mon, 30 Apr 2001 23:02:18 +0000 From: Gunther Schadow <gunther@aurora.regenstrief.org> To: snap-users@kame.net Cc: Shoichi Sakane <sakane@ydc.co.jp>, freebsd-net@freebsd.org, itojun@iijlab.net Subject: Re: (KAME-snap 4523) Re: KAME SPD bug, please try and confirm ... Message-ID: <3AEDEEFA.60DD4AC4@aurora.regenstrief.org> References: <20010424040539N.sakane@ydc.co.jp> <20010424041925C.sakane@ydc.co.jp> <3AE4BB51.FC1400BD@aurora.regenstrief.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Earlier last week I wrote:
> I just built and tested the latest KAME-SNAP, and it appears as if
> the two ipsec tunnels work together now. I will have a final word
> on this later tomorrow, but for now it looks as if this problem
> requires no further action on your part.
Unfortunately I found out that the problem still exists deep down,
it's just harder to reproduce. It comes when I try to use multiple
SPD rules to route packets into the same ESP tunnel.
The following setkey here script shows an exaple. This is for a
VPN with a central headquarter (home) and multiple remote sites
(sattelites 1, 2, 3, ...). We use shell variables to make this
both easily reproduceable and more readable:
${homeip} - the outside IP address of the central VPN gateway, e.g.,
homeip=204.152.64.103
${sat1ip} - the outside IP address of satellite-1's VPN gateway, e.g,
sat1ip=24.16.273.28
${sat2ip} - the outside IP address of sattelite-2's VPN gateway, e.g.,
sat2ip=65.34.283.122
etc.
The VPN establishes one common class B network (typically using local IP
numbers, e.g., 192.168.0.0/26). We use the shell variable ${vpn} to make
this more readable. For example, we could set
vpn=192.168
The problem with the KAME prolicy processing becomes manifest when
we add another realistic twist, i.e., in adittion to the VPN network
we want other routes using the VPN tunnel. For example, some folks
in our company use the 10.0.0.0/8 network at the headquarter, and
we have an affiliated organization with network 123.4.5.0/24 which
we want to contact only via the headquarter using NAT such that
the affiliated network would not need to know about the structure of
our VPN.
We configure the central home VPN gateway using the following setkey
here script:
setkey -c <<EOF
# VPN TUNNEL FROM HOME TO SATELLITE 2
# SAD ENTRIES
add ${homeip} ${sat2ip} esp ${sat2spi} -E simple;
add ${sat2ip} ${homeip} esp $(( ${sat2spi} + 1 )) -E simple;
# PRIMARY TUNNEL INGRESS AND EGRESS FOR VPN
spdadd ${vpn}.0.0/16 ${vpn}.2.0/24 -P in ipsec
esp/tunnel/${homeip}-${sat1ip}/require;
spdadd ${vpn}.2.0/24 ${vpn}.0.0/16 -P out ipsec
esp/tunnel/${sat2ip}-${homeip}/require;
# ADDITIONAL INGRESS AND EGRESS RULES ...
# ... FOR THE OTHER LOCAL NETWORK 10.0.0.0/8
spdadd 10.0.0.0/8 ${vpn}.2.0/24 -P in ipsec
esp/tunnel/${homeip}-${sat2ip}/require;
spdadd ${vpn}.2.0/24 10.0.0.0/8 -P out ipsec
esp/tunnel/${sat2ip}-${homeip}/require;
# ... FOR SOME GLOBAL IP NETWORK THAT SHOULD BE ROUTED THROUGH TUNNEL
spdadd 123.4.5.0/24 ${vpn}.2.0/24 -P in ipsec
esp/tunnel/${homeip}-${sat2ip}/require;
spdadd ${vpn}.2.0/24 123.4.5.0/24 -P out ipsec
esp/tunnel/${sat2ip}-${homeip}/require;
# END OF SATTELITE 2
# VPN TUNNEL FROM HOME TO SATELLITE 3
# SAD ENTRIES
add ${homeip} ${sat3ip} esp ${sat3spi} -E simple;
add ${sat3ip} ${homeip} esp $(( ${sat3spi} + 1 )) -E simple;
# PRIMARY TUNNEL INGRESS AND EGRESS FOR VPN
spdadd ${vpn}.0.0/16 ${vpn}.3.0/24 -P in ipsec
esp/tunnel/${homeip}-${sat3ip}/require;
spdadd ${vpn}.3.0/24 ${vpn}.0.0/16 -P out ipsec
esp/tunnel/${sat3ip}-${homeip}/require;
# ADDITIONAL INGRESS AND EGRESS RULES ...
# ... FOR THE OTHER LOCAL NETWORK 10.0.0.0/8
spdadd 10.0.0.0/8 ${vpn}.3.0/24 -P in ipsec
esp/tunnel/${homeip}-${sat3ip}/require;
spdadd ${vpn}.3.0/24 10.0.0.0/8 -P out ipsec
esp/tunnel/${sat3ip}-${homeip}/require;
# ... FOR SOME GLOBAL IP NETWORK THAT SHOULD BE ROUTED THROUGH TUNNEL
spdadd 123.4.5.0/24 ${vpn}.3.0/24 -P in ipsec
esp/tunnel/${homeip}-${sat3ip}/require;
spdadd ${vpn}.3.0/24 123.4.5.0/24 -P out ipsec
esp/tunnel/${sat3ip}-${homeip}/require;
# END OF SATTELITE 3
EOF
Each sattelite is configured using the following script, where we
have shell variables defined similarly to the above. With the
following differences: instead of sat1.., sat2.., sat3.. we simply
say sat.., i.e.:
satip - the outside ip address of this sattelite
satspi - the spi (base) number for this tunnel
satno - the ordinal number of the sattelite, e.g., 1 for sat1, 2
for sat2, 3 for sat3, etc.
Here goes the script:
setkey -c <<EOF
# VPN TUNNEL FROM HOME TO SATELLITE
# SAD ENTRIES
add ${homeip} ${satip} esp ${satspi} -E simple;
add ${satip} ${homeip} esp $(( ${satspi} + 1 )) -E simple;
# PRIMARY TUNNEL INGRESS AND EGRESS FOR VPN
spdadd ${vpn}.0.0/16 ${vpn}.${satno}.0/24 -P in ipsec
esp/tunnel/${homeip}-${satip}/require;
spdadd ${vpn}.${satno}.0/24 ${vpn}.0.0/16 -P out ipsec
esp/tunnel/${satip}-${homeip}/require;
# ADDITIONAL INGRESS AND EGRESS RULES ...
# ... FOR THE OTHER LOCAL NETWORK 10.0.0.0/8
spdadd 10.0.0.0/8 ${vpn}.${satno}.0/24 -P in ipsec
esp/tunnel/${homeip}-${satip}/require;
spdadd ${vpn}.${satno}.0/24 10.0.0.0/8 -P out ipsec
esp/tunnel/${satip}-${homeip}/require;
# ... FOR SOME GLOBAL IP NETWORK THAT SHOULD BE ROUTED THROUGH TUNNEL
spdadd 123.4.5.0/24 ${vpn}.${satno}.0/24 -P in ipsec
esp/tunnel/${homeip}-${satip}/require;
spdadd ${vpn}.${satno}.0/24 123.4.5.0/24 -P out ipsec
esp/tunnel/${satip}-${homeip}/require;
EOF
Now, doing this with last week's KAME SNAP works only partly. That
is, all those first degree VPN tunnels do work now. But the
tunnels rules to the 10.0.0.0/8 and 123.4.5.0/24 networks work
only half way, that is, the central VPN home gateway will not
act upon those rules. When I delete the SPD rules for the first
degree VPN, one of the others suddenly work. Same problem as
reported last time, just a little more involved to make it
manifest.
Please let me know if you can or cannot reproduce this. I will
also try different things, but I do suspect that there is one
systematic error in the implementation of the SPD rules engine,
unless this systematic problem is found, the bug will only be
put off to become manifest in only weird situations that are
even harder to reproduce.
Since my project is in jeopardy because of this bug, I have
now engaged plan B, which is to use IPsec in transport mode
and one gif tunnel connecting each sattelite with the home
gateway. I can then use as many static routes as I like to
add ingress rules for the tunnel. I am convinced this works
because the SPD entries are much simpler for this. However, on
the way discovered another weirdness similar to the above.
Take the above setkey scripts and since the additional
tunnel ingress and egress rules do not work, let's delete
them and use a gif-tunnel hack instead. On the central home
gateway I would say:
for satno in 1 2 3 ... ; do
gifconfig gif${satno} inet ${vpn}.0.1 ${vpn}.${satno}.1
central=${pseudo}.223
remote=${pseudo}.${satno}
ifconfig gif${satno} inet ${central} ${remote} netmask 0xffffff00
done
Here, ${pseudo} is another local network that is meaningful
only for the gif-link, for example,
pseudo=172.16.1
would work.
Now, on each sattelite ${satno} I would have defined this:
gifconfig gif0 inet ${vpn}.${satno}.1 ${vpn}.0.1
central=${pseudo}.223
remote=${pseudo}.${satno}
ifconfig gif0 inet ${remote} ${central} netmask 0xffffff00
and then I'd have added all the additional ingress rules as
static routes:
route add -net 10.0.0.0/8 ${central}
route add -net 123.4.5.0/24 ${central}
However, this, again does not work and it shows the same symptoms,
i.e., the "netstat -s -p ip" will show how the counter for
"unknown / unsupported protocols" goes up. If I use the same
gif tunnel with gifconfig not using the ${vpn}.0.x addresses
but the respective global addresses, it all works -- but of
course the point is to make this gif tunnel hidden in the VPN
tunnel. May be this will help debugging the problem in KAME's
SPD rules engine.
Epilogue: I am open to the suggestion that I'm just doing a
stupid thing here and that x-thousand installations are out
there who establish similarly complex VPNs using KAME IPsec
tunnels with no problems at all. If so, please let me know
and if possible, tell me what I should do differently.
regards
-Gunther
--
Gunther Schadow, M.D., Ph.D. gschadow@regenstrief.org
Medical Information Scientist Regenstrief Institute for Health Care
Adjunct Assistent Professor Indiana University School of Medicine
tel:1(317)630-7960 http://aurora.regenstrief.org
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-net" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3AEDEEFA.60DD4AC4>
