[PATCH 7/8] Add support for GlobalProtect ESP tunnel
Daniel Lenski
dlenski at gmail.com
Tue May 30 17:55:13 PDT 2017
On Sat, May 20, 2017 at 3:43 PM, Daniel Lenski <dlenski at gmail.com> wrote:
> Most of the existing ESP support code (written for Juniper/nc) can be reused
> for GlobalProtect ESP. The ESP algorithms, SPIs, and keys are sent as part of the
> getconfig XML response.
>
> GlobalProtect requires a fairly awkward "tap dance" between the TCP mainloop and
> the UDP mainloop in order to support ESP:
>
> * Prior to the getconfig XML request, the HTTPS tunnel will not work (even though
> the authcookie is already known from the login response) and the ESP tunnel
> also will not work (because the ESP keys are not known).
> * After the getconfig XML request, either the ESP tunnel or the HTTPS tunnel can
> be connected, but not both. As soon as the HTTPS tunnel is disconnected,
> the ESP keys are invalidated. On the other hand, if the ESP tunnel stops
> responding due to some firewall that interferes with UDP, the HTTPS tunnel
> can still be connected.
> * Therefore, in order to allow the ESP tunnel to start, the TCP mainloop must
> refrain from actually connecting to the HTTPS tunnel unless the ESP tunnel
> is disabled or has failed to connect... but it can't wait *too* long
> because then the HTTPS keepalive connection may be dropped, and the user
> will wonder why no traffic is flowing even though the VPN has allegedly
> started. The wait time is currently hard-coded at 5 seconds (half the DPD
> interval used by the official clients).
>
> Another quirk of the GlobalProtect ESP support: it uses specially
> constructed ICMP request/reply ("ping") packets as the probes for ESP
> initiation and DPD.
>
> * These packets must contain a "magic payload" in order to work.
> * In most GlobalProtect VPNs, the packets are addressed to the public, external IPv4
> address of the VPN gateway server even though they are sent over the ESP
> tunnel (???), but in some cases they must be addressed to a different address
> which is misleading described as <gw-address> in the getconfig XML response.
>
> Don't blame me. I didn't design this.
>
> Signed-off-by: Daniel Lenski <dlenski at gmail.com>
Small patch-on-top-of-a-patch coming... nothing is broken in the
current version, but the ESP probe-catching function could be
implemented more cleanly.
-Dan
More information about the openconnect-devel
mailing list