diff --git a/package/gluon-mesh-layer3-common/Makefile b/package/gluon-mesh-layer3-common/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..45ad2f577a0f1ef334459816283f12c97c085f39
--- /dev/null
+++ b/package/gluon-mesh-layer3-common/Makefile
@@ -0,0 +1,12 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=gluon-mesh-layer3-common
+
+include ../gluon.mk
+
+define Package/gluon-mesh-layer3-common
+  TITLE:=Layer3 common files
+  DEPENDS:=+gluon-core +gluon-mmfd +firewall
+endef
+
+$(eval $(call BuildPackageGluon,gluon-mesh-layer3-common))
diff --git a/package/gluon-mesh-layer3-common/luasrc/lib/gluon/upgrade/310-layer3-firewall b/package/gluon-mesh-layer3-common/luasrc/lib/gluon/upgrade/310-layer3-firewall
new file mode 100755
index 0000000000000000000000000000000000000000..b6f5338492dcb791d0d69c903b1df2849a3baf00
--- /dev/null
+++ b/package/gluon-mesh-layer3-common/luasrc/lib/gluon/upgrade/310-layer3-firewall
@@ -0,0 +1,25 @@
+#!/usr/bin/lua
+
+local uci = require('simple-uci').cursor()
+
+uci:section('firewall', 'forwarding', 'fcc', {
+	src = 'loc_client',
+	dest = 'loc_client',
+})
+
+uci:section('firewall', 'forwarding', 'fcm', {
+	src = 'loc_client',
+	dest = 'mesh',
+})
+
+uci:section('firewall', 'forwarding', 'fmc', {
+	src = 'mesh',
+	dest = 'loc_client',
+})
+
+uci:section('firewall', 'forwarding', 'fmm', {
+	src = 'mesh',
+	dest = 'mesh',
+})
+
+uci:save('firewall')