Как стать автором
Обновить
0
0

Пользователь

Отправить сообщение

В целом согласен с автором. Меня лично смутило про "никаких исключений".

Строим гибкие методологии разработки, а на входе суровый негибкий фильтр.

Я считаю исключения нужны и важны. Но все, от клиента до смежных отделов, должны понимать, - "это одолжение, это не норма".

Ещё хочу заметить, в тексте об это не увидел. Фильтрация задач и создание условий для команды, не должно означать блокировку разработчиков от участия в принятии решений технических решений и коммуникации с заказчиком (после постановки задачи).

Вариант хороший.

Для меня, единственное чего не хватает, в таком решении. Это время и место для поднятия вопроса на команду. И уверенности, что твое сообщение будет прочитано.

Статью не понял

Проблема: груминги стали занимать очень много рабочего времени.

Решение: Вся команда прошла DISC. Теперь мы знаем что люди разные.

Я думаю, на самом деле проблема кроется в

я тимлид в Selectel и управляю большой технической командой.

Во многих источниках размер команды варьируют от 4 до 8 человек. При таком размере встречи не будут томными и долгими.

Важно не забывать что есть

DI - Dependency Injection

DI - Dependency Inversion

С автором статьи и его пониманием модуля как папки и вводом границ не согласен. На мой взгляд это только вносит ещё большую путаницу. В простом случае я бы думал, что модуль это либо класс, либо библиотека.

Основная идея DepInj в том - что вместо конструирования используемого класса в конструкторе. Мы передаем указатель на этот класс в конструктор.(См. Types of dependency injection) https://en.wikipedia.org/wiki/Dependency_injection

Далее солид расширяет эту идею через интерфейсы. Говоря мы будем передавать в конструктор используя DepInj не любой тип данных а интерфейс. И это уже будет называться DepInv. И приводить к тому что наш класс знает только о интерфейсе.

Видимо @AlexTest говорит про DI-Container используя слово конфиг. Пример фреймворка - например SPRING

Если в рантайме надо использовать сразу несколько реализаций одного интерфейса, то скорее всего это ошибка архитектуры.

Однако это очень узкое и на мой взгляд неверное понимание.

Если у интерфейса только одна реализация, зачем тогда интерфейс? Можно сразу использовать класс реализации.

Интерфейсы нужны именно для случаев когда в райнтайме или хотя бы для тестов. Необходимо менять реализацию.

Про заблокированные не скажу у меня еще antizapret настроен. Но youtube сейчас работает шустро. И trakt и notion тоже открываются.

Заработали, спасибо за помощь!
Я не понял механику. Выходит host file не работает?
По Идее NFQWS_OPT_DESYNC не должны влиять на сайты не попавшие в список hosts?
Или я неправильно понимаю алгоритм?

