diff --git a/zones.c b/zones.c
index 505ab20..44500d5 100644
--- a/zones.c
+++ b/zones.c
@@ -708,8 +708,18 @@ print_zone_rule(struct fw3_ipt_handle *handle, struct fw3_state *state,
 				{
 					r = fw3_ipt_rule_new(handle);
 					fw3_ipt_rule_src_dest(r, msrc, mdest);
+#ifdef USE_FULLCONENAT
+					fw3_ipt_rule_target(r, "FULLCONENAT");
+#else
 					fw3_ipt_rule_target(r, "MASQUERADE");
+#endif
 					fw3_ipt_rule_append(r, "zone_%s_postrouting", zone->name);
+#ifdef USE_FULLCONENAT
+					r = fw3_ipt_rule_new(handle);
+					fw3_ipt_rule_src_dest(r, msrc, mdest);
+					fw3_ipt_rule_target(r, "FULLCONENAT");
+					fw3_ipt_rule_append(r, "zone_%s_prerouting", zone->name);
+#endif
 				}
 			}
 		}
