This Patch removes the IPv4 only limitation for NAT.
IPv6 NAT support was added in Linux Kernel 3.7 and iptables 1.4.17

Signed-off-by: Ulrich Weber <u...@ocedo.com>
---
 defaults.c |  8 ++++----
 zones.c    | 13 ++++++++-----
 2 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/defaults.c b/defaults.c
index 396cbf7..45d6de6 100644
--- a/defaults.c
+++ b/defaults.c
@@ -32,10 +32,10 @@ static const struct fw3_chain_spec default_chains[] = {
        C(ANY, FILTER, CUSTOM_CHAINS, "forwarding_rule"),
        C(ANY, FILTER, SYN_FLOOD,     "syn_flood"),
 
-       C(V4,  NAT,    UNSPEC,        "delegate_prerouting"),
-       C(V4,  NAT,    UNSPEC,        "delegate_postrouting"),
-       C(V4,  NAT,    CUSTOM_CHAINS, "prerouting_rule"),
-       C(V4,  NAT,    CUSTOM_CHAINS, "postrouting_rule"),
+       C(ANY, NAT,    UNSPEC,        "delegate_prerouting"),
+       C(ANY, NAT,    UNSPEC,        "delegate_postrouting"),
+       C(ANY, NAT,    CUSTOM_CHAINS, "prerouting_rule"),
+       C(ANY, NAT,    CUSTOM_CHAINS, "postrouting_rule"),
 
        C(ANY, MANGLE, UNSPEC,        "mssfix"),
        C(ANY, MANGLE, UNSPEC,        "fwmark"),
diff --git a/zones.c b/zones.c
index 062ff2a..6d4d566 100644
--- a/zones.c
+++ b/zones.c
@@ -36,8 +36,8 @@ static const struct fw3_chain_spec zone_chains[] = {
        C(ANY, FILTER, REJECT,        "zone_%s_dest_REJECT"),
        C(ANY, FILTER, DROP,          "zone_%s_dest_DROP"),
 
-       C(V4,  NAT,    SNAT,          "zone_%s_postrouting"),
-       C(V4,  NAT,    DNAT,          "zone_%s_prerouting"),
+       C(ANY, NAT,    SNAT,          "zone_%s_postrouting"),
+       C(ANY, NAT,    DNAT,          "zone_%s_prerouting"),
 
        C(ANY, RAW,    NOTRACK,       "zone_%s_notrack"),
 
@@ -45,8 +45,8 @@ static const struct fw3_chain_spec zone_chains[] = {
        C(ANY, FILTER, CUSTOM_CHAINS, "output_%s_rule"),
        C(ANY, FILTER, CUSTOM_CHAINS, "forwarding_%s_rule"),
 
-       C(V4,  NAT,    CUSTOM_CHAINS, "prerouting_%s_rule"),
-       C(V4,  NAT,    CUSTOM_CHAINS, "postrouting_%s_rule"),
+       C(ANY,  NAT,    CUSTOM_CHAINS, "prerouting_%s_rule"),
+       C(ANY,  NAT,    CUSTOM_CHAINS, "postrouting_%s_rule"),
 
        { }
 };
@@ -217,13 +217,16 @@ fw3_load_zones(struct fw3_state *state, struct 
uci_package *p)
                if (zone->masq)
                {
                        setbit(zone->flags[0], FW3_FLAG_SNAT);
+                       setbit(zone->flags[1], FW3_FLAG_SNAT);
                        zone->conntrack = true;
                }
 
                if (zone->custom_chains)
                {
                        setbit(zone->flags[0], FW3_FLAG_SNAT);
+                       setbit(zone->flags[1], FW3_FLAG_SNAT);
                        setbit(zone->flags[0], FW3_FLAG_DNAT);
+                       setbit(zone->flags[1], FW3_FLAG_DNAT);
                }
 
                setbit(zone->flags[0], fw3_to_src_target(zone->policy_input));
@@ -540,7 +543,7 @@ print_zone_rule(struct fw3_ipt_handle *handle, struct 
fw3_state *state,
                break;
 
        case FW3_TABLE_NAT:
-               if (zone->masq && handle->family == FW3_FAMILY_V4)
+               if (zone->masq)
                {
                        fw3_foreach(msrc, &zone->masq_src)
                        fw3_foreach(mdest, &zone->masq_dest)
-- 
1.8.3.2
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to