mirror of
https://github.com/bol-van/zapret.git
synced 2025-08-30 07:15:37 +00:00
readme: hardware details
This commit is contained in:
parent
0c33bbfb37
commit
a50082df92
@ -43,6 +43,7 @@ zapret является свободным и open source.
|
|||||||
- [IPTABLES ДЛЯ NFQWS](#iptables-для-nfqws)
|
- [IPTABLES ДЛЯ NFQWS](#iptables-для-nfqws)
|
||||||
- [NFTABLES ДЛЯ NFQWS](#nftables-для-nfqws)
|
- [NFTABLES ДЛЯ NFQWS](#nftables-для-nfqws)
|
||||||
- [FLOW OFFLOADING](#flow-offloading)
|
- [FLOW OFFLOADING](#flow-offloading)
|
||||||
|
- [ОСОБЕННОСТИ ЖЕЛЕЗОК](#особенности-железок)
|
||||||
- [ДУРЕНИЕ СО СТОРОНЫ СЕРВЕРА](#дурение-со-стороны-сервера)
|
- [ДУРЕНИЕ СО СТОРОНЫ СЕРВЕРА](#дурение-со-стороны-сервера)
|
||||||
- [tpws](#tpws)
|
- [tpws](#tpws)
|
||||||
- [TCP СЕГМЕНТАЦИЯ В TPWS](#tcp-сегментация-в-tpws)
|
- [TCP СЕГМЕНТАЦИЯ В TPWS](#tcp-сегментация-в-tpws)
|
||||||
@ -934,6 +935,70 @@ iptables target `FLOWOFFLOAD` - это проприетарное изобрет
|
|||||||
Управление offload в nftables реализовано в базовом ядре linux без патчей.
|
Управление offload в nftables реализовано в базовом ядре linux без патчей.
|
||||||
nftables - единственный способ включения offload на классическом Linux.
|
nftables - единственный способ включения offload на классическом Linux.
|
||||||
|
|
||||||
|
### ОСОБЕННОСТИ ЖЕЛЕЗОК
|
||||||
|
|
||||||
|
На устройствах mediatek замечены 2 проблемы.
|
||||||
|
|
||||||
|
Драйвер mediatek ethernet отбрасывает tcp и udp пакеты с неверной чексуммой на аппаратном уровне, это не отключается.
|
||||||
|
Как следствие не будет работать fooling badsum через роутер, но будет с него.
|
||||||
|
|
||||||
|
Другая проблема mediatek, затрагивающая как ethernet, так и wireless, проявляется на udp, когда включен offload rx-gro-list.
|
||||||
|
Пока отсутствует nfqueue, все хорошо. Как только nfqueue появляется, часть пакетов выпадает.
|
||||||
|
Особенно заметно это проявляется на дурении QUIC с kyber.
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>shell код лечения</summary>
|
||||||
|
|
||||||
|
```
|
||||||
|
append_separator_list()
|
||||||
|
{
|
||||||
|
# $1 - var name to receive result
|
||||||
|
# $2 - separator
|
||||||
|
# $3 - quoter
|
||||||
|
# $4,$5,... - elements
|
||||||
|
local _var="$1" sep="$2" quo="$3" i
|
||||||
|
|
||||||
|
eval i="\$$_var"
|
||||||
|
shift; shift; shift
|
||||||
|
while [ -n "$1" ]; do
|
||||||
|
if [ -n "$i" ] ; then
|
||||||
|
i="$i$sep$quo$1$quo"
|
||||||
|
else
|
||||||
|
i="$quo$1$quo"
|
||||||
|
fi
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
eval $_var="\$i"
|
||||||
|
}
|
||||||
|
resolve_lower_devices()
|
||||||
|
{
|
||||||
|
# $1 - bridge interface name
|
||||||
|
[ -d "/sys/class/net/$1" ] && {
|
||||||
|
find "/sys/class/net/$1" -follow -maxdepth 1 -name "lower_*" |
|
||||||
|
{
|
||||||
|
local l lower lowers
|
||||||
|
while read lower; do
|
||||||
|
lower="$(basename "$lower")"
|
||||||
|
l="${lower#lower_*}"
|
||||||
|
[ "$l" != "$lower" ] && append_separator_list lowers ' ' '' "$l"
|
||||||
|
done
|
||||||
|
printf "$lowers"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# it breaks nfqueue
|
||||||
|
lans=$(resolve_lower_devices br-lan)
|
||||||
|
for int in $lans; do
|
||||||
|
ethtool -K $int rx-gro-list off
|
||||||
|
done
|
||||||
|
```
|
||||||
|
</details>
|
||||||
|
|
||||||
|
Этот код нужно вызывать после вставания интерфейса LAN, когда все bridge members уже занесены в bridge.
|
||||||
|
Можно использовать хук в `/etc/hotplug.d/iface`.
|
||||||
|
|
||||||
|
|
||||||
### ДУРЕНИЕ СО СТОРОНЫ СЕРВЕРА
|
### ДУРЕНИЕ СО СТОРОНЫ СЕРВЕРА
|
||||||
|
|
||||||
Это тоже возможно.
|
Это тоже возможно.
|
||||||
|
Loading…
Reference in New Issue
Block a user