~ # /opt/zapret/init.d/sysv/zapret restart
Stopping daemon 1: /opt/zapret/nfq/nfqws
stopped /opt/zapret/nfq/nfqws (pid 16998)
Stopping daemon 10: /opt/zapret/nfq/nfqws
stopped /opt/zapret/nfq/nfqws (pid 17002)
Clearing iptables
Deleting iptables rule for nfqws postrouting (qnum 200) :  -p tcp -m multiport --dports 80,443 -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 1:6 -m mark ! --mark 0x40000000/0x40000000
Deleting iptables rule for nfqws input+forward (qnum 200) :  -p tcp -m multiport --sports 80,443 -m connbytes --connbytes-dir=reply --connbytes-mode=packets --connbytes 1:1
Deleting ip6tables rule for nfqws postrouting (qnum 200) :  -p tcp -m multiport --dports 80,443 -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 1:6 -m mark ! --mark 0x40000000/0x40000000
Deleting ip6tables rule for nfqws input+forward (qnum 200) :  -p tcp -m multiport --sports 80,443 -m connbytes --connbytes-dir=reply --connbytes-mode=packets --connbytes 1:1
Deleting iptables rule for nfqws postrouting (qnum 210) :  -p udp -m multiport --dports 443 -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 1:6 -m mark ! --mark 0x40000000/0x40000000
Deleting ip6tables rule for nfqws postrouting (qnum 210) :  -p udp -m multiport --dports 443 -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 1:6 -m mark ! --mark 0x40000000/0x40000000
xt_multiport.ko is already loaded
xt_connbytes.ko is already loaded
xt_NFQUEUE.ko is already loaded
Starting daemon 1: /opt/zapret/nfq/nfqws --user=nobody --dpi-desync-fwmark=0x40000000 --qnum=200 --dpi-desync=fake,disorder2 --dpi-desync-split-pos=1 --dpi-desync-ttl=6 --dpi-desync-fooling=badsum --dpi-desync-repeats=6 --dpi-desync-any-protocol --dpi-desync-cutoff=d4 --hostlist=/opt/zapret/ipset/zapret-hosts-user.txt --hostlist-exclude=/opt/zapret/ipset/zapret-hosts-user-exclude.txt
Starting daemon 10: /opt/zapret/nfq/nfqws --user=nobody --dpi-desync-fwmark=0x40000000 --qnum=210 --user=nobody --dpi-desync-fwmark=0x40000000 --dpi-desync=fake,disorder2 --dpi-desync-repeats=6 --dpi-desync-any-protocol --dpi-desync-cutoff=d4 --hostlist=/opt/zapret/ipset/zapret-hosts-user.txt --hostlist-exclude=/opt/zapret/ipset/zapret-hosts-user-exclude.txt
Applying iptables
Creating ip list table (firewall type iptables)
setting high oom kill priority
reloading ipset backend (no-update)
Adding iptables rule for nfqws postrouting (qnum 200) :  -p tcp -m multiport --dports 80,443 -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 1:6 -m mark ! --mark 0x40000000/0x40000000
Adding iptables rule for nfqws input+forward (qnum 200) :  -p tcp -m multiport --sports 80,443 -m connbytes --connbytes-dir=reply --connbytes-mode=packets --connbytes 1:1
Adding ip6tables rule for nfqws postrouting (qnum 200) :  -p tcp -m multiport --dports 80,443 -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 1:6 -m mark ! --mark 0x40000000/0x40000000
Adding ip6tables rule for nfqws input+forward (qnum 200) :  -p tcp -m multiport --sports 80,443 -m connbytes --connbytes-dir=reply --connbytes-mode=packets --connbytes 1:1
Adding iptables rule for nfqws postrouting (qnum 210) :  -p udp -m multiport --dports 443 -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 1:6 -m mark ! --mark 0x40000000/0x40000000
Adding ip6tables rule for nfqws postrouting (qnum 210) :  -p udp -m multiport --dports 443 -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 1:6 -m mark ! --mark 0x40000000/0x40000000

Я экспериментировал. Поэтому заполнил оба.

Оставил exclude пустым. Не помогло.
trakt.tv и notion.so не грузятся. Хотя их нету в списке hosts-user

Прошу помочь, куда копать? Как диагностировать?
Столкнулся с проблемой. Несмотря на конфигурацию типа hostlist. И добавление адресoв в exclude. Получаю ошибки:

от trakt.tv: Get "https://api.trakt.tv/sync/last_activities": remote error: tls: protocol version not supported
от notion.so: ERR_CONNECTION_RESET в браузере.
Отключение zapret решает проблему.
Почему zapret влияет на что-то кроме youtube при моей конфигурации:

config
# this file is included from init scripts
# change values here

# can help in case /tmp has not enough space
#TMPDIR=/opt/zapret/tmp

# redefine user for zapret daemons. required on Keenetic
WS_USER=nobody

# override firewall type : iptables,nftables,ipfw
FWTYPE=iptables

