GRE+IPsec
Why GRE?
- GRE provides universal encapsulation on top of IP.
- It has a smaller header than UDP.
- GRE tunnels are processed in-kernel on *nix systems.
- It's supported by hardware routers.
Why IPsec?
- GRE provides no encryption and authentication of it's own.
- IPsec in implemented in-kernel on FreeBSD and Linux with multithreaded encryption resulting in a lower latency than userspace VPN daemons using tun/tap interfaces.
Problems with GRE
- GRE is defined directly on top of IP.
- Broken NAPT implementations will stop GRE tunnels.
Problems with IPsec
- ESP is defined directly on top of IP.
- NAT support was added as an aftertought to IPsec.
- IKEv1 is too complex.
- Racoon has useless error messages.
Requirements for sane operation
- Identify your peers by X.509 certificates
- At least one peer should operate his own (Sub-)CA.
How to configure a GRE tunnel on FreeBSD
See GRE on FreeBSD.
How to configure IPsec on FreeBSD
See IPsec on FreeBSD.