How to set correct ipsec VPN MTU

Things to look at that I can think of:

  1. Make sure you have option mtu_fix '1' in your firewall for your VPN zone (wan and/or IPSec tunnel)
  2. Test which MTU works once you have the ipsec tunneling up and running using ping (see below section and pretty much what you did to determing the 1410 value)
  3. Set that MTU correctly for connecting devices:
    3.1. maybe using DHCP option if your are using IPSec without a tunnel and mtu_fix doesn't do the job for you
    3.2. by setting the MTU on the IPSec tunnel interface (for example vti) - if you use a tunnel

Some commands that could help testing
Typically, you can use ping to determine the highest MTU that works on your network (ping with the MTU value - 28). To run them on the openWRT side, you would have to install iputils-ping first to be able to have all the options.

for example, for an mtu of 1500, you want to ping with 1500 - 28 = 1472. To check it (example will use eth0.2), run:

ping -s 1472 -c1 -M do -I eth0.2 1.1.1.1

With a size too long (for example 1473), you would get an error like this:

ping: local error: Message too long, mtu=1500

To get the current mtu on an interface (e.g. eth0.2):

cat /sys/class/net/eth0.2/mtu

To temporarily set the mtu to a specific value on an interface to test if it works (worth a try on your wan interface):

ifconfig eth0.2 mtu 1472 up