By Manny Fernandez

July 30, 2024

TCP Encpsulation of ESP Packets for VPN Tunnels

TCP Encpsulation of ESP Packets for VPN Tunnels

Have you ever worked with international customers that have governments that block IPsec traffic on the standard UDP 500 and 4500 into the country?  If you are running FortiGates, you can get around it.  Fortinet can encapsulate the ESP protocol packets inside a TCP header as well as IKE packets.

NOTE: This will only work with IKEv2 and will NOT work with ADVPN

First, a refresher on IPSec VPNs

With a traditional IPSec Tunnel you have an initial IKE (Internet Key Exchange) connection which establishes the secure connection to the far end.  There are to phases used to build the tunnel:

Phase 1 – In this phase, we establish an ISAKMP (Internet Security Association and Key Managament) session.  In this phase, we negotiate authentication, hashing algorithms, encryption schemes, etc.  When this is done, these parameters form an SA (Security Association).  This Phase 1 is used for tunnel managment.  This happens on UDP port 500 and for NAT-T it is UDP 4500.

Phase II – Within this secure tunnel, we then establish the second part of the tunnel which is IKE Phase II refered to as the IPsec Tunnel.  In this phase, you identify what networks/IPs will be exchanged and they both must agree.

ESP – Once the tunnel is estabished, you now start to send traffic over ESP or AH.  Normally it Is ESP.

This is an oversimplification of the the IPSec VPN process.

Lets get started.  You can either use the VPN wizard on the FortiGate or you can create one from scratch on the cli.  I like to control my objects and normally use the cli.

Setting up the ike-tcp-port on the FortiGate.  This will only affect the tunnels where you set the transport to TCP , the default is UDP.

Before:

config system settings 
 "this commands is not present" set ike-tcp-port 443

After:

I created the VPN tunnel using the default configuration so that I can test that everything was working as planned.  Once it was tested and I could ping across, I changed the transport on both side of the Phase1-interface.

Once both sides were configured, we can see that the tunnel came up as planned.

Using a standard ipsec debug (see my troubleshooting ipsec post)

Here we can see that port 443 is being used by iked.

Remember that all other components of the VPN need to be in place (policies, routes, objects, etc)

In FortiOS 7.6 the option is available in the UI.

 

Hope this helps.

VRF Explained: Virtual Routing and Forwarding on FortiGate, Cisco and Juniper

VRF Explained: Virtual Routing and Forwarding on FortiGate, Cisco and Juniper

Learn virtual routing and forwarding (VRF), then build VRFs and route leaking on FortiGate, Cisco IOS XE and Juniper Junos with tested CLI.

Read More
FortiGate IPAM vs DHCP: Differences, Overlap, and What to Check Before You Turn IPAM On

FortiGate IPAM vs DHCP: Differences, Overlap, and What to Check Before You Turn IPAM On

FortiGate IPAM vs DHCP explained: what each one assigns, where they overlap, and what to check before enabling IPAM so it does not renumber...

Read More
Outlook CVE-2026-124194: Patch the Zero-Day That Leaks NTLM Hashes

Outlook CVE-2026-124194: Patch the Zero-Day That Leaks NTLM Hashes

Outlook CVE-2026-124194 leaks NTLMv2 hashes from one opened .msg file. Check fixed builds, force the Office update, and block SMB egress on FortiGate.

Read More