From d99a9ab770615e2f6600fabc322461200f0c7bf0 Mon Sep 17 00:00:00 2001 From: gSpot Date: Thu, 20 Nov 2025 18:32:13 +0300 Subject: [PATCH] Added IGNORE_LOCAL_IP option. --- autoinstall/2.x/autoinstall.sh | 8 ++-- luci-app-ruantiblock/Makefile | 2 +- ruantiblock-mod-lua/Makefile | 2 +- ruantiblock-mod-py/Makefile | 2 +- ruantiblock/Makefile | 2 +- .../files/etc/ruantiblock/ruantiblock.conf | 4 +- ruantiblock/files/usr/bin/ruantiblock | 44 ++++++++++++++----- .../files/usr/share/ruantiblock/nft_functions | 7 ++- 8 files changed, 49 insertions(+), 22 deletions(-) diff --git a/autoinstall/2.x/autoinstall.sh b/autoinstall/2.x/autoinstall.sh index 2e91c54..8a7b08e 100755 --- a/autoinstall/2.x/autoinstall.sh +++ b/autoinstall/2.x/autoinstall.sh @@ -10,9 +10,9 @@ LUCI_APP=1 HTTPS_DNS_PROXY=1 OWRT_VERSION="current" -RUAB_VERSION="2.1.9-r1" -RUAB_MOD_LUA_VERSION="2.1.9-r1" -RUAB_LUCI_APP_VERSION="2.1.9-r1" +RUAB_VERSION="2.1.10-r1" +RUAB_MOD_LUA_VERSION="2.1.10-r1" +RUAB_LUCI_APP_VERSION="2.1.10-r1" BASE_URL="https://raw.githubusercontent.com/gSpotx2f/packages-openwrt/master" PKG_DIR="/tmp" @@ -378,7 +378,7 @@ ConfirmProcessing() { printf "Bye...\n"; exit 0 ;; *) - InputError ConfirmLuciApp + InputError ConfirmProcessing ;; esac } diff --git a/luci-app-ruantiblock/Makefile b/luci-app-ruantiblock/Makefile index 476ffac..dda935d 100644 --- a/luci-app-ruantiblock/Makefile +++ b/luci-app-ruantiblock/Makefile @@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-ruantiblock -PKG_VERSION:=2.1.9 +PKG_VERSION:=2.1.10 PKG_RELEASE:=1 LUCI_TITLE:=LuCI support for ruantiblock LUCI_DEPENDS:=+ruantiblock diff --git a/ruantiblock-mod-lua/Makefile b/ruantiblock-mod-lua/Makefile index 7dfa75c..06c86ea 100644 --- a/ruantiblock-mod-lua/Makefile +++ b/ruantiblock-mod-lua/Makefile @@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=ruantiblock-mod-lua -PKG_VERSION:=2.1.9 +PKG_VERSION:=2.1.10 PKG_RELEASE:=1 PKG_MAINTAINER:=gSpot diff --git a/ruantiblock-mod-py/Makefile b/ruantiblock-mod-py/Makefile index 3edb694..f8a85f8 100644 --- a/ruantiblock-mod-py/Makefile +++ b/ruantiblock-mod-py/Makefile @@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=ruantiblock-mod-py -PKG_VERSION:=2.1.9 +PKG_VERSION:=2.1.10 PKG_RELEASE:=1 PKG_MAINTAINER:=gSpot diff --git a/ruantiblock/Makefile b/ruantiblock/Makefile index 380e2aa..01aea64 100644 --- a/ruantiblock/Makefile +++ b/ruantiblock/Makefile @@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=ruantiblock -PKG_VERSION:=2.1.9 +PKG_VERSION:=2.1.10 PKG_RELEASE:=1 PKG_MAINTAINER:=gSpot diff --git a/ruantiblock/files/etc/ruantiblock/ruantiblock.conf b/ruantiblock/files/etc/ruantiblock/ruantiblock.conf index 9b246de..1d69f91 100644 --- a/ruantiblock/files/etc/ruantiblock/ruantiblock.conf +++ b/ruantiblock/files/etc/ruantiblock/ruantiblock.conf @@ -20,6 +20,8 @@ PROXY_MODE=1 PROXY_LOCAL_CLIENTS=1 ### Удаление записей сетов перед началом обновления (для освобождения оперативной памяти перед обновлением сетов) (0 - выкл, 1 - вкл) NFTSET_CLEAR_SETS=0 +### Искоючить из обхода блокировок пакеты, у которых адрес назначения совпадает с любым IP адресом любого из интерфейсов роутера (0 - выкл, 1 - вкл) +IGNORE_LOCAL_IP=1 ### Режим фильтра хостов которым разрешено обходить блокировки (0 - выкл., 1 - только адреса из списка, 2 - любые адреса кроме присутствующих в списке) ALLOWED_HOSTS_MODE=0 ### Список IP адресов хостов для фильтра, через пробел (прим.: 192.168.0.10 192.168.0.15) @@ -81,7 +83,7 @@ ENABLE_FPROXY=0 ### Список IP адресов хостов для режима полного прокси, через пробел (прим.: 192.168.0.10 192.168.0.15) FPROXY_LIST="" ### Список приватных сетей для режима полного прокси, через пробел -FPROXY_PRIVATE_NETS="192.168.0.0/16 172.16.0.0/12 10.0.0.0/8" +FPROXY_PRIVATE_NETS="192.168.0.0/16 172.16.0.0/12 10.0.0.0/8 100.64.0.0/10 169.254.0.0/16" ### Режим безопасного обновления блэклиста. Скачивание во временный файл и затем замена основного. Увеличивает потребление памяти (0 - выкл, 1 - вкл) ENABLE_TMP_DOWNLOADS=0 ### Скачивать блэклисты через прокси diff --git a/ruantiblock/files/usr/bin/ruantiblock b/ruantiblock/files/usr/bin/ruantiblock index 7ed21ee..e1581c6 100755 --- a/ruantiblock/files/usr/bin/ruantiblock +++ b/ruantiblock/files/usr/bin/ruantiblock @@ -36,6 +36,8 @@ export PROXY_MODE=1 export PROXY_LOCAL_CLIENTS=0 ### Удаление записей сетов перед началом обновления (для освобождения оперативной памяти перед обновлением сетов) (0 - выкл, 1 - вкл) export NFTSET_CLEAR_SETS=0 +### Искоючить из обхода блокировок пакеты, у которых адрес назначения совпадает с любым IP адресом любого из интерфейсов роутера (0 - выкл, 1 - вкл) +export IGNORE_LOCAL_IP=1 ### Режим фильтра хостов которым разрешено обходить блокировки (0 - выкл., 1 - только адреса из списка, 2 - любые адреса кроме присутствующих в списке) export ALLOWED_HOSTS_MODE=0 ### Список IP адресов хостов для фильтра, через пробел (прим.: 192.168.0.10 192.168.0.15) @@ -117,7 +119,7 @@ export ENABLE_FPROXY=0 ### Список IP адресов хостов для режима полного прокси, через пробел (прим.: 192.168.0.10 192.168.0.15) export FPROXY_LIST="" ### Список приватных сетей для режима полного прокси, через пробел -export FPROXY_PRIVATE_NETS="192.168.0.0/16 172.16.0.0/12 10.0.0.0/8" +export FPROXY_PRIVATE_NETS="192.168.0.0/16 172.16.0.0/12 10.0.0.0/8 100.64.0.0/10 169.254.0.0/16" ### Режим безопасного обновления блэклиста. Скачивание во временный файл и затем замена основного. Увеличивает потребление памяти (0 - выкл, 1 - вкл) export ENABLE_TMP_DOWNLOADS=0 ### Скачивать блэклисты через прокси @@ -260,21 +262,23 @@ export IP_DATA_FILE_BYPASS="${DATA_DIR}/${NAME}_bypass.ip" export IP_DATA_FILE_USER_INSTANCES="${DATA_DIR}/${NAME}_user_instances.ip" export NFT_TABLE="ip r" export NFT_TABLE_DNSMASQ="4#ip#r" +export NFTSET_LOCAL_IP="local_ip" export NFTSET_ALLOWED_HOSTS="allowed_ip" export NFTSET_BYPASS_IP="bi" export NFTSET_BYPASS_FQDN="bd" export NFTSET_FPROXY="fproxy" -export NFTSET_FPROXY_PRIVATE="fproxy_private" +export NFTSET_FPROXY_LOCAL="fproxy_local" export NFTSET_BLLIST_PROXY="bllist_proxy" export NFTSET_ONION="onion" export NFTSET_CIDR="c" export NFTSET_IP="i" export NFTSET_DNSMASQ="d" +export NFTSET_LOCAL_IP_TYPE="ipv4_addr" export NFTSET_ALLOWED_HOSTS_TYPE="ipv4_addr" export NFTSET_BYPASS_IP_TYPE="ipv4_addr" export NFTSET_BYPASS_FQDN_TYPE="ipv4_addr" export NFTSET_FPROXY_TYPE="ipv4_addr" -export NFTSET_FPROXY_PRIVATE_TYPE="ipv4_addr" +export NFTSET_FPROXY_LOCAL_TYPE="ipv4_addr" export NFTSET_BLLIST_PROXY_TYPE="ipv4_addr" export NFTSET_CIDR_TYPE="ipv4_addr" export NFTSET_IP_TYPE="ipv4_addr" @@ -460,8 +464,26 @@ FormatNftSetElemsList() { printf "$1" | $AWK_CMD '{gsub(/[ ]+/, ",", $0); printf $0;}' } +UpdateLocalIpSets() { + local _local_ips _fproxy_private + _local_ips=$($IP_CMD -4 addr list 2> /dev/null | $AWK_CMD '/inet/{if($2 !~ /^(127|0)/) printf $2 ","}') + FlushNftSets "$NFTSET_LOCAL_IP" + if [ -n "$_local_ips" ]; then + $NFT_CMD add element $NFT_TABLE "$NFTSET_LOCAL_IP" { "$_local_ips" } + fi + FlushNftSets "$NFTSET_FPROXY_LOCAL" + _fproxy_private=$(FormatNftSetElemsList "$FPROXY_PRIVATE_NETS") + if [ -n "$_fproxy_private" ]; then + $NFT_CMD add element $NFT_TABLE "$NFTSET_FPROXY_LOCAL" { "$_fproxy_private" } + fi + if [ -n "$_local_ips" ]; then + $NFT_CMD add element $NFT_TABLE "$NFTSET_FPROXY_LOCAL" { "$_local_ips" } + fi +} + AddBaseNftSets() { - local _allowed_hosts _fproxy_private + local _allowed_hosts + $NFT_CMD add set $NFT_TABLE "$NFTSET_LOCAL_IP" { type "$NFTSET_LOCAL_IP_TYPE"\; policy "$NFTSET_POLICY_CIDR"\; flags interval\; auto-merge\; } $NFT_CMD add set $NFT_TABLE "$NFTSET_ALLOWED_HOSTS" { type "$NFTSET_ALLOWED_HOSTS_TYPE"\; policy "$NFTSET_POLICY_CIDR"\; flags interval\; auto-merge\; } _allowed_hosts=$(FormatNftSetElemsList "$ALLOWED_HOSTS_LIST") if [ -n "$_allowed_hosts" ]; then @@ -469,11 +491,8 @@ AddBaseNftSets() { fi $NFT_CMD add set $NFT_TABLE "$NFTSET_BYPASS_IP" { type "$NFTSET_BYPASS_IP_TYPE"\; size $NFTSET_MAXELEM_BYPASS_IP\; policy "$NFTSET_POLICY_CIDR"\; flags interval\; auto-merge\; } $NFT_CMD add set $NFT_TABLE "$NFTSET_BYPASS_FQDN" { type "$NFTSET_BYPASS_FQDN_TYPE"\; size $NFTSET_MAXELEM_BYPASS_FQDN\; policy "$NFTSET_POLICY_DNSMASQ"\; flags dynamic,timeout\; timeout "$NFTSET_DNSMASQ_TIMEOUT"\; } - $NFT_CMD add set $NFT_TABLE "$NFTSET_FPROXY_PRIVATE" { type "$NFTSET_FPROXY_PRIVATE_TYPE"\; policy "$NFTSET_POLICY_CIDR"\; flags interval\; auto-merge\; } - _fproxy_private=$(FormatNftSetElemsList "$FPROXY_PRIVATE_NETS") - if [ -n "$_fproxy_private" ]; then - $NFT_CMD add element $NFT_TABLE "$NFTSET_FPROXY_PRIVATE" { "$_fproxy_private" } - fi + $NFT_CMD add set $NFT_TABLE "$NFTSET_FPROXY_LOCAL" { type "$NFTSET_FPROXY_LOCAL_TYPE"\; policy "$NFTSET_POLICY_CIDR"\; flags interval\; auto-merge\; } + UpdateLocalIpSets } MakeInstanceNftSets() { @@ -576,7 +595,7 @@ UpdateBllistSets() { } AddUserInstancesNftRules() { - local _prio_offset=0 _pkts_mark=$PKTS_MARK_START _chain_prio_first _chain_prio_local _inst _vpn_route_table_id=$VPN_ROUTE_TABLE_ID_START _tproxy_route_table_id=$TPROXY_ROUTE_TABLE_ID_START _route_table_id + local _pkts_mark=$PKTS_MARK_START _inst _vpn_route_table_id=$VPN_ROUTE_TABLE_ID_START _tproxy_route_table_id=$TPROXY_ROUTE_TABLE_ID_START _route_table_id for _inst in $USER_INSTANCES_ALL_FNAMES do IncludeUserInstanceVars "$_inst" @@ -592,7 +611,6 @@ AddUserInstancesNftRules() { _pkts_mark=$(($_pkts_mark + 1)) NftInstanceAdd "\"$U_NAME\"" $_pkts_mark ${U_PROXY_MODE:=$INSTANCES_DEF_PROXY_MODE} ${U_TOR_TRANS_PORT:=$INSTANCES_DEF_TOR_TRANS_PORT} $_route_table_id "\"${U_IF_VPN:=$INSTANCES_DEF_IF_VPN}\"" ${U_T_PROXY_TYPE:=$INSTANCES_DEF_T_PROXY_TYPE} ${U_T_PROXY_PORT_TCP:=$INSTANCES_DEF_T_PROXY_PORT_TCP} ${U_T_PROXY_PORT_UDP:=$INSTANCES_DEF_T_PROXY_PORT_UDP} ${U_T_PROXY_ALLOW_UDP:=$INSTANCES_DEF_T_PROXY_ALLOW_UDP} ${U_ENABLE_ENTRIES_REMOTE_PROXY:=$INSTANCES_DEF_ENABLE_BLLIST_PROXY} ${U_ENABLE_FPROXY:=$INSTANCES_DEF_ENABLE_FPROXY} "\"$U_VPN_GW_IP\"" ClearUserInstanceVars - _prio_offset=$(($_prio_offset - 1)) done } @@ -651,7 +669,7 @@ SetNetConfig() { DropNetConfig() { DeleteNftRules FlushInstancesNftSets - FlushNftSets "$NFTSET_ALLOWED_HOSTS" "$NFTSET_FPROXY_PRIVATE" "$NFTSET_BLLIST_PROXY" "$NFTSET_BYPASS_IP" "$NFTSET_BYPASS_FQDN" + FlushNftSets "$NFTSET_LOCAL_IP" "$NFTSET_ALLOWED_HOSTS" "$NFTSET_FPROXY_LOCAL" "$NFTSET_BLLIST_PROXY" "$NFTSET_BYPASS_IP" "$NFTSET_BYPASS_FQDN" } DestroyNetConfig() { @@ -1213,6 +1231,7 @@ Reload() { echo " ${NAME} reload..." DeleteNftRules &> /dev/null AddNftRules &> /dev/null + UpdateLocalIpSets MakeToken } @@ -1333,6 +1352,7 @@ case "$1" in ;; update|force-update) Init + UpdateLocalIpSets if CheckDnsmasqConfDir; then Update "$1" return_code=$? diff --git a/ruantiblock/files/usr/share/ruantiblock/nft_functions b/ruantiblock/files/usr/share/ruantiblock/nft_functions index 6e48228..a452c7a 100644 --- a/ruantiblock/files/usr/share/ruantiblock/nft_functions +++ b/ruantiblock/files/usr/share/ruantiblock/nft_functions @@ -74,6 +74,8 @@ NftRouteAdd() { MakeLogRecord "debug" "nft_functions.NftRouteAdd: ${IP_CMD} rule add fwmark ${_pkts_mark} table ${_route_table_id} priority ${VPN_RULE_PRIO}" echo " nft_functions.NftRouteAdd: ${IP_CMD} route add default via ${_vpn_ip} table ${_route_table_id}" >&2 MakeLogRecord "debug" "nft_functions.NftRouteAdd: ${IP_CMD} route add default via ${_vpn_ip} table ${_route_table_id}" + echo " nft_functions.NftRouteAdd: ${IP_CMD} route add blackhole default table ${_route_table_id} metric 200" >&2 + MakeLogRecord "debug" "nft_functions.NftRouteAdd: ${IP_CMD} route add blackhole default table ${_route_table_id} metric 200" fi fi fi @@ -92,8 +94,11 @@ NftAddBaseChains() { $NFT_CMD add chain $NFT_TABLE "$NFT_FPROXY_CHAIN" { type filter hook prerouting priority ${_chain_prio_fproxy}\; policy accept\; } $NFT_CMD add chain $NFT_TABLE "$NFT_ALLOWED_HOSTS_CHAIN" { type filter hook prerouting priority ${_chain_prio_first}\; policy accept\; } NftCmdWrapper $NFT_CMD add rule $NFT_TABLE "$NFT_FPROXY_CHAIN" meta iif lo return - NftCmdWrapper $NFT_CMD add rule $NFT_TABLE "$NFT_FPROXY_CHAIN" ip daddr "@${NFTSET_FPROXY_PRIVATE}" return + NftCmdWrapper $NFT_CMD add rule $NFT_TABLE "$NFT_FPROXY_CHAIN" ip daddr "@${NFTSET_FPROXY_LOCAL}" return NftCmdWrapper $NFT_CMD add rule $NFT_TABLE "$NFT_ALLOWED_HOSTS_CHAIN" meta iif lo return + if [ "$IGNORE_LOCAL_IP" = "1" ]; then + NftCmdWrapper $NFT_CMD add rule $NFT_TABLE "$NFT_ALLOWED_HOSTS_CHAIN" ip daddr "@${NFTSET_LOCAL_IP}" return + fi NftCmdWrapper $NFT_CMD add rule $NFT_TABLE "$NFT_ALLOWED_HOSTS_CHAIN" "$NFT_ALLOWED_HOSTS_PATTERN" if [ "$BYPASS_MODE" = "1" ]; then for _set in "$NFTSET_BYPASS_IP" "$NFTSET_BYPASS_FQDN"