diff --git a/docs/user/site.rst b/docs/user/site.rst
index 689dd51d888e1881e11961464b407777cf9d7d30..68705ce4672c1319842f28a967f96c7704cd58b8 100644
--- a/docs/user/site.rst
+++ b/docs/user/site.rst
@@ -119,6 +119,9 @@ fastd_mesh_vpn
 mesh_on_wan : optional
     Enables the mesh on the WAN port (``true`` or ``false``).
 
+mesh_on_lan : optional
+    Enables the mesh on the LAN port (``true`` or ``false``).
+
 autoupdater : package
     Configuration for the autoupdater feature of Gluon.
     ::
diff --git a/package/gluon-mesh-batman-adv-core/check_site.lua b/package/gluon-mesh-batman-adv-core/check_site.lua
index baed26cb15a1cf3d04a784af6600307ea049cfa9..e76ca9e9c87609cbf72cf182762698d5c8f0b19f 100644
--- a/package/gluon-mesh-batman-adv-core/check_site.lua
+++ b/package/gluon-mesh-batman-adv-core/check_site.lua
@@ -13,3 +13,4 @@ for _, config in ipairs({'wifi24', 'wifi5'}) do
 end
 
 need_boolean('mesh_on_wan', false)
+need_boolean('mesh_on_lan', false)
diff --git a/package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/310-gluon-mesh-batman-adv-core-mesh b/package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/310-gluon-mesh-batman-adv-core-mesh
index c9638c4b4075cc915519b1631b2bc4f433530833..a51b20e235788d905a5fdeec203daddb2a1ae86a 100755
--- a/package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/310-gluon-mesh-batman-adv-core-mesh
+++ b/package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/310-gluon-mesh-batman-adv-core-mesh
@@ -2,6 +2,7 @@
 
 local sysconfig = require 'gluon.sysconfig'
 local sysctl = require 'gluon.sysctl'
+local site = require 'gluon.site_config'
 local uci = require('luci.model.uci').cursor()
 
 
@@ -20,7 +21,7 @@ uci:commit('batman-adv')
 if not uci:get('network', 'client') then
   local ifname
 
-  if sysconfig.lan_ifname then
+  if sysconfig.lan_ifname and not site.mesh_on_lan then
     ifname = sysconfig.lan_ifname .. ' bat0'
   else
     ifname = 'bat0'
diff --git a/package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/340-gluon-mesh-batman-adv-core-mesh-on-lan b/package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/340-gluon-mesh-batman-adv-core-mesh-on-lan
new file mode 100755
index 0000000000000000000000000000000000000000..f9cbde031faeb495b4c04f7eb02ab91171420891
--- /dev/null
+++ b/package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/340-gluon-mesh-batman-adv-core-mesh-on-lan
@@ -0,0 +1,23 @@
+#!/usr/bin/lua
+
+local site = require 'gluon.site_config'
+local uci = require 'luci.model.uci'
+local util = require 'gluon.util'
+local sysconfig = require 'gluon.sysconfig'
+
+local c = uci.cursor()
+
+if sysconfig.lan_ifname then
+  if not c:get('network', 'mesh_lan') then
+    c:section('network', 'interface', 'mesh_lan',
+              { ifname  = sysconfig.lan_ifname
+              , proto   = 'batadv'
+              , mesh    = 'bat0'
+              , macaddr = util.generate_mac(1, 1)
+              , auto    = site.mesh_on_lan and 1 or 0
+              })
+  end
+end
+
+c:save('network')
+c:commit('network')