diff --git a/package/gluon-mesh-vpn-wireguard/luasrc/lib/gluon/upgrade/400-mesh-vpn-wireguard b/package/gluon-mesh-vpn-wireguard/luasrc/lib/gluon/upgrade/400-mesh-vpn-wireguard
index b58ceb91068e8ad050077332e97a8700e50f72dd..420e04089140dbd153028768f6962b9e5b4b1fea 100755
--- a/package/gluon-mesh-vpn-wireguard/luasrc/lib/gluon/upgrade/400-mesh-vpn-wireguard
+++ b/package/gluon-mesh-vpn-wireguard/luasrc/lib/gluon/upgrade/400-mesh-vpn-wireguard
@@ -6,6 +6,8 @@ local util = require('gluon.util')
 local site = require 'gluon.site'
 local sp = util.subprocess
 local wait = require 'posix.sys.wait'
+local vpn_core = require('gluon.mesh-vpn')
+local _, active_vpn = vpn_core.get_active_provider()
 
 local wg_private_key = uci:get("network_gluon-old", 'wg_mesh', "private_key")
 
@@ -58,6 +60,8 @@ uci:section('network', 'interface', 'wg_mesh', {
 	proto = 'wireguard',
 	fwmark = 1,
 	private_key = wg_private_key,
+	-- Add 70 bytes for IPv6 VXLAN overhead
+	mtu = active_vpn.mtu() + 70,
 })
 
 uci:section('network', 'interface', 'mesh_wg_mesh', {