commit
7565839fc4
16
docs/package/gluon-ebtables-segment-mld.rst
Normal file
16
docs/package/gluon-ebtables-segment-mld.rst
Normal file
@ -0,0 +1,16 @@
|
||||
gluon-ebtables-segment-mld
|
||||
==========================
|
||||
|
||||
These filters drop IGMP/MLD packets before they enter the mesh and
|
||||
filter any IGMP/MLD packets coming from the mesh.
|
||||
|
||||
IGMP/MLD have the concept of a local, elected Querier. For more
|
||||
decentralization and increased robustness, the idea of this package is
|
||||
to split the IGMP/MLD domain a querier is responsible for, allowing to
|
||||
have a querier per node. The split IGMP/MLD domain will also reduce
|
||||
overhead for this packet type, increasing scalability.
|
||||
|
||||
Beware of the consequences of using this package though: You might need
|
||||
to explicitly, manually mark ports on snooping switches leading towards
|
||||
your mesh node as multicast router ports for now (Multicast Router
|
||||
Discovery, MRD, not implemented yet).
|
@ -1 +0,0 @@
|
||||
chain('MULTICAST_OUT', 'DROP')
|
@ -1,5 +1,3 @@
|
||||
rule 'MULTICAST_OUT -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type echo-request -j DROP'
|
||||
rule 'MULTICAST_OUT -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type 139 -j DROP'
|
||||
rule 'MULTICAST_OUT -p IPv6 --ip6-protocol ipv6-icmp -j RETURN'
|
||||
|
||||
rule 'MULTICAST_OUT -p IPv6 --ip6-protocol 0 -j RETURN' -- hop-by-hop
|
||||
rule 'MULTICAST_OUT_ICMPV6 -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type echo-request -j RETURN'
|
||||
rule 'MULTICAST_OUT_ICMPV6 -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type 139 -j RETURN' -- ICMP Node Information Query
|
||||
rule 'MULTICAST_OUT_ICMPV6 -j ACCEPT'
|
||||
|
@ -1,2 +0,0 @@
|
||||
rule 'FORWARD --logical-out br-client -o bat0 -d Multicast -j MULTICAST_OUT'
|
||||
rule 'OUTPUT --logical-out br-client -o bat0 -d Multicast -j MULTICAST_OUT'
|
@ -0,0 +1 @@
|
||||
rule ('MULTICAST_OUT -j DROP')
|
51
package/gluon-ebtables-segment-mld/Makefile
Normal file
51
package/gluon-ebtables-segment-mld/Makefile
Normal file
@ -0,0 +1,51 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=gluon-ebtables-segment-mld
|
||||
PKG_VERSION:=1
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/gluon-ebtables-segment-mld
|
||||
SECTION:=gluon
|
||||
CATEGORY:=Gluon
|
||||
TITLE:=Ebtables filters for IGMP/MLD packets
|
||||
DEPENDS:=+gluon-core +gluon-ebtables
|
||||
endef
|
||||
|
||||
define Package/gluon-ebtables-segment-mld/description
|
||||
Gluon community wifi mesh firmware framework: Ebtables filters for
|
||||
IGMP/MLD packets
|
||||
|
||||
These filters drop IGMP/MLD packets before they enter the mesh and
|
||||
filter any IGMP/MLD packets coming from the mesh.
|
||||
|
||||
IGMP/MLD have the concept of a local, elected Querier. For more
|
||||
decentralization and increased robustness, the idea of this package is
|
||||
to split the IGMP/MLD domain a querier is responsible for, allowing to
|
||||
have a querier per node. The split IGMP/MLD domain will also reduce
|
||||
overhead for this packet type, increasing scalability.
|
||||
|
||||
Beware of the consequences of using this package though: You might need
|
||||
to explicitly, manually mark ports on snooping switches leading towards
|
||||
your mesh node as multicast router ports for now (Multicast Router
|
||||
Discovery, MRD, not implemented yet).
|
||||
endef
|
||||
|
||||
define Build/Prepare
|
||||
mkdir -p $(PKG_BUILD_DIR)
|
||||
endef
|
||||
|
||||
define Build/Configure
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
endef
|
||||
|
||||
define Package/gluon-ebtables-segment-mld/install
|
||||
$(CP) ./files/* $(1)/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,gluon-ebtables-segment-mld))
|
@ -0,0 +1,2 @@
|
||||
chain('MULTICAST_IN', 'RETURN', 'nat')
|
||||
chain('MULTICAST_IN_ICMPV6', 'RETURN', 'nat')
|
@ -0,0 +1,2 @@
|
||||
rule ('PREROUTING -d Multicast --logical-in br-client -i bat0 -j MULTICAST_IN', 'nat')
|
||||
rule ('MULTICAST_IN -p IPv6 --ip6-protocol ipv6-icmp -j MULTICAST_IN_ICMPV6', 'nat')
|
@ -0,0 +1,2 @@
|
||||
rule('MULTICAST_OUT -p IPv4 --ip-protocol igmp -j DROP')
|
||||
rule('MULTICAST_IN -p IPv4 --ip-protocol igmp -j DROP', 'nat')
|
@ -0,0 +1,9 @@
|
||||
rule('MULTICAST_OUT_ICMPV6 -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type 130 -j DROP') -- MLD Query
|
||||
rule('MULTICAST_OUT_ICMPV6 -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type 131 -j DROP') -- MLDv1 Report
|
||||
rule('MULTICAST_OUT_ICMPV6 -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type 132 -j DROP') -- MLDv1 Done
|
||||
rule('MULTICAST_OUT_ICMPV6 -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type 143 -j DROP') -- MLDv2 Report
|
||||
|
||||
rule('MULTICAST_IN_ICMPV6 -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type 130 -j DROP', 'nat') -- MLD Query
|
||||
rule('MULTICAST_IN_ICMPV6 -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type 131 -j DROP', 'nat') -- MLDv1 Report
|
||||
rule('MULTICAST_IN_ICMPV6 -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type 132 -j DROP', 'nat') -- MLDv1 Done
|
||||
rule('MULTICAST_IN_ICMPV6 -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type 143 -j DROP', 'nat') -- MLDv2 Report
|
@ -24,12 +24,15 @@ exec_file() {
|
||||
local file="$1"
|
||||
|
||||
/usr/bin/lua -e "
|
||||
function rule(command)
|
||||
function rule(command, table)
|
||||
table = table or 'filter'
|
||||
os.execute($EBTABLES_RULE)
|
||||
end
|
||||
function chain(name, policy)
|
||||
function chain(name, policy, table)
|
||||
table = table or 'filter'
|
||||
os.execute($EBTABLES_CHAIN)
|
||||
end
|
||||
|
||||
" "$file"
|
||||
}
|
||||
|
||||
@ -48,8 +51,8 @@ exec_all() {
|
||||
|
||||
start() {
|
||||
(
|
||||
export EBTABLES_RULE='"ebtables -A " .. command'
|
||||
export EBTABLES_CHAIN='"ebtables -N " .. name .. " -P " .. policy'
|
||||
export EBTABLES_RULE='"ebtables -t " .. table .. " -A " .. command'
|
||||
export EBTABLES_CHAIN='"ebtables -t " .. table .. " -N " .. name .. " -P " .. policy'
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
exec_all ''
|
||||
@ -61,8 +64,8 @@ start() {
|
||||
|
||||
stop() {
|
||||
(
|
||||
export EBTABLES_RULE='"ebtables -D " .. command'
|
||||
export EBTABLES_CHAIN='"ebtables -X " .. name'
|
||||
export EBTABLES_RULE='"ebtables -t " .. table .. " -D " .. command'
|
||||
export EBTABLES_CHAIN='"ebtables -t " .. table .. " -X " .. name'
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
exec_all '-r'
|
||||
|
@ -1,2 +1,5 @@
|
||||
chain('IN_ONLY', 'RETURN')
|
||||
chain('OUT_ONLY', 'RETURN')
|
||||
|
||||
chain('MULTICAST_OUT', 'RETURN')
|
||||
chain('MULTICAST_OUT_ICMPV6', 'RETURN')
|
||||
|
@ -0,0 +1,4 @@
|
||||
rule 'OUTPUT -d Multicast --logical-out br-client -o bat0 -j MULTICAST_OUT'
|
||||
rule 'FORWARD -d Multicast --logical-out br-client -o bat0 -j MULTICAST_OUT'
|
||||
|
||||
rule 'MULTICAST_OUT -p IPv6 --ip6-protocol ipv6-icmp -j MULTICAST_OUT_ICMPV6'
|
Loading…
Reference in New Issue
Block a user