# options for ipsets
# maximum number of elements in sets. also used for nft sets
SET_MAXELEM=522288
# too low hashsize can cause memory allocation errors on low RAM systems , even if RAM is enough
# too large hashsize will waste lots of RAM
IPSET_OPT="hashsize 262144 maxelem $SET_MAXELEM"
# dynamically generate additional ip. $1 = ipset/nfset/table name
#IPSET_HOOK="/etc/zapret.ipset.hook"

# options for ip2net. "-4" or "-6" auto added by ipset create script
IP2NET_OPT4="--prefix-length=22-30 --v4-threshold=3/4"
IP2NET_OPT6="--prefix-length=56-64 --v6-threshold=5"
# options for auto hostlist
AUTOHOSTLIST_RETRANS_THRESHOLD=3
AUTOHOSTLIST_FAIL_THRESHOLD=3
AUTOHOSTLIST_FAIL_TIME=60
# 1 = debug autohostlist positives to ipset/zapret-hosts-auto-debug.log
AUTOHOSTLIST_DEBUGLOG=0

# number of parallel threads for domain list resolves
MDIG_THREADS=30

# ipset/*.sh can compress large lists
GZIP_LISTS=1
# command to reload ip/host lists after update
# comment or leave empty for auto backend selection : ipset or ipfw if present
# on BSD systems with PF no auto reloading happens. you must provide your own command
# set to "-" to disable reload
#LISTS_RELOAD="pfctl -f /etc/pf.conf"

# override ports
#HTTP_PORTS=80-81,85
#HTTPS_PORTS=443,500-501
#QUIC_PORTS=443,444

# CHOOSE OPERATION MODE
# MODE : nfqws,tpws,tpws-socks,filter,custom
# nfqws : nfqws for dpi desync
# tpws : tpws transparent mode
# tpws-socks : tpws socks mode
# filter : no daemon, just create ipset or download hostlist
# custom : custom mode. should modify custom init script and add your own code
MODE=nfqws
# apply fooling to http
MODE_HTTP=1
# for nfqws only. support http keep alives. enable only if DPI checks for http request in any outgoing packet
MODE_HTTP_KEEPALIVE=0
# apply fooling to https
MODE_HTTPS=1
# apply fooling to quic
MODE_QUIC=1
# none,ipset,hostlist,autohostlist
MODE_FILTER=hostlist

# CHOOSE NFQWS DAEMON OPTIONS for DPI desync mode. run "nfq/nfqws --help" for option list
DESYNC_MARK=0x40000000
DESYNC_MARK_POSTNAT=0x20000000
NFQWS_OPT_DESYNC="--dpi-desync=fake,disorder2 --dpi-desync-split-pos=1 --dpi-desync-ttl=6 --dpi-desync-fooling=badsum --dpi-desync-repeats=6 --dpi-desync-any-protocol --dpi-desync-cutoff=d4"
#bk# "--dpi-desync=fake --dpi-desync-ttl=0 --dpi-desync-ttl6=0 --dpi-desync-fooling=badsum"
#NFQWS_OPT_DESYNC_HTTP="--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_HTTPS6="--wssize=1:6 --dpi-desync=split --dpi-desync-ttl=5 --dpi-desync-fooling=none"
NFQWS_OPT_DESYNC_QUIC="--dpi-desync=fake,disorder2 --dpi-desync-repeats=6 --dpi-desync-any-protocol --dpi-desync-cutoff=d4"
#bk# "--dpi-desync=fake --dpi-desync-repeats=6"
#NFQWS_OPT_DESYNC_QUIC6="--dpi-desync=hopbyhop"

# CHOOSE TPWS DAEMON OPTIONS. run "tpws/tpws --help" for option list
TPWS_OPT="--hostspell=HOST --split-http-req=method --split-pos=3 --oob"

# openwrt only : donttouch,none,software,hardware
FLOWOFFLOAD=donttouch

