diff --git a/luci-app-omr-bypass/root/etc/init.d/omr-bypass b/luci-app-omr-bypass/root/etc/init.d/omr-bypass index bd99749b4..cf703c14d 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -57,10 +57,12 @@ _bypass_domain() { for ip in $resolve; do _bypass_ip $ip $intf done - resolve=$(dig aaaa +timeout=1 +nocmd +noall +answer $domain | awk '{print $5}') - for ip in $resolve; do - _bypass_ip $ip $intf - done + if [ "$disableipv6" != "1" ]; then + resolve=$(dig aaaa +timeout=1 +nocmd +noall +answer $domain | awk '{print $5}') + for ip in $resolve; do + _bypass_ip $ip $intf + done + fi fi if [ "$(uci -q get dhcp.@dnsmasq[0].ipset | grep /$domain/)" = "" ]; then uci -q add_list dhcp.@dnsmasq[0].ipset="/$domain/omr_dst_bypass_$intf,omr6_dst_bypass_$intf" @@ -92,22 +94,26 @@ _bypass_mac() { -A omr-bypass -m mac --mac-source $mac -j MARK --set-mark 0x539 COMMIT EOF - ip6tables-restore -w --wait=60 --noflush <<-EOF - *mangle - -A omr-bypass6 -m mac --mac-source $mac -j MARK --set-mark 0x6539 - COMMIT - EOF + if [ "$disableipv6" != "1" ]; then + ip6tables-restore -w --wait=60 --noflush <<-EOF + *mangle + -A omr-bypass6 -m mac --mac-source $mac -j MARK --set-mark 0x6539 + COMMIT + EOF + fi else iptables-restore -w --wait=60 --noflush <<-EOF *mangle -A omr-bypass -m mac --mac-source $mac -j MARK --set-mark 0x539$intfid COMMIT EOF - ip6tables-restore -w --wait=60 --noflush <<-EOF - *mangle - -A omr-bypass6 -m mac --mac-source $mac -j MARK --set-mark 0x6539$intfid - COMMIT - EOF + if [ "$disableipv6" != "1" ]; then + ip6tables-restore -w --wait=60 --noflush <<-EOF + *mangle + -A omr-bypass6 -m mac --mac-source $mac -j MARK --set-mark 0x6539$intfid + COMMIT + EOF + fi fi } @@ -162,6 +168,7 @@ _bypass_dest_port() { [ -z "$intf" ] && intf="all" [ -z "$dport" ] && return + dport="$(echo $dport | sed 's/-/:/')" [ -z "$proto" ] && return if [ "$intf" = "all" ]; then iptables-restore -w --wait=60 --noflush <<-EOF @@ -169,22 +176,26 @@ _bypass_dest_port() { -A omr-bypass --protocol $proto --destination-port $dport -j MARK --set-mark 0x539 COMMIT EOF - ip6tables-restore -w --wait=60 --noflush <<-EOF - *mangle - -A omr-bypass6 --protocol $proto --destination-port $dport -j MARK --set-mark 0x6539 - COMMIT - EOF + if [ "$disableipv6" != "1" ]; then + ip6tables-restore -w --wait=60 --noflush <<-EOF + *mangle + -A omr-bypass6 --protocol $proto --destination-port $dport -j MARK --set-mark 0x6539 + COMMIT + EOF + fi else iptables-restore -w --wait=60 --noflush <<-EOF *mangle -A omr-bypass --protocol $proto --destination-port $dport -j MARK --set-mark 0x539$intfid COMMIT EOF - ip6tables-restore -w --wait=60 --noflush <<-EOF - *mangle - -A omr-bypass6 --protocol $proto --destination-port $dport -j MARK --set-mark 0x6539$intfid - COMMIT - EOF + if [ "$disableipv6" != "1" ]; then + ip6tables-restore -w --wait=60 --noflush <<-EOF + *mangle + -A omr-bypass6 --protocol $proto --destination-port $dport -j MARK --set-mark 0x6539$intfid + COMMIT + EOF + fi fi } @@ -203,22 +214,26 @@ _bypass_proto() { -A omr-bypass-dpi -m ndpi --proto $proto -j MARK --set-mark 0x539 COMMIT EOF - ip6tables-restore -w --wait=60 --noflush <<-EOF - *mangle - -A omr-bypass6-dpi -m ndpi --proto $proto -j MARK --set-mark 0x6539 - COMMIT - EOF + if [ "$disableipv6" != "1" ]; then + ip6tables-restore -w --wait=60 --noflush <<-EOF + *mangle + -A omr-bypass6-dpi -m ndpi --proto $proto -j MARK --set-mark 0x6539 + COMMIT + EOF + fi else iptables-restore -w --wait=60 --noflush <<-EOF *mangle -A omr-bypass-dpi -m ndpi --proto $proto -j MARK --set-mark 0x539$intfid COMMIT EOF - ip6tables-restore -w --wait=60 --noflush <<-EOF - *mangle - -A omr-bypass6-dpi -m ndpi --proto $proto -j MARK --set-mark 0x6539$intfid - COMMIT - EOF + if [ "$disableipv6" != "1" ]; then + ip6tables-restore -w --wait=60 --noflush <<-EOF + *mangle + -A omr-bypass6-dpi -m ndpi --proto $proto -j MARK --set-mark 0x6539$intfid + COMMIT + EOF + fi fi # Use dnsmasq ipset to bypass domains of the proto local domains @@ -289,23 +304,25 @@ _intf_rule() { COMMIT EOF fi - if [ "$(ip6tables --wait=40 -t mangle -L | grep omr6_dst_bypass_$intf)" = "" ]; then - ip6tables-restore -w --wait=60 --noflush <<-EOF - *mangle - -I omr-bypass6 1 -m set --match-set omr6_dst_bypass_$intf dst -j MARK --set-mark 0x6539$count - COMMIT - EOF - fi - if [ "$(ip6tables --wait=40 -t nat -L | grep ss_rules6_pre_src)" != "" ] && [ "$(ip6tables --wait=40 -t nat -L | grep omr6_dst_bypass_$intf)" = "" ]; then - ip6tables-restore -w --wait=60 --noflush <<-EOF - *nat - -I ss_rules6_dst 1 -m set --match-set omr6_dst_bypass_$intf dst -j RETURN - -I ss_rules6_local_out 1 -m set --match-set omr6_dst_bypass_$intf dst -j RETURN - -I ss_rules6_local_out 2 -m mark --mark 0x6539$count -j RETURN - -I ss_rules6_pre_src 1 -m set --match-set omr6_dst_bypass_$intf dst -j MARK --set-mark 0x6539$count - -I ss_rules6_pre_src 2 -m mark --mark 0x6539$count -j RETURN - COMMIT - EOF + if [ "$disableipv6" != "1" ]; then + if [ "$(ip6tables --wait=40 -t mangle -L | grep omr6_dst_bypass_$intf)" = "" ]; then + ip6tables-restore -w --wait=60 --noflush <<-EOF + *mangle + -I omr-bypass6 1 -m set --match-set omr6_dst_bypass_$intf dst -j MARK --set-mark 0x6539$count + COMMIT + EOF + fi + if [ "$(ip6tables --wait=40 -t nat -L | grep ss_rules6_pre_src)" != "" ] && [ "$(ip6tables --wait=40 -t nat -L | grep omr6_dst_bypass_$intf)" = "" ]; then + ip6tables-restore -w --wait=60 --noflush <<-EOF + *nat + -I ss_rules6_dst 1 -m set --match-set omr6_dst_bypass_$intf dst -j RETURN + -I ss_rules6_local_out 1 -m set --match-set omr6_dst_bypass_$intf dst -j RETURN + -I ss_rules6_local_out 2 -m mark --mark 0x6539$count -j RETURN + -I ss_rules6_pre_src 1 -m set --match-set omr6_dst_bypass_$intf dst -j MARK --set-mark 0x6539$count + -I ss_rules6_pre_src 2 -m mark --mark 0x6539$count -j RETURN + COMMIT + EOF + fi fi uci -q set omr-bypass.$intf=interface uci -q set omr-bypass.$intf.id=$count @@ -353,6 +370,7 @@ start_service() { logger -t "omr-bypass" "Starting OMR-ByPass..." config_load omr-bypass config_foreach _add_proto proto + disableipv6="$(uci -q get openmptcprouter.settings.disable_ipv6)" [ -n "$RELOAD" ] && [ "$(ipset --list | grep omr_dst_bypass_all)" = "" ] && { unset RELOAD @@ -372,13 +390,15 @@ start_service() { -I PREROUTING 1 -m addrtype ! --dst-type LOCAL -j omr-bypass COMMIT EOF - ip6tables-save --counters | grep -v omr-bypass6 | ip6tables-restore -w --counters - ip6tables-restore -w --wait=60 --noflush <<-EOF - *mangle - :omr-bypass6 - - -I PREROUTING 1 -m addrtype ! --dst-type LOCAL -j omr-bypass6 - COMMIT - EOF + if [ "$disableipv6" != "1" ]; then + ip6tables-save --counters | grep -v omr-bypass6 | ip6tables-restore -w --counters + ip6tables-restore -w --wait=60 --noflush <<-EOF + *mangle + :omr-bypass6 - + -I PREROUTING 1 -m addrtype ! --dst-type LOCAL -j omr-bypass6 + COMMIT + EOF + fi config_load network config_foreach _intf_rule interface @@ -433,23 +453,25 @@ start_service() { COMMIT EOF fi - if [ "$(ip6tables --wait=40 -t mangle -L | grep 'match-set omr6_dst_bypass_all dst MARK set')" = "" ]; then - ip6tables-restore --wait=60 --noflush <<-EOF - *mangle - -A omr-bypass6 -m set --match-set omr6_dst_bypass_all dst -j MARK --set-mark 0x6539 - COMMIT - EOF - fi - if [ "$(ip6tables --wait=40 -t nat -L | grep ss_rules6_pre_src)" != "" ] && [ "$(ip6tables --wait=40 -t nat -L | grep omr6_dst_bypass_all)" = "" ]; then - ip6tables-restore --wait=60 --noflush <<-EOF - *nat - -I ss_rules6_dst 1 -m set --match-set omr6_dst_bypass_all dst -j RETURN - -I ss_rules6_local_out 1 -m set --match-set omr6_dst_bypass_all dst -j RETURN - -I ss_rules6_local_out 2 -m mark --mark 0x6539 -j RETURN - -I ss_rules6_pre_src 1 -m set --match-set omr6_dst_bypass_all dst -j MARK --set-mark 0x6539 - -I ss_rules6_pre_src 2 -m mark --mark 0x6539 -j RETURN - COMMIT - EOF + if [ "$disableipv6" != "1" ]; then + if [ "$(ip6tables --wait=40 -t mangle -L | grep 'match-set omr6_dst_bypass_all dst MARK set')" = "" ]; then + ip6tables-restore -w --wait=60 --noflush <<-EOF + *mangle + -A omr-bypass6 -m set --match-set omr6_dst_bypass_all dst -j MARK --set-mark 0x6539 + COMMIT + EOF + fi + if [ "$(ip6tables --wait=40 -t nat -L | grep ss_rules6_pre_src)" != "" ] && [ "$(ip6tables --wait=40 -t nat -L | grep omr6_dst_bypass_all)" = "" ]; then + ip6tables-restore -w --wait=60 --noflush <<-EOF + *nat + -I ss_rules6_dst 1 -m set --match-set omr6_dst_bypass_all dst -j RETURN + -I ss_rules6_local_out 1 -m set --match-set omr6_dst_bypass_all dst -j RETURN + -I ss_rules6_local_out 2 -m mark --mark 0x6539 -j RETURN + -I ss_rules6_pre_src 1 -m set --match-set omr6_dst_bypass_all dst -j MARK --set-mark 0x6539 + -I ss_rules6_pre_src 2 -m mark --mark 0x6539 -j RETURN + COMMIT + EOF + fi fi iptables-save --counters | grep -v omr-bypass-dpi | iptables-restore -w --counters @@ -460,14 +482,16 @@ start_service() { -A POSTROUTING -m addrtype --dst-type LOCAL -j omr-bypass-dpi COMMIT EOF - ip6tables-save --counters | grep -v omr-bypass6-dpi | ip6tables-restore --counters - ip6tables-restore --wait=60 --noflush <<-EOF - *mangle - :omr-bypass6-dpi - - -A PREROUTING -m addrtype ! --dst-type LOCAL -j omr-bypass6-dpi - -A POSTROUTING -m addrtype --dst-type LOCAL -j omr-bypass6-dpi - COMMIT - EOF + if [ "$disableipv6" != "1" ]; then + ip6tables-save --counters | grep -v omr-bypass6-dpi | ip6tables-restore -w --counters + ip6tables-restore -w --wait=60 --noflush <<-EOF + *mangle + :omr-bypass6-dpi - + -A PREROUTING -m addrtype ! --dst-type LOCAL -j omr-bypass6-dpi + -A POSTROUTING -m addrtype --dst-type LOCAL -j omr-bypass6-dpi + COMMIT + EOF + fi config_load omr-bypass config_foreach _bypass_proto dpis