QUIC support to main scripts

This commit is contained in:
bol-van 2023-07-02 18:46:26 +03:00
parent db1c533b6c
commit 9a87e617e4
12 changed files with 141 additions and 3 deletions

View File

@ -60,6 +60,13 @@ filter_apply_port_target()
fi fi
eval $1="\"\$$1 $f\"" eval $1="\"\$$1 $f\""
} }
filter_apply_port_target_quic()
{
# $1 - var name of nftables filter
local f
f="-p udp --dport 443"
eval $1="\"\$$1 $f\""
}
filter_apply_ipset_target4() filter_apply_ipset_target4()
{ {
# $1 - var name of ipv4 iptables filter # $1 - var name of ipv4 iptables filter
@ -303,6 +310,22 @@ zapret_do_firewall_rules_ipt()
fw_nfqws_post6 $1 "$f6 $desync" $qns6 fw_nfqws_post6 $1 "$f6 $desync" $qns6
fi fi
fi fi
get_nfqws_qnums_quic qn qn6
if [ -n "$qn" ]; then
f4=
filter_apply_port_target_quic f4
f4="$f4 $first_packet_only"
filter_apply_ipset_target4 f4
fw_nfqws_post4 $1 "$f4 $desync" $qn
fi
if [ -n "$qn6" ]; then
f6=
filter_apply_port_target_quic f6
f6="$f6 $first_packet_only"
filter_apply_ipset_target6 f6
fw_nfqws_post6 $1 "$f6 $desync" $qn6
fi
;; ;;
custom) custom)
existf zapret_custom_firewall && zapret_custom_firewall $1 existf zapret_custom_firewall && zapret_custom_firewall $1

View File

@ -270,6 +270,13 @@ nft_filter_apply_port_target()
fi fi
eval $1="\"\$$1 $f\"" eval $1="\"\$$1 $f\""
} }
nft_filter_apply_port_target_quic()
{
# $1 - var name of nftables filter
local f
f="udp dport 443"
eval $1="\"\$$1 $f\""
}
nft_filter_apply_ipset_target4() nft_filter_apply_ipset_target4()
{ {
# $1 - var name of ipv4 nftables filter # $1 - var name of ipv4 nftables filter
@ -532,6 +539,22 @@ zapret_apply_firewall_rules_nft()
nft_fw_nfqws_post6 "$f6 $desync" $qns6 nft_fw_nfqws_post6 "$f6 $desync" $qns6
fi fi
fi fi
get_nfqws_qnums_quic qn qn6
if [ -n "$qn" ]; then
f4=
nft_filter_apply_port_target_quic f4
f4="$f4 $first_packet_only"
nft_filter_apply_ipset_target4 f4
nft_fw_nfqws_post4 "$f4 $desync" $qn
fi
if [ -n "$qn6" ]; then
f6=
nft_filter_apply_port_target_quic f6
f6="$f6 $first_packet_only"
nft_filter_apply_ipset_target6 f6
nft_fw_nfqws_post6 "$f6 $desync" $qn6
fi
;; ;;
custom) custom)
existf zapret_custom_firewall_nft && zapret_custom_firewall_nft existf zapret_custom_firewall_nft && zapret_custom_firewall_nft

View File

@ -43,3 +43,29 @@ get_nfqws_qnums()
eval $4= eval $4=
fi fi
} }
get_nfqws_qnums_quic()
{
# $1 - var name for ipv4 quic
# $2 - var name for ipv6 quic
local _qn _qn6
[ "$DISABLE_IPV4" = "1" ] || {
_qn=$(($QNUM+10))
}
[ "$DISABLE_IPV6" = "1" ] || {
_qn6=$(($QNUM+11))
[ "$DISABLE_IPV4" = "1" ] || {
if [ "$NFQWS_OPT_DESYNC_QUIC" = "$NFQWS_OPT_DESYNC_QUIC6" ]; then
_qn6=$_qn;
fi
}
}
if [ "$MODE_QUIC" = 1 ]; then
eval $1=$_qn
eval $2=$_qn6
else
eval $1=
eval $2=
fi
}

4
config
View File

