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