mirror of
https://github.com/gSpotx2f/ruantiblock_openwrt.git
synced 2026-05-14 22:50:58 +00:00
v1.3. New options: full proxy mode, downloading blacklist through proxy.
This commit is contained in:
@@ -95,6 +95,16 @@ export BYPASS_MODE=0
|
||||
export BYPASS_ENTRIES_DNS=""
|
||||
### Файл исключаемых записей
|
||||
export BYPASS_ENTRIES_FILE="${CONFIG_DIR}/bypass_entries"
|
||||
### Включение режима полного прокси (0 - выкл, 1 - вкл)
|
||||
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 ENABLE_BLLIST_PROXY=0
|
||||
### Список хостов источников блэклиста
|
||||
export BLLIST_HOSTS="reestr.rublacklist.net raw.githubusercontent.com antifilter.download"
|
||||
### Кол-во попыток обновления блэклиста (в случае неудачи)
|
||||
export MODULE_RUN_ATTEMPTS=3
|
||||
### Таймаут между попытками обновления
|
||||
@@ -193,12 +203,20 @@ if [ $? -ne 0 ]; then
|
||||
exit 1
|
||||
fi
|
||||
WGET_PARAMS="--no-check-certificate -q -O"
|
||||
NSLOOKUP_CMD=`which nslookup`
|
||||
if [ $? -ne 0 ]; then
|
||||
echo " Error! Nslookup doesn't exists" >&2
|
||||
exit 1
|
||||
fi
|
||||
export IP_DATA_FILE="${DATA_DIR}/${NAME}.ip"
|
||||
export NFT_TABLE="ip r"
|
||||
export NFT_TABLE_DNSMASQ="4#ip#r"
|
||||
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_BLLIST_PROXY="bllist_proxy"
|
||||
export NFTSET_ONION="onion"
|
||||
export NFTSET_CIDR="c"
|
||||
export NFTSET_IP="i"
|
||||
@@ -206,6 +224,9 @@ export NFTSET_DNSMASQ="d"
|
||||
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_BLLIST_PROXY_TYPE="ipv4_addr"
|
||||
export NFTSET_CIDR_TYPE="ipv4_addr"
|
||||
export NFTSET_IP_TYPE="ipv4_addr"
|
||||
export NFTSET_DNSMASQ_TYPE="ipv4_addr"
|
||||
@@ -306,19 +327,51 @@ FlushNftSets() {
|
||||
done
|
||||
}
|
||||
|
||||
FormatNftSetElemsList() {
|
||||
printf "$1" | $AWK_CMD '{gsub(/[ ]+/, ",", $0); printf $0;}'
|
||||
}
|
||||
|
||||
AddNftSets() {
|
||||
local _allowed_hosts _bypass_ips
|
||||
local _allowed_hosts _bypass_ips _fproxy_hosts _fproxy_private
|
||||
$NFT_CMD add set $NFT_TABLE "$NFTSET_CIDR" { type "$NFTSET_CIDR_TYPE"\; size $NFTSET_MAXELEM_CIDR\; policy "$NFTSET_POLICY_CIDR"\; flags interval\; auto-merge\; }
|
||||
$NFT_CMD add set $NFT_TABLE "$NFTSET_IP" { type "$NFTSET_IP_TYPE"\; size $NFTSET_MAXELEM_IP\; policy "$NFTSET_POLICY_IP"\; flags dynamic\; }
|
||||
$NFT_CMD add set $NFT_TABLE "$NFTSET_DNSMASQ" { type "$NFTSET_DNSMASQ_TYPE"\; size $NFTSET_MAXELEM_DNSMASQ\; policy "$NFTSET_POLICY_DNSMASQ"\; flags dynamic,timeout\; timeout "$NFTSET_DNSMASQ_TIMEOUT"\; }
|
||||
$NFT_CMD add set $NFT_TABLE "$NFTSET_ONION" { type "$NFTSET_DNSMASQ_TYPE"\; size $NFTSET_MAXELEM_DNSMASQ\; policy "$NFTSET_POLICY_DNSMASQ"\; flags dynamic,timeout\; timeout "$NFTSET_DNSMASQ_TIMEOUT"\; }
|
||||
$NFT_CMD add set $NFT_TABLE "$NFTSET_ALLOWED_HOSTS" { type "$NFTSET_ALLOWED_HOSTS_TYPE"\; policy "$NFTSET_POLICY_CIDR"\; flags interval\; auto-merge\; }
|
||||
_allowed_hosts=`printf "$ALLOWED_HOSTS_LIST" | $AWK_CMD '{gsub(/[ ]+/, ",", $0); printf $0;}'`
|
||||
_allowed_hosts=`FormatNftSetElemsList "$ALLOWED_HOSTS_LIST"`
|
||||
if [ -n "$_allowed_hosts" ]; then
|
||||
$NFT_CMD add element $NFT_TABLE "$NFTSET_ALLOWED_HOSTS" { "$_allowed_hosts" }
|
||||
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" { type "$NFTSET_FPROXY_TYPE"\; policy "$NFTSET_POLICY_CIDR"\; flags interval\; auto-merge\; }
|
||||
_fproxy_hosts=`FormatNftSetElemsList "$FPROXY_LIST"`
|
||||
if [ -n "$_fproxy_hosts" ]; then
|
||||
$NFT_CMD add element $NFT_TABLE "$NFTSET_FPROXY" { "$_fproxy_hosts" }
|
||||
fi
|
||||
$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_BLLIST_PROXY" { type "$NFTSET_BLLIST_PROXY_TYPE"\; policy "$NFTSET_POLICY_IP"\; flags dynamic\; }
|
||||
}
|
||||
|
||||
UpdateBllistProxySet() {
|
||||
local _ip_string=""
|
||||
FlushNftSets "$NFTSET_BLLIST_PROXY"
|
||||
for host in $BLLIST_HOSTS
|
||||
do
|
||||
if printf "$host" | $AWK_CMD '{exit ($0 ~ /^([0-9]{1,3}.){3}[0-9]{1,3}$/) ? 0 : 1}'; then
|
||||
_ip_string="${_ip_string}${host} "
|
||||
else
|
||||
_ip_string="${_ip_string}`$NSLOOKUP_CMD $host | $AWK_CMD '/^Address: ([0-9]{1,3}.){3}[0-9]{1,3}$/ {printf $2" "}'`"
|
||||
fi
|
||||
done
|
||||
_ip_string=`FormatNftSetElemsList "$_ip_string"`
|
||||
if [ -n "$_ip_string" ]; then
|
||||
$NFT_CMD add element $NFT_TABLE "$NFTSET_BLLIST_PROXY" { "$_ip_string" }
|
||||
fi
|
||||
}
|
||||
|
||||
UpdateBllistSets() {
|
||||
@@ -339,9 +392,6 @@ UpdateBllistSets() {
|
||||
|
||||
AddNftRules() {
|
||||
NftMainAdd
|
||||
if [ "$PROXY_LOCAL_CLIENTS" = "1" ]; then
|
||||
NftLocalClientsAdd
|
||||
fi
|
||||
}
|
||||
|
||||
DeleteNftRules() {
|
||||
@@ -356,7 +406,7 @@ SetNetConfig() {
|
||||
|
||||
DropNetConfig() {
|
||||
DeleteNftRules
|
||||
FlushNftSets "$NFTSET_ALLOWED_HOSTS" "$NFTSET_BYPASS_IP" "$NFTSET_BYPASS_FQDN" "$NFTSET_CIDR" "$NFTSET_IP" "$NFTSET_DNSMASQ" "$NFTSET_ONION"
|
||||
FlushNftSets "$NFTSET_ALLOWED_HOSTS" "$NFTSET_FPROXY" "$NFTSET_FPROXY_PRIVATE" "$NFTSET_BLLIST_PROXY" "$NFTSET_BYPASS_IP" "$NFTSET_BYPASS_FQDN" "$NFTSET_CIDR" "$NFTSET_IP" "$NFTSET_DNSMASQ" "$NFTSET_ONION"
|
||||
}
|
||||
|
||||
DestroyNetConfig() {
|
||||
@@ -515,6 +565,9 @@ GetDataFiles() {
|
||||
if [ -n "$BLLIST_PRESET" -a -n "$BLLIST_MODULE" ]; then
|
||||
while :
|
||||
do
|
||||
if [ "$ENABLE_BLLIST_PROXY" = "1" ]; then
|
||||
UpdateBllistProxySet
|
||||
fi
|
||||
$BLLIST_MODULE
|
||||
_return_code=$?
|
||||
[ $_return_code -eq 0 ] && break
|
||||
|
||||
Reference in New Issue
Block a user