mirror of
https://github.com/bol-van/zapret.git
synced 2024-11-11 17:29:16 +05:00
nft: avoid using complex maps
This commit is contained in:
parent
9fbada53d2
commit
09416dee64
@ -84,7 +84,7 @@ cat << EOF | nft -f -
|
|||||||
add set inet $ZAPRET_NFT_TABLE lanif { type ifname; }
|
add set inet $ZAPRET_NFT_TABLE lanif { type ifname; }
|
||||||
add set inet $ZAPRET_NFT_TABLE wanif { type ifname; }
|
add set inet $ZAPRET_NFT_TABLE wanif { type ifname; }
|
||||||
add set inet $ZAPRET_NFT_TABLE wanif6 { type ifname; }
|
add set inet $ZAPRET_NFT_TABLE wanif6 { type ifname; }
|
||||||
add map inet $ZAPRET_NFT_TABLE tpws6 { type ifname: ipv6_addr . inet_service; }
|
add map inet $ZAPRET_NFT_TABLE link_local { type ifname : ipv6_addr; }
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
nft_del_chains()
|
nft_del_chains()
|
||||||
@ -129,19 +129,19 @@ cat << EOF | nft -f - 2>/dev/null
|
|||||||
flush set inet $ZAPRET_NFT_TABLE lanif
|
flush set inet $ZAPRET_NFT_TABLE lanif
|
||||||
flush set inet $ZAPRET_NFT_TABLE wanif
|
flush set inet $ZAPRET_NFT_TABLE wanif
|
||||||
flush set inet $ZAPRET_NFT_TABLE wanif6
|
flush set inet $ZAPRET_NFT_TABLE wanif6
|
||||||
flush map inet $ZAPRET_NFT_TABLE tpws6
|
flush map inet $ZAPRET_NFT_TABLE link_local
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
nft_flush_tpws6()
|
nft_flush_link_local()
|
||||||
{
|
{
|
||||||
nft flush map inet $ZAPRET_NFT_TABLE tpws6 2>/dev/null
|
nft flush map inet $ZAPRET_NFT_TABLE link_local 2>/dev/null
|
||||||
}
|
}
|
||||||
nft_list_ifsets()
|
nft_list_ifsets()
|
||||||
{
|
{
|
||||||
nft list set inet $ZAPRET_NFT_TABLE lanif
|
nft list set inet $ZAPRET_NFT_TABLE lanif
|
||||||
nft list set inet $ZAPRET_NFT_TABLE wanif
|
nft list set inet $ZAPRET_NFT_TABLE wanif
|
||||||
nft list set inet $ZAPRET_NFT_TABLE wanif6
|
nft list set inet $ZAPRET_NFT_TABLE wanif6
|
||||||
nft list map inet $ZAPRET_NFT_TABLE tpws6
|
nft list map inet $ZAPRET_NFT_TABLE link_local
|
||||||
nft list flowtable inet $ZAPRET_NFT_TABLE ft 2>/dev/null
|
nft list flowtable inet $ZAPRET_NFT_TABLE ft 2>/dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -149,14 +149,14 @@ nft_create_firewall()
|
|||||||
{
|
{
|
||||||
nft_create_table
|
nft_create_table
|
||||||
nft_del_flowtable
|
nft_del_flowtable
|
||||||
nft_flush_tpws6
|
nft_flush_link_local
|
||||||
nft_create_chains
|
nft_create_chains
|
||||||
}
|
}
|
||||||
nft_del_firewall()
|
nft_del_firewall()
|
||||||
{
|
{
|
||||||
nft_del_chains
|
nft_del_chains
|
||||||
nft_del_flowtable
|
nft_del_flowtable
|
||||||
nft_flush_tpws6
|
nft_flush_link_local
|
||||||
# leave ifsets and ipsets because they may be used by custom rules
|
# leave ifsets and ipsets because they may be used by custom rules
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -363,10 +363,11 @@ _nft_fw_tpws6()
|
|||||||
nft_print_op "$filter" "tpws (port $port)" 6
|
nft_print_op "$filter" "tpws (port $port)" 6
|
||||||
nft_add_rule dnat_output skuid != $WS_USER ${4:+oifname @wanif6 }meta l4proto tcp $filter ip6 daddr != @nozapret6 dnat ip6 to [::1]:$port
|
nft_add_rule dnat_output skuid != $WS_USER ${4:+oifname @wanif6 }meta l4proto tcp $filter ip6 daddr != @nozapret6 dnat ip6 to [::1]:$port
|
||||||
[ -n "$3" ] && {
|
[ -n "$3" ] && {
|
||||||
nft_add_rule dnat_pre meta l4proto tcp $filter ip6 daddr != @nozapret6 dnat ip6 to iifname map @tpws6
|
nft_add_rule dnat_pre meta l4proto tcp $filter ip6 daddr != @nozapret6 dnat ip6 to iifname map @link_local:$port
|
||||||
for i in $3; do
|
for i in $3; do
|
||||||
_dnat6_target $i DNAT6
|
_dnat6_target $i DNAT6
|
||||||
[ -n "$DNAT6" -a "$DNAT6" != '-' ] && nft_add_set_element tpws6 "$i : $DNAT6 . $port"
|
# can be multiple tpws processes on different ports
|
||||||
|
[ -n "$DNAT6" -a "$DNAT6" != '-' ] && nft_add_set_element link_local "$i : $DNAT6"
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -102,7 +102,3 @@ iptables можно задействовать на любой openwrt верс
|
|||||||
Если используется fw3, применяется старый механизм интеграции в fw3.
|
Если используется fw3, применяется старый механизм интеграции в fw3.
|
||||||
Если он не используется, то правилами iptables управляем как в традиционных linux системах - то есть с возможностью
|
Если он не используется, то правилами iptables управляем как в традиционных linux системах - то есть с возможностью
|
||||||
запуска и остановки, а скрипт запуска вносит в том числе и правила iptables.
|
запуска и остановки, а скрипт запуска вносит в том числе и правила iptables.
|
||||||
|
|
||||||
Скрипты zapret используют фичи из nftables, появившиеся только в версии 0.9.4 утилиты nft.
|
|
||||||
Ubuntu 20.04 содержит версию 0.9.3. Ничего не выйдет, придется собирать самому.
|
|
||||||
Рекомендуется версия 1.0.2 и выше.
|
|
||||||
|
@ -120,8 +120,7 @@ nf sets do not support overlapping intervals and that's why nft process applies
|
|||||||
There're equivalents to iptables for all other functions. Interface and protocol anonymous sets allow not to write multiple similar rules.
|
There're equivalents to iptables for all other functions. Interface and protocol anonymous sets allow not to write multiple similar rules.
|
||||||
Flow offloading is built-in into new linux kernels and nft versions.
|
Flow offloading is built-in into new linux kernels and nft versions.
|
||||||
|
|
||||||
Zapret scripts are written for `nft 0.9.4` and higher. Older versions will fail.
|
nft version `1.0.2` or higher is recommended.
|
||||||
`nft 1.0.2` is recommended.
|
|
||||||
|
|
||||||
|
|
||||||
## When it will not work
|
## When it will not work
|
||||||
|
@ -156,8 +156,7 @@ NFQUEUE работает без изменений.
|
|||||||
Если коротко, то в nftables невозможно работать с большими ip листами на системах с малым количеством RAM.
|
Если коротко, то в nftables невозможно работать с большими ip листами на системах с малым количеством RAM.
|
||||||
Остальные рассматриваемые здесь функции могут быть перенесены на nftables.
|
Остальные рассматриваемые здесь функции могут быть перенесены на nftables.
|
||||||
|
|
||||||
Скрипты zapret написаны с расчетом на nft 0.9.4 и выше. На более старых работать не будет.
|
Рекомендуется версия nft 1.0.2 или выше.
|
||||||
Рекомендуется версия 1.0.2 или выше.
|
|
||||||
|
|
||||||
|
|
||||||
Когда это работать не будет
|
Когда это работать не будет
|
||||||
|
Loading…
Reference in New Issue
Block a user