# openwrt: specify networks to be treated as LAN. default is "lan"
#OPENWRT_LAN="lan lan2 lan3"
# openwrt: specify networks to be treated as WAN. default wans are interfaces with default route
#OPENWRT_WAN4="wan vpn"
#OPENWRT_WAN6="wan6 vpn6"

# for routers based on desktop linux and macos. has no effect in openwrt.
# CHOOSE LAN and optinally WAN/WAN6 NETWORK INTERFACES
# or leave them commented if its not router
# it's possible to specify multiple interfaces like this : IFACE_LAN="eth0 eth1 eth2"
# if IFACE_WAN6 is not defined it take the value of IFACE_WAN
IFACE_LAN=br0
IFACE_WAN=eth3
#IFACE_WAN6="ipsec0 wireguard0 he_net"

# should start/stop command of init scripts apply firewall rules ?
# not applicable to openwrt with firewall3+iptables
INIT_APPLY_FW=1
# firewall apply hooks
#INIT_FW_PRE_UP_HOOK="/etc/firewall.zapret.hook.pre_up"
#INIT_FW_POST_UP_HOOK="/etc/firewall.zapret.hook.post_up"
#INIT_FW_PRE_DOWN_HOOK="/etc/firewall.zapret.hook.pre_down"
#INIT_FW_POST_DOWN_HOOK="/etc/firewall.zapret.hook.post_down"

# do not work with ipv4
#DISABLE_IPV4=1
# do not work with ipv6
DISABLE_IPV6=0

# select which init script will be used to get ip or host list
# possible values : get_user.sh get_antizapret.sh get_combined.sh get_reestr.sh get_hostlist.sh
# comment if not required
#GETLIST=

zapret-hosts-user.txt

googlevideo.com
ggpht.com
ytimg.com
l.google.com
youtube.com
play.google.com
youtubei.googleapis.com
youtu.be
nhacmp3youtube.com
googleusercontent.com

zapret-hosts-user-exclude.txt

trakt.tv
notion.so
api.trakt.tv

Прошу дополнить описание. Стыдно признаться но я запнулся на

# git clone https://github.com/bol-van/zapret.git

с ошибкой

# git clone --depth 1 https://github.com/bol-van/zapret.git
Cloning into 'zapret'...
git: 'remote-https' is not a git command. See 'git --help'.

На системе он не установлен оказывается я не тот гид из пакетного менеджера установил 8)
фикс https://stackoverflow.com/a/69520407/11896037

# opkg install git-http

Пара предложений по тексту. Ещё раз большое спасибо!

  1. Прошу поменять абзацы местами

Для установки утилиты zapret, необходимо сначала сначала подготовить внешний USB-накопитель и установить на него систему пакетов репозитория Entware согласно инструкции - Установка-системы-пакетов-репозитория-Entware-на-USB-накопитель.

Также предварительно в веб-интерфейсе роутера нужно обязательно установить в прошивке компоненты: "Протокол IPv6" и "Модули ядра подсистемы Netfilter" (появляется только после выбора компонента "Протокол IPv6")

  1. В конфиге есть отличия от дефолта. О которых не написано в тексте.

IFACE_LAN=br0 # видимо тоже из if config нужно брать. Если есть локальная сеть. По умолчанию отключен

GETLIST=get_user.sh # Я убрал. Похоже это не нужно для режима 'none'? По умолчанию пустой

Спасибо, так и подумал. Все заработало на keenetic Giga 1011

Спасибо за подробную инструкцию.
Вопрос по (9) пункту. После изменений в файле идет список iptable рулов. Их нужно вызывать или это FYI. По тексту не понял.

Репликация в принципе не работает в режиме none, так как отсутствует журнал — источник данных для репликации.

В документации tarantool об этом не слова.
Я считал wal_mode отвечает только за запись на диск. А если хочется отключить репликацию необходимо создавать space с параметром is_local = true

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность