miniupnpd: Various IPv6 related fixes to scripts (IPv6-only, multi-uplink, ..)
authorMarkus Stenberg <markus.stenberg@iki.fi>
Tue, 3 Jun 2014 08:10:01 +0000 (11:10 +0300)
committerMarkus Stenberg <markus.stenberg@iki.fi>
Tue, 3 Jun 2014 08:10:01 +0000 (11:10 +0300)
miniupnpd/files/firewall.include
miniupnpd/files/miniupnpd.defaults
miniupnpd/files/miniupnpd.hotplug
miniupnpd/files/miniupnpd.init

index bc108d5f9d348921206ec9d6e2b0ebacc7f743ab..5294c45db44113941aadfa9a9af33e0ede91da5f 100644 (file)
@@ -1,6 +1,14 @@
 #!/bin/sh
 # miniupnpd integration for firewall3
 
+# Note: Correct way to do this would be probably to use
+# /lib/functions/network.sh, and use network_find_wan{,6}, and then
+# network_get_device, then determine their zones using fw3 -q network
+# etc. However, network_find_wan* return only one device, and
+# frequently incorrect one if multiple ISPs are in use. So this
+# current ugly solution works, although perhaps makes holes where it
+# shouldn't (if so, do override it in e.g. firewall.user)
+
 IP6TABLES=/usr/sbin/ip6tables
 
 iptables -t filter -N MINIUPNPD 2>/dev/null
@@ -8,31 +16,11 @@ iptables -t nat -N MINIUPNPD 2>/dev/null
 
 [ -x $IP6TABLES ] && $IP6TABLES -t filter -N MINIUPNPD 2>/dev/null
 
-. /lib/functions/network.sh
-
-add_extzone_rules() {
-    local ext_zone=$1
+# IPv4 - due to NAT, need to add both to nat and filter table
+iptables -t filter -I delegate_forward 2 -j MINIUPNPD
+iptables -t nat -I delegate_prerouting 2 -j MINIUPNPD
 
-    # IPv4 - due to NAT, need to add both to nat and filter table
-    iptables -t filter -I zone_${ext_zone}_forward -j MINIUPNPD
-    iptables -t nat -I zone_${ext_zone}_prerouting -j MINIUPNPD
-
-    # IPv6 if available - filter only
-    [ -x $IP6TABLES ] && {
-        $IP6TABLES -t filter -I zone_${ext_zone}_forward -j MINIUPNPD
-    }
+# IPv6 if available - filter only
+[ -x $IP6TABLES ] && {
+    $IP6TABLES -t filter -I delegate_forward 2 -j MINIUPNPD
 }
-
-network_find_wan wan_iface
-network_get_device wan_device $wan_iface
-
-for ext_zone in $(fw3 -q device "$wan_device"); do
-    add_extzone_rules $ext_zone
-done
-
-for ext_iface in $(uci -q get upnpd.config.external_iface); do
-       for ext_zone in $(fw3 -q network "$ext_iface"); do
-            add_extzone_rules $ext_zone
-       done
-done
-
index c6bc19a876e95cf13215972f147e7882030b9248..7271389d3b81f13eaa6f164270097d5aca93ffe7 100644 (file)
@@ -5,7 +5,7 @@ uci -q batch <<-EOT
        set firewall.miniupnpd=include
        set firewall.miniupnpd.type=script
        set firewall.miniupnpd.path=/usr/share/miniupnpd/firewall.include
-       set firewall.miniupnpd.family=IPv4
+       set firewall.miniupnpd.family=any
        set firewall.miniupnpd.reload=1
        commit firewall
 EOT
index 71a7f45452037890e4c771bffdefea5c3f540fde..7ff363a4ff8360a85e4d9261599f660886feffe3 100644 (file)
@@ -1,14 +1,28 @@
 #!/bin/sh
 
-/etc/init.d/miniupnpd enabled && [ "$ACTION" = "ifup" ] && {
-       local iface
-        local ext_iface
-
-        . /lib/functions/network.sh
-        network_find_wan ext_iface
-
-       for iface in $ext_iface $(uci_get upnpd config internal_iface; uci_get upnpd config external_iface); do
-               [ "$INTERFACE" = "$iface" ] && /etc/init.d/miniupnpd restart
-                exit 0
-       done
-}
+if [ ! /etc/init.d/miniupnpd enabled ]
+then
+    exit 0
+fi
+
+. /lib/functions/service.sh
+
+# If miniupnpd is not running:
+# - check on _any_ event (even updates may contribute to network_find_wan*)
+# If miniupnpd _is_ running:
+# - check only on ifup
+
+[ ! "$ACTION" = "ifup" ] && service_check /usr/sbin/miniupnpd && exit 0
+
+local iface
+local ext_iface
+local ext_iface6
+
+. /lib/functions/network.sh
+network_find_wan ext_iface
+network_find_wan6 ext_iface6
+
+for iface in $ext_iface $ext_iface6 $(uci_get upnpd config internal_iface; uci_get upnpd config external_iface); do
+    [ "$INTERFACE" = "$iface" ] && /etc/init.d/miniupnpd restart
+    exit 0
+done
index caa69ad8ef638c6657d4aaa7948b0c3bec2a74c2..a10924401c1b5f1c50b6f2e7f6f222e0651f6866 100644 (file)
@@ -94,6 +94,7 @@ start() {
        local ifname
 
         [ -n "$extiface" ] || network_find_wan extiface
+        [ -n "$extiface" ] || network_find_wan6 extiface
 
        network_get_device ifname ${extiface}