From 457062fb537f1aae92b81b0483fbe3db821b2291 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Sun, 8 Jan 2012 15:29:24 +0000 Subject: [package] firewall: add support for "local" port forwards which target an internal address on the router itself git-svn-id: svn://svn.openwrt.org/openwrt/trunk@29687 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/firewall/files/lib/core_redirect.sh | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'package/firewall/files/lib/core_redirect.sh') diff --git a/package/firewall/files/lib/core_redirect.sh b/package/firewall/files/lib/core_redirect.sh index a3e70d40d7..fe396c1c12 100644 --- a/package/firewall/files/lib/core_redirect.sh +++ b/package/firewall/files/lib/core_redirect.sh @@ -34,7 +34,17 @@ fw_load_redirect() { return 0 } - fwdchain="zone_${redirect_src}${redirect_dest_ip:+_forward}" + fwdopt="" + fwdchain="" + + # Check whether only ports are given or whether the given dest ip is local, + # in this case match only DNATed traffic and allow it on input, not forward + if [ -z "$redirect_dest_ip" ] || /sbin/ifconfig | grep -qE "addr:${redirect_dest_ip//./\\.}\b"; then + fwdopt="-m conntrack --ctstate DNAT" + fwdchain="zone_${redirect_src}" + else + fwdchain="zone_${redirect_src}_forward" + fi natopt="--to-destination" natchain="zone_${redirect_src}_prerouting" @@ -106,10 +116,11 @@ fw_load_redirect() { fw add $mode f ${fwdchain:-forward} ACCEPT + \ { $redirect_src_ip $redirect_dest_ip } { \ - $srcaddr ${destaddr:--m conntrack --ctstate DNAT} \ + $srcaddr $destaddr \ $pr \ $srcports $destports \ ${sm:+-m mac $sm} \ + $fwdopt \ $redirect_extra \ } done -- cgit v1.2.3