@ -45,6 +45,8 @@ MODE_HTTP=1
MODE_HTTP_KEEPALIVE=0 MODE_HTTP_KEEPALIVE=0
# apply fooling to https # apply fooling to https
MODE_HTTPS=1 MODE_HTTPS=1
# apply fooling to quic
MODE_QUIC=0
# none,ipset,hostlist # none,ipset,hostlist
MODE_FILTER=none MODE_FILTER=none
@ -55,6 +57,8 @@ NFQWS_OPT_DESYNC="--dpi-desync=fake --dpi-desync-ttl=0 --dpi-desync-ttl6=0 --dpi
#NFQWS_OPT_DESYNC_HTTPS="--wssize=1:6 --dpi-desync=split --dpi-desync-ttl=0 --dpi-desync-fooling=badsum" #NFQWS_OPT_DESYNC_HTTPS="--wssize=1:6 --dpi-desync=split --dpi-desync-ttl=0 --dpi-desync-fooling=badsum"
#NFQWS_OPT_DESYNC_HTTP6="--dpi-desync=split --dpi-desync-ttl=5 --dpi-desync-fooling=none" #NFQWS_OPT_DESYNC_HTTP6="--dpi-desync=split --dpi-desync-ttl=5 --dpi-desync-fooling=none"
#NFQWS_OPT_DESYNC_HTTPS6="--wssize=1:6 --dpi-desync=split --dpi-desync-ttl=5 --dpi-desync-fooling=none" #NFQWS_OPT_DESYNC_HTTPS6="--wssize=1:6 --dpi-desync=split --dpi-desync-ttl=5 --dpi-desync-fooling=none"
NFQWS_OPT_DESYNC_QUIC="--dpi-desync=fake"
#NFQWS_OPT_DESYNC_QUIC6="--dpi-desync=hopbyhop"
# CHOOSE TPWS DAEMON OPTIONS. run "tpws/tpws --help" for option list # CHOOSE TPWS DAEMON OPTIONS. run "tpws/tpws --help" for option list
TPWS_OPT="--hostspell=HOST --split-http-req=method --split-pos=3" TPWS_OPT="--hostspell=HOST --split-http-req=method --split-pos=3"

View File

@ -233,3 +233,7 @@ v48
nfqws, tpws : multiple --hostlist and --hostlist-exclude support nfqws, tpws : multiple --hostlist and --hostlist-exclude support
launch system, ipset : no more list merging. all lists are passed separately to nfqws and tpws launch system, ipset : no more list merging. all lists are passed separately to nfqws and tpws
nfqws : udplen fooling supports packet shrinking (negative increment value) nfqws : udplen fooling supports packet shrinking (negative increment value)
v49
QUIC support integrated to the main system and setup

View File

@ -152,12 +152,15 @@ opkg update
opkg install iptables-mod-extra iptables-mod-nfqueue iptables-mod-filter iptables-mod-ipopt iptables-mod-conntrack-extra ipset curl opkg install iptables-mod-extra iptables-mod-nfqueue iptables-mod-filter iptables-mod-ipopt iptables-mod-conntrack-extra ipset curl
(ipv6) opkg install ip6tables-mod-nat (ipv6) opkg install ip6tables-mod-nat
(опционально) opkg install gzip (опционально) opkg install gzip
(опционально) opkg install grep
(опционально) opkg install coreutils-sort (опционально) opkg install coreutils-sort
ЭКОНОМИЯ МЕСТА : ЭКОНОМИЯ МЕСТА :
gzip от busybox в разы медленней полноценного варианта. gzip используется скриптами получения листов. gzip от busybox в разы медленней полноценного варианта. gzip используется скриптами получения листов.
sort от busybox медленней полноценного варианта и жрет намного больше памяти. sort используется скриптами получения листов. sort от busybox медленней полноценного варианта и жрет намного больше памяти. sort используется скриптами получения листов.
grep от busybox катастрофически медленный с опцией -f. она применяется в get_reestr_combined.sh. если вы не собираетесь
пользоваться этим скриптом, gnu grep можно не устанавливать
iptables-mod-nfqueue можно выкинуть, если не будем пользоваться nfqws iptables-mod-nfqueue можно выкинуть, если не будем пользоваться nfqws
curl можно выкинуть, если для получения ip листа будет использоваться только get_user.sh curl можно выкинуть, если для получения ip листа будет использоваться только get_user.sh

View File

@ -731,6 +731,10 @@ Enable https fooling :
`MODE_HTTPS=1` `MODE_HTTPS=1`
Enable quic fooling :
`MODE_QUIC=1`
Host filtering mode : Host filtering mode :
``` ```
none - apply fooling to all hosts none - apply fooling to all hosts
@ -767,6 +771,16 @@ It means if only `NFQWS_OPT_DESYNC` is defined all four take its value.
If a variable is not defined, the value `NFQWS_OPT_DESYNC` is taken. If a variable is not defined, the value `NFQWS_OPT_DESYNC` is taken.
Separate QUIC options for ip protocol versions :
```
NFQWS_OPT_DESYNC_QUIC="--dpi-desync=fake"
NFQWS_OPT_DESYNC_QUIC6="--dpi-desync=hopbyhop"
```
If `NFQWS_OPT_DESYNC_QUIC6` is not specified `NFQWS_OPT_DESYNC_QUIC` is taken.
flow offloading control (OpenWRT only) flow offloading control (OpenWRT only)
``` ```

