diff --git a/package/gluon-radv-filterd/luasrc/lib/gluon/ebtables/400-radv-filterd b/package/gluon-radv-filterd/luasrc/lib/gluon/ebtables/400-radv-filterd
index 4e4f247bcd023fb1045def0ab4bb7a3617bc13c9..afe06299a8b1694883abc7b45a4fc425d415dd1d 100644
--- a/package/gluon-radv-filterd/luasrc/lib/gluon/ebtables/400-radv-filterd
+++ b/package/gluon-radv-filterd/luasrc/lib/gluon/ebtables/400-radv-filterd
@@ -2,6 +2,7 @@ chain('RADV_FILTER', 'DROP')
 rule 'FORWARD -p IPv6 -i bat0 --ip6-protocol ipv6-icmp --ip6-icmp-type router-advertisement -j RADV_FILTER'
 rule 'RADV_FILTER -j ACCEPT'
 
+chain('REDIRECT_FILTER', 'RETURN', 'nat')
 chain('REDIRECT', 'RETURN', 'nat')
-rule('PREROUTING -p IPv6 --logical-in br-client --ip6-destination 2000::/3 -j REDIRECT', 'nat')
-rule('OUTPUT -p IPv6 --logical-out br-client --ip6-destination 2000::/3 -j REDIRECT', 'nat')
+rule('PREROUTING -p IPv6 --logical-in br-client --ip6-destination 2000::/3 -j REDIRECT_FILTER', 'nat')
+rule('OUTPUT -p IPv6 --logical-out br-client --ip6-destination 2000::/3 -j REDIRECT_FILTER', 'nat')
diff --git a/package/gluon-radv-filterd/src/gluon-radv-filterd.c b/package/gluon-radv-filterd/src/gluon-radv-filterd.c
index a0b363af006c4d3b12a60c47871715f3e3e6766d..3506b351291cae1193dd2cb8d9015c3479e3dd10 100644
--- a/package/gluon-radv-filterd/src/gluon-radv-filterd.c
+++ b/package/gluon-radv-filterd/src/gluon-radv-filterd.c
@@ -164,6 +164,10 @@ static void cleanup(void) {
 				{ "ebtables-tiny", "-A", G.chain, "-j", "ACCEPT", NULL }))
 			DEBUG_MSG("warning: adding new rule to ebtables chain %s failed", G.chain);
 
+		if (fork_execvp_timeout(&timeout, "ebtables-tiny", (const char *[])
+				{ "ebtables-tiny", "-t", "nat", "-F", "REDIRECT_FILTER", NULL}))
+			DEBUG_MSG("warning: flushing ebtables nat chain REDIRECT_FILTER failed", G.chain);
+
 		if (fork_execvp_timeout(&timeout, "ebtables-tiny", (const char *[])
 				{ "ebtables-tiny", "-t", "nat", "-F", "REDIRECT", NULL}))
 			DEBUG_MSG("warning: flushing ebtables nat chain REDIRECT failed", G.chain);
@@ -674,6 +678,13 @@ static void update_redirect(void) {
 		}
 		snprintf(prefix, sizeof(prefix), "%s/64", addr);
 
+		if (fork_execvp_timeout(&timeout, "ebtables-tiny", (const char *[])
+			{ "ebtables-tiny", "-t", "nat", "-A", "REDIRECT_FILTER",
+			"-d", mac,
+			"-j", "REDIRECT",
+			NULL }))
+		error_message(0, 0, "warning: adding new rule to ebtables chain REDIRECT_FILTER failed");
+
 		if (fork_execvp_timeout(&timeout, "ebtables-tiny", (const char *[])
 			{ "ebtables-tiny", "-t", "nat", "-A", "REDIRECT",
 			"-p", "IPv6",