mirror of
https://github.com/gSpotx2f/ruantiblock_openwrt.git
synced 2026-05-14 22:50:58 +00:00
Timeout update for dnsmasq set
This commit is contained in:
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_VERSION:=1.2-0
|
PKG_VERSION:=1.2-1
|
||||||
LUCI_TITLE:=LuCI support for ruantiblock
|
LUCI_TITLE:=LuCI support for ruantiblock
|
||||||
LUCI_DEPENDS:=+ruantiblock
|
LUCI_DEPENDS:=+ruantiblock
|
||||||
LUCI_PKGARCH:=all
|
LUCI_PKGARCH:=all
|
||||||
|
|||||||
@@ -47,10 +47,9 @@ return view.extend({
|
|||||||
if(data.rules.nftables && data.rules.nftables.length > 1) {
|
if(data.rules.nftables && data.rules.nftables.length > 1) {
|
||||||
for(let i of data.rules.nftables) {
|
for(let i of data.rules.nftables) {
|
||||||
if(!i.rule) continue;
|
if(!i.rule) continue;
|
||||||
|
|
||||||
let set, bytes;
|
let set, bytes;
|
||||||
i.rule.expr.forEach(e => {
|
i.rule.expr.forEach(e => {
|
||||||
if(e.match) {
|
if(e.match && e.match.left && e.match.left.payload) {
|
||||||
set = e.match.right.replace('@', '');
|
set = e.match.right.replace('@', '');
|
||||||
}
|
}
|
||||||
else if(e.counter) {
|
else if(e.counter) {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk
|
|||||||
|
|
||||||
PKG_NAME:=ruantiblock
|
PKG_NAME:=ruantiblock
|
||||||
PKG_VERSION:=1.2
|
PKG_VERSION:=1.2
|
||||||
PKG_RELEASE:=0
|
PKG_RELEASE:=1
|
||||||
PKG_MAINTAINER:=gSpot <https://github.com/gSpotx2f/ruantiblock_openwrt>
|
PKG_MAINTAINER:=gSpot <https://github.com/gSpotx2f/ruantiblock_openwrt>
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ BYPASS_IP_LIST=""
|
|||||||
IF_VPN="tun0"
|
IF_VPN="tun0"
|
||||||
### Порт прозрачного прокси Tor (параметр TransPort в torrc)
|
### Порт прозрачного прокси Tor (параметр TransPort в torrc)
|
||||||
TOR_TRANS_PORT=9040
|
TOR_TRANS_PORT=9040
|
||||||
### Отправлять в Tor UDP-трафик (0 - вкл, 1 - выкл)
|
### Отправлять в Tor UDP-трафик (0 - выкл, 1 - вкл)
|
||||||
TOR_ALLOW_UDP=0
|
TOR_ALLOW_UDP=0
|
||||||
### DNS-сервер для резолвинга в домене .onion (Tor)
|
### DNS-сервер для резолвинга в домене .onion (Tor)
|
||||||
ONION_DNS_ADDR="127.0.0.1#9053"
|
ONION_DNS_ADDR="127.0.0.1#9053"
|
||||||
@@ -42,16 +42,8 @@ VPN_RULE_PRIO=1000
|
|||||||
T_PROXY_PORT_TCP=1100
|
T_PROXY_PORT_TCP=1100
|
||||||
### UDP порт прокси в режиме прозрачного прокси
|
### UDP порт прокси в режиме прозрачного прокси
|
||||||
T_PROXY_PORT_UDP=1100
|
T_PROXY_PORT_UDP=1100
|
||||||
### Отправлять в прозрачный прокси UDP-трафик (0 - вкл, 1 - выкл)
|
### Отправлять в прозрачный прокси UDP-трафик (0 - выкл, 1 - вкл)
|
||||||
T_PROXY_ALLOW_UDP=0
|
T_PROXY_ALLOW_UDP=0
|
||||||
### Приоритет правила отбора пакетов nftables для конфигупации Tor или прозрачного прокси
|
|
||||||
NFT_PRIO_NAT="dstnat - 10"
|
|
||||||
### Приоритет правила отбора пакетов nftables для трафика локальных клиентов в конфигупации Tor или прозрачного прокси
|
|
||||||
NFT_PRIO_NAT_LOCAL="filter - 10"
|
|
||||||
### Приоритет правила отбора пакетов nftables для VPN-конфигурации
|
|
||||||
NFT_PRIO_ROUTE="mangle + 10"
|
|
||||||
### Приоритет правила отбора пакетов nftables для трафика локальных клиентов в VPN-конфигурации
|
|
||||||
NFT_PRIO_ROUTE_LOCAL="mangle + 10"
|
|
||||||
### Добавление в список блокировок пользовательских записей из файла $USER_ENTRIES_FILE (0 - выкл, 1 - вкл)
|
### Добавление в список блокировок пользовательских записей из файла $USER_ENTRIES_FILE (0 - выкл, 1 - вкл)
|
||||||
### В $DATA_DIR можно создать текстовый файл user_entries с записями IP, CIDR или FQDN (одна на строку). Эти записи будут добавлены в список блокировок
|
### В $DATA_DIR можно создать текстовый файл user_entries с записями IP, CIDR или FQDN (одна на строку). Эти записи будут добавлены в список блокировок
|
||||||
### В записях FQDN можно задать DNS-сервер для разрешения данного домена, через пробел (прим.: domain.com 8.8.8.8)
|
### В записях FQDN можно задать DNS-сервер для разрешения данного домена, через пробел (прим.: domain.com 8.8.8.8)
|
||||||
@@ -77,6 +69,16 @@ NFTSET_POLICY_IP="memory"
|
|||||||
NFTSET_POLICY_DNSMASQ="performance"
|
NFTSET_POLICY_DNSMASQ="performance"
|
||||||
### Таймаут для записей в сете $NFTSET_DNSMASQ
|
### Таймаут для записей в сете $NFTSET_DNSMASQ
|
||||||
NFTSET_DNSMASQ_TIMEOUT="1h"
|
NFTSET_DNSMASQ_TIMEOUT="1h"
|
||||||
|
### Динамическое обновление таймаута записей в сете $NFTSET_DNSMASQ (0 - выкл, 1 - вкл)
|
||||||
|
NFTSET_DNSMASQ_TIMEOUT_UPDATE=1
|
||||||
|
### Приоритет правила отбора пакетов nftables для конфигупации Tor или прозрачного прокси
|
||||||
|
NFT_PRIO_NAT="dstnat - 10"
|
||||||
|
### Приоритет правила отбора пакетов nftables для трафика локальных клиентов в конфигупации Tor или прозрачного прокси
|
||||||
|
NFT_PRIO_NAT_LOCAL="filter - 10"
|
||||||
|
### Приоритет правила отбора пакетов nftables для VPN-конфигурации
|
||||||
|
NFT_PRIO_ROUTE="mangle + 10"
|
||||||
|
### Приоритет правила отбора пакетов nftables для трафика локальных клиентов в VPN-конфигурации
|
||||||
|
NFT_PRIO_ROUTE_LOCAL="mangle + 10"
|
||||||
### Кол-во попыток обновления блэклиста (в случае неудачи)
|
### Кол-во попыток обновления блэклиста (в случае неудачи)
|
||||||
MODULE_RUN_ATTEMPTS=3
|
MODULE_RUN_ATTEMPTS=3
|
||||||
### Таймаут между попытками обновления
|
### Таймаут между попытками обновления
|
||||||
|
|||||||
@@ -59,14 +59,6 @@ export T_PROXY_PORT_TCP=1100
|
|||||||
export T_PROXY_PORT_UDP=1100
|
export T_PROXY_PORT_UDP=1100
|
||||||
### Отправлять в прозрачный прокси UDP-трафик (0 - выкл, 1 - вкл)
|
### Отправлять в прозрачный прокси UDP-трафик (0 - выкл, 1 - вкл)
|
||||||
export T_PROXY_ALLOW_UDP=0
|
export T_PROXY_ALLOW_UDP=0
|
||||||
### Приоритет правила отбора пакетов nftables для конфигупации Tor или прозрачного прокси
|
|
||||||
export NFT_PRIO_NAT="dstnat - 10"
|
|
||||||
### Приоритет правила отбора пакетов nftables для трафика локальных клиентов в конфигупации Tor или прозрачного прокси
|
|
||||||
export NFT_PRIO_NAT_LOCAL="filter - 10"
|
|
||||||
### Приоритет правила отбора пакетов nftables для VPN-конфигурации
|
|
||||||
export NFT_PRIO_ROUTE="mangle + 10"
|
|
||||||
### Приоритет правила отбора пакетов nftables для трафика локальных клиентов в VPN-конфигурации
|
|
||||||
export NFT_PRIO_ROUTE_LOCAL="mangle + 10"
|
|
||||||
### Добавление в список блокировок пользовательских записей из файла $USER_ENTRIES_FILE (0 - выкл, 1 - вкл)
|
### Добавление в список блокировок пользовательских записей из файла $USER_ENTRIES_FILE (0 - выкл, 1 - вкл)
|
||||||
### В $DATA_DIR можно создать текстовый файл user_entries с записями IP, CIDR или FQDN (одна на строку). Эти записи будут добавлены в список блокировок
|
### В $DATA_DIR можно создать текстовый файл user_entries с записями IP, CIDR или FQDN (одна на строку). Эти записи будут добавлены в список блокировок
|
||||||
### В записях FQDN можно задать DNS-сервер для разрешения данного домена, через пробел (прим.: domain.com 8.8.8.8)
|
### В записях FQDN можно задать DNS-сервер для разрешения данного домена, через пробел (прим.: domain.com 8.8.8.8)
|
||||||
@@ -90,6 +82,16 @@ export NFTSET_POLICY_IP="memory"
|
|||||||
export NFTSET_POLICY_DNSMASQ="performance"
|
export NFTSET_POLICY_DNSMASQ="performance"
|
||||||
### Таймаут для записей в сете $NFTSET_DNSMASQ
|
### Таймаут для записей в сете $NFTSET_DNSMASQ
|
||||||
export NFTSET_DNSMASQ_TIMEOUT="1h"
|
export NFTSET_DNSMASQ_TIMEOUT="1h"
|
||||||
|
### Динамическое обновление таймаута записей в сете $NFTSET_DNSMASQ (0 - выкл, 1 - вкл)
|
||||||
|
export NFTSET_DNSMASQ_TIMEOUT_UPDATE=1
|
||||||
|
### Приоритет правила отбора пакетов nftables для конфигупации Tor или прозрачного прокси
|
||||||
|
export NFT_PRIO_NAT="dstnat - 10"
|
||||||
|
### Приоритет правила отбора пакетов nftables для трафика локальных клиентов в конфигупации Tor или прозрачного прокси
|
||||||
|
export NFT_PRIO_NAT_LOCAL="filter - 10"
|
||||||
|
### Приоритет правила отбора пакетов nftables для VPN-конфигурации
|
||||||
|
export NFT_PRIO_ROUTE="mangle + 10"
|
||||||
|
### Приоритет правила отбора пакетов nftables для трафика локальных клиентов в VPN-конфигурации
|
||||||
|
export NFT_PRIO_ROUTE_LOCAL="mangle + 10"
|
||||||
### Кол-во попыток обновления блэклиста (в случае неудачи)
|
### Кол-во попыток обновления блэклиста (в случае неудачи)
|
||||||
export MODULE_RUN_ATTEMPTS=3
|
export MODULE_RUN_ATTEMPTS=3
|
||||||
### Таймаут между попытками обновления
|
### Таймаут между попытками обновления
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
IP_CMD="ip"
|
IP_CMD="ip"
|
||||||
NFT_ALLOWED_HOSTS_CHAIN="allowed_hosts"
|
NFT_ALLOWED_HOSTS_CHAIN="allowed_hosts"
|
||||||
NFT_BLLIST_CHAIN="blacklist"
|
NFT_BLLIST_CHAIN="blacklist"
|
||||||
|
NFT_DNSMASQ_TIMEOUT_UPDATE_CHAIN="dnsmasq_timeout_update"
|
||||||
NFT_ACTION_CHAIN="action"
|
NFT_ACTION_CHAIN="action"
|
||||||
NFT_LOCAL_CLIENTS_CHAIN="local_clients"
|
NFT_LOCAL_CLIENTS_CHAIN="local_clients"
|
||||||
VPN_ROUTE_TABLE_ID=99
|
VPN_ROUTE_TABLE_ID=99
|
||||||
@@ -15,24 +16,27 @@ fi
|
|||||||
|
|
||||||
case "$ALLOWED_HOSTS_MODE" in
|
case "$ALLOWED_HOSTS_MODE" in
|
||||||
"1")
|
"1")
|
||||||
NFT_ALLOWED_HOSTS_RULE="ip saddr @${NFTSET_ALLOWED_HOSTS} jump ${NFT_BLLIST_CHAIN}"
|
NFT_ALLOWED_HOSTS_EXPR="ip saddr @${NFTSET_ALLOWED_HOSTS} jump ${NFT_BLLIST_CHAIN}"
|
||||||
;;
|
;;
|
||||||
"2")
|
"2")
|
||||||
NFT_ALLOWED_HOSTS_RULE="ip saddr != @${NFTSET_ALLOWED_HOSTS} jump ${NFT_BLLIST_CHAIN}"
|
NFT_ALLOWED_HOSTS_EXPR="ip saddr != @${NFTSET_ALLOWED_HOSTS} jump ${NFT_BLLIST_CHAIN}"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
NFT_ALLOWED_HOSTS_RULE="jump ${NFT_BLLIST_CHAIN}"
|
NFT_ALLOWED_HOSTS_EXPR="jump ${NFT_BLLIST_CHAIN}"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
case "$BYPASS_IP_MODE" in
|
if [ "$BYPASS_IP_MODE" = "1" ]; then
|
||||||
"1")
|
NFT_BYPASS_IP_EXPR="ip daddr @${NFTSET_BYPASS_IP} counter accept"
|
||||||
NFT_BYPASS_IP_RULE="ip daddr @${NFTSET_BYPASS_IP} counter accept"
|
else
|
||||||
;;
|
NFT_BYPASS_IP_EXPR="continue"
|
||||||
*)
|
fi
|
||||||
NFT_BYPASS_IP_RULE="continue"
|
|
||||||
;;
|
if [ "$NFTSET_DNSMASQ_TIMEOUT_UPDATE" = "1" ]; then
|
||||||
esac
|
NFT_DNSMASQ_RULE_TARGET="$NFT_DNSMASQ_TIMEOUT_UPDATE_CHAIN"
|
||||||
|
else
|
||||||
|
NFT_DNSMASQ_RULE_TARGET="$NFT_ACTION_CHAIN"
|
||||||
|
fi
|
||||||
|
|
||||||
NftCmdWrapper() {
|
NftCmdWrapper() {
|
||||||
local _i=0 _attempts=10 _return_code=1
|
local _i=0 _attempts=10 _return_code=1
|
||||||
@@ -68,12 +72,15 @@ NftVpnRouteStatus() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
NftMainAdd() {
|
NftMainAdd() {
|
||||||
local _nft_sets="${NFTSET_CIDR} ${NFTSET_IP} ${NFTSET_DNSMASQ}" _set
|
local _nft_sets="${NFTSET_CIDR} ${NFTSET_IP}" _set
|
||||||
$NFT_CMD add chain $NFT_TABLE "$NFT_LOCAL_CLIENTS_CHAIN" { $LOCAL_CLIENTS_CHAIN_TYPE }
|
$NFT_CMD add chain $NFT_TABLE "$NFT_LOCAL_CLIENTS_CHAIN" { $LOCAL_CLIENTS_CHAIN_TYPE }
|
||||||
$NFT_CMD add chain $NFT_TABLE "$NFT_ACTION_CHAIN"
|
$NFT_CMD add chain $NFT_TABLE "$NFT_ACTION_CHAIN"
|
||||||
|
$NFT_CMD add chain $NFT_TABLE "$NFT_DNSMASQ_TIMEOUT_UPDATE_CHAIN"
|
||||||
$NFT_CMD add chain $NFT_TABLE "$NFT_BLLIST_CHAIN"
|
$NFT_CMD add chain $NFT_TABLE "$NFT_BLLIST_CHAIN"
|
||||||
$NFT_CMD add chain $NFT_TABLE "$NFT_ALLOWED_HOSTS_CHAIN" { $MAIN_CHAIN_TYPE }
|
$NFT_CMD add chain $NFT_TABLE "$NFT_ALLOWED_HOSTS_CHAIN" { $MAIN_CHAIN_TYPE }
|
||||||
NftCmdWrapper $NFT_CMD add rule $NFT_TABLE "$NFT_ALLOWED_HOSTS_CHAIN" $NFT_ALLOWED_HOSTS_RULE
|
NftCmdWrapper $NFT_CMD add rule $NFT_TABLE "$NFT_DNSMASQ_TIMEOUT_UPDATE_CHAIN" ct state new set update ip daddr "@${NFTSET_DNSMASQ}" counter
|
||||||
|
NftCmdWrapper $NFT_CMD add rule $NFT_TABLE "$NFT_DNSMASQ_TIMEOUT_UPDATE_CHAIN" jump "$NFT_ACTION_CHAIN"
|
||||||
|
NftCmdWrapper $NFT_CMD add rule $NFT_TABLE "$NFT_ALLOWED_HOSTS_CHAIN" $NFT_ALLOWED_HOSTS_EXPR
|
||||||
if [ "$PROXY_MODE" = "2" ]; then
|
if [ "$PROXY_MODE" = "2" ]; then
|
||||||
NftCmdWrapper $NFT_CMD add rule $NFT_TABLE "$NFT_ACTION_CHAIN" mark set $VPN_PKTS_MARK
|
NftCmdWrapper $NFT_CMD add rule $NFT_TABLE "$NFT_ACTION_CHAIN" mark set $VPN_PKTS_MARK
|
||||||
elif [ "$PROXY_MODE" = "3" ]; then
|
elif [ "$PROXY_MODE" = "3" ]; then
|
||||||
@@ -88,11 +95,12 @@ NftMainAdd() {
|
|||||||
fi
|
fi
|
||||||
NftCmdWrapper $NFT_CMD add rule $NFT_TABLE "$NFT_BLLIST_CHAIN" ip daddr "@${NFTSET_ONION}" counter goto "$NFT_ACTION_CHAIN"
|
NftCmdWrapper $NFT_CMD add rule $NFT_TABLE "$NFT_BLLIST_CHAIN" ip daddr "@${NFTSET_ONION}" counter goto "$NFT_ACTION_CHAIN"
|
||||||
fi
|
fi
|
||||||
NftCmdWrapper $NFT_CMD add rule $NFT_TABLE "$NFT_BLLIST_CHAIN" $NFT_BYPASS_IP_RULE
|
NftCmdWrapper $NFT_CMD add rule $NFT_TABLE "$NFT_BLLIST_CHAIN" $NFT_BYPASS_IP_EXPR
|
||||||
for _set in $_nft_sets
|
for _set in $_nft_sets
|
||||||
do
|
do
|
||||||
NftCmdWrapper $NFT_CMD add rule $NFT_TABLE "$NFT_BLLIST_CHAIN" ip daddr "@${_set}" counter goto "$NFT_ACTION_CHAIN"
|
NftCmdWrapper $NFT_CMD add rule $NFT_TABLE "$NFT_BLLIST_CHAIN" ip daddr "@${_set}" counter goto "$NFT_ACTION_CHAIN"
|
||||||
done
|
done
|
||||||
|
NftCmdWrapper $NFT_CMD add rule $NFT_TABLE "$NFT_BLLIST_CHAIN" ip daddr "@${NFTSET_DNSMASQ}" counter goto "$NFT_DNSMASQ_RULE_TARGET"
|
||||||
if [ "$PROXY_MODE" = "2" ]; then
|
if [ "$PROXY_MODE" = "2" ]; then
|
||||||
NftVpnRouteAdd
|
NftVpnRouteAdd
|
||||||
fi
|
fi
|
||||||
@@ -105,6 +113,8 @@ NftMainDelete() {
|
|||||||
$NFT_CMD delete chain $NFT_TABLE "$NFT_LOCAL_CLIENTS_CHAIN"
|
$NFT_CMD delete chain $NFT_TABLE "$NFT_LOCAL_CLIENTS_CHAIN"
|
||||||
$NFT_CMD flush chain $NFT_TABLE "$NFT_BLLIST_CHAIN"
|
$NFT_CMD flush chain $NFT_TABLE "$NFT_BLLIST_CHAIN"
|
||||||
$NFT_CMD delete chain $NFT_TABLE "$NFT_BLLIST_CHAIN"
|
$NFT_CMD delete chain $NFT_TABLE "$NFT_BLLIST_CHAIN"
|
||||||
|
$NFT_CMD flush chain $NFT_TABLE "$NFT_DNSMASQ_TIMEOUT_UPDATE_CHAIN"
|
||||||
|
$NFT_CMD delete chain $NFT_TABLE "$NFT_DNSMASQ_TIMEOUT_UPDATE_CHAIN"
|
||||||
$NFT_CMD flush chain $NFT_TABLE "$NFT_ACTION_CHAIN"
|
$NFT_CMD flush chain $NFT_TABLE "$NFT_ACTION_CHAIN"
|
||||||
$NFT_CMD delete chain $NFT_TABLE "$NFT_ACTION_CHAIN"
|
$NFT_CMD delete chain $NFT_TABLE "$NFT_ACTION_CHAIN"
|
||||||
NftVpnRouteDelete 2> /dev/null
|
NftVpnRouteDelete 2> /dev/null
|
||||||
|
|||||||
Reference in New Issue
Block a user