View File

@ -1,4 +1,4 @@
zapret v.48 zapret v.49
English English
------- -------
@ -926,6 +926,10 @@ MODE_HTTP_KEEPALIVE=0
MODE_HTTPS=1 MODE_HTTPS=1
Применять ли дурение к QUIC :
MODE_QUIC=0
Режим фильтрации хостов : Режим фильтрации хостов :
none - применять дурение ко всем хостам none - применять дурение ко всем хостам
ipset - ограничить дурение ipset-ом zapret/zapret6 ipset - ограничить дурение ipset-ом zapret/zapret6
@ -954,6 +958,11 @@ NFQWS_OPT_DESYNC_HTTPS6="--wssize=1:6 --dpi-desync=split --dpi-desync-ttl=5 --dp
Если какая-то из переменных NFQWS_OPT_DESYNC_HTTP6/NFQWS_OPT_DESYNC_HTTPS6 не определена, Если какая-то из переменных NFQWS_OPT_DESYNC_HTTP6/NFQWS_OPT_DESYNC_HTTPS6 не определена,
берется значение NFQWS_OPT_DESYNC_HTTP/NFQWS_OPT_DESYNC_HTTPS. берется значение NFQWS_OPT_DESYNC_HTTP/NFQWS_OPT_DESYNC_HTTPS.
Опции дурения для QUIC :
NFQWS_OPT_DESYNC_QUIC="--dpi-desync=fake"
NFQWS_OPT_DESYNC_QUIC6="--dpi-desync=hopbyhop"
Если NFQWS_OPT_DESYNC_QUIC6 не задано, то берется NFQWS_OPT_DESYNC_QUIC.
Настройка системы управления выборочным traffic offload (только openwrt) Настройка системы управления выборочным traffic offload (только openwrt)
donttouch : выборочное управление отключено, используется системная настройка, простой инсталятор выключает системную настройку, если она не совместима с выбранным режимом donttouch : выборочное управление отключено, используется системная настройка, простой инсталятор выключает системную настройку, если она не совместима с выбранным режимом
none : выборочное управление отключено, простой инсталятор выключает системную настройку none : выборочное управление отключено, простой инсталятор выключает системную настройку

View File

@ -34,6 +34,7 @@ NFQWS_OPT_DESYNC_HTTP="${NFQWS_OPT_DESYNC_HTTP:-$NFQWS_OPT_DESYNC}"
NFQWS_OPT_DESYNC_HTTPS="${NFQWS_OPT_DESYNC_HTTPS:-$NFQWS_OPT_DESYNC}" NFQWS_OPT_DESYNC_HTTPS="${NFQWS_OPT_DESYNC_HTTPS:-$NFQWS_OPT_DESYNC}"
NFQWS_OPT_DESYNC_HTTP6="${NFQWS_OPT_DESYNC_HTTP6:-$NFQWS_OPT_DESYNC_HTTP}" NFQWS_OPT_DESYNC_HTTP6="${NFQWS_OPT_DESYNC_HTTP6:-$NFQWS_OPT_DESYNC_HTTP}"
NFQWS_OPT_DESYNC_HTTPS6="${NFQWS_OPT_DESYNC_HTTPS6:-$NFQWS_OPT_DESYNC_HTTPS}" NFQWS_OPT_DESYNC_HTTPS6="${NFQWS_OPT_DESYNC_HTTPS6:-$NFQWS_OPT_DESYNC_HTTPS}"
NFQWS_OPT_DESYNC_QUIC6="${NFQWS_OPT_DESYNC_QUIC6:-$NFQWS_OPT_DESYNC_QUIC}"
@ -142,7 +143,7 @@ list_nfqws_rules()
{ {
# $1 = '' for ipv4, '6' for ipv6 # $1 = '' for ipv4, '6' for ipv6
ip$1tables -S POSTROUTING -t mangle | \ ip$1tables -S POSTROUTING -t mangle | \
grep -E "NFQUEUE --queue-num $QNUM --queue-bypass|NFQUEUE --queue-num $(($QNUM+1)) --queue-bypass|NFQUEUE --queue-num $(($QNUM+2)) --queue-bypass|NFQUEUE --queue-num $(($QNUM+3)) --queue-bypass" | \ grep -E "NFQUEUE --queue-num $QNUM --queue-bypass|NFQUEUE --queue-num $(($QNUM+1)) --queue-bypass|NFQUEUE --queue-num $(($QNUM+2)) --queue-bypass|NFQUEUE --queue-num $(($QNUM+3)) --queue-bypass|NFQUEUE --queue-num $(($QNUM+10)) --queue-bypass|NFQUEUE --queue-num $(($QNUM+11)) --queue-bypass" | \
sed -re 's/^-A POSTROUTING (.*) -j NFQUEUE.*$/\1/' -e "s/-m mark ! --mark $DESYNC_MARK\/$DESYNC_MARK//" sed -re 's/^-A POSTROUTING (.*) -j NFQUEUE.*$/\1/' -e "s/-m mark ! --mark $DESYNC_MARK\/$DESYNC_MARK//"
} }
reverse_nfqws_rule() reverse_nfqws_rule()

View File

@ -152,6 +152,17 @@ start_daemons_procd()
filter_apply_hostlist_target opt filter_apply_hostlist_target opt
run_daemon 4 "$NFQWS" "$opt" run_daemon 4 "$NFQWS" "$opt"
} }
get_nfqws_qnums_quic qn qn6
[ -z "$qn" ] || {
opt="--qnum=$qn $NFQWS_OPT_BASE $NFQWS_OPT_DESYNC_QUIC"
filter_apply_hostlist_target opt
run_daemon 10 "$NFQWS" "$opt"
}
[ -z "$qn6" ] || [ "$qn6" = "$qn" ] || {
opt="--qnum=$qn6 $NFQWS_OPT_BASE $NFQWS_OPT_DESYNC_QUIC6"
filter_apply_hostlist_target opt
run_daemon 11 "$NFQWS" "$opt"
}
;; ;;
custom) custom)
existf zapret_custom_daemons && zapret_custom_daemons $1 existf zapret_custom_daemons && zapret_custom_daemons $1

View File

@ -302,6 +302,17 @@ zapret_do_daemons()
filter_apply_hostlist_target opt filter_apply_hostlist_target opt
do_nfqws $1 4 "$opt" do_nfqws $1 4 "$opt"
} }
get_nfqws_qnums_quic qn qn6
[ -z "$qn" ] || {
opt="--qnum=$qn $NFQWS_OPT_BASE $NFQWS_OPT_DESYNC_QUIC"
filter_apply_hostlist_target opt
do_nfqws $1 10 "$opt"
}
[ -z "$qn6" ] || [ "$qn6" = "$qn" ] || {
opt="--qnum=$qn6 $NFQWS_OPT_BASE $NFQWS_OPT_DESYNC_QUIC6"
filter_apply_hostlist_target opt
do_nfqws $1 11 "$opt"
}
;; ;;
custom) custom)
existf zapret_custom_daemons && zapret_custom_daemons $1 existf zapret_custom_daemons && zapret_custom_daemons $1

View File

@ -165,7 +165,7 @@ select_mode_mode()
vars="TPWS_OPT" vars="TPWS_OPT"
;; ;;
nfqws) nfqws)
vars="NFQWS_OPT_DESYNC NFQWS_OPT_DESYNC_HTTP NFQWS_OPT_DESYNC_HTTPS NFQWS_OPT_DESYNC_HTTP6 NFQWS_OPT_DESYNC_HTTPS6" vars="NFQWS_OPT_DESYNC NFQWS_OPT_DESYNC_HTTP NFQWS_OPT_DESYNC_HTTPS NFQWS_OPT_DESYNC_HTTP6 NFQWS_OPT_DESYNC_HTTPS6 NFQWS_OPT_DESYNC_QUIC NFQWS_OPT_DESYNC_QUIC6"
;; ;;
esac esac
[ -n "$vars" ] && { [ -n "$vars" ] && {
@ -215,6 +215,14 @@ select_mode_https()
write_config_var MODE_HTTPS write_config_var MODE_HTTPS
} }
} }
select_mode_quic()
{
[ "$MODE" != "filter" ] && [ "$MODE" != "tpws-socks" ] && [ "$MODE" != "tpws" ] && {
echo
ask_yes_no_var MODE_QUIC "enable quic support"
write_config_var MODE_QUIC
}
}
select_mode_filter() select_mode_filter()
{ {
local filter="none ipset hostlist" local filter="none ipset hostlist"
@ -230,6 +238,7 @@ select_mode()
select_mode_http select_mode_http
select_mode_keepalive select_mode_keepalive
select_mode_https select_mode_https
select_mode_quic
select_mode_filter select_mode_filter
} }