Zapret2: обсуждение

Нужно ведь lua-файлы подгрузить, в которых эти функции объявлены, zapret-lib.lua и zapret-antidpi.lua

Никакого lua кода не зашито в nfqws2 и нет никаких файлов, подгружаемых по умолчанию.
Как и нет особых имен функций, которые nfqws2 как-то выделяет.
Он не знает ни об одной из них - что они хотят, какие должны быть параметры, и следовательно их не проверяет.
Все подсовывает юзер, синтаксические ошибки распознаются сразу, ошибки значений параметров будут валить error-ы только когда начнут функции выполняться

Ок, понял. Но если блокчек2 юзает скрипты lua, то почему сам не добавляет параметр --lua-init в свой выхлоп? Это ведь жутко не удобно - при тестировании найденных стратегий добавлять его вручную в каждую из 1000+ строчек. И во-вторых, как я узнаю, какой скрипт нужно подключать для каждой конкретной стратегии?

Там их всего 2. Может изредка еще и auto.
Блокчек и не делался как источник копипасты.
Он бы этой простыней одинаковых lua-init забил бы вывод.
Начали бы вписывать в NFQWS2_OPT на Linux без понимания.
Есть параметры, требующие экранирования в одних случаях, а в других - нет. Знак <
Нет, это оставлено намеренно, чтобы голову включали

Отмазки отмазки отмазки… Ой, ну ладно, так и быть, поверим :innocent:

В блокчеке проверяются СТРАТЕГИИ, а не “строчки которы надо куда-то вставить”. Вставлять в вывод лишние луа файлы бессмысленно и делает вывод блокчека неудобным.

keenetic на arm.

поведение одинаковое: для 212.192.127.40 (Вход на сайт | Системауправления обучением) и для 91.90.210.115 (https://netschool.edu22.info/), оба сайта образовательных.

в шарке и по логам: reassembly (сборка) запускается до проверки ip exclude. очевидно, что даже если мы добавим ip в exclude, это не поможет.

nfqws2 пытается удерживать пакеты для сборки, но окно сервера (winsize_calc) меньше этого объема. nfqws2 не знает об этом и будет ждать, но ACK не придет, так как tcp window full.

в логах:

packet: id=44 pass unmodified
no lua functions in this profile
dpi desync src=212.192.127.40:443 dst=ClientIP:44356 track_direction=in fixed_direction=in connection_proto=unknown payload_type=empty
desync profile 0 (no_action) matches
IP4: 212.192.127.40 => ClientIP proto=tcp sport=443 dport=44356 flags=SA seq=831772832 ack_seq=2880925763

packet: id=46 drop
DELAY desync until reasm is complete (#1)
starting reassemble. now we have 724/1754
TLS client hello is PARTIAL
packet contains tls_client_hello payload
using cached desync profile 0 (no_action)
IP4: LocalIP => 212.192.127.40 proto=tcp sport=44356 dport=443 flags=A seq=2880925763 ack_seq=831772833

packet: id=47 drop
DELAY desync until reasm is complete (#2)
TLS client hello is PARTIAL
reassemble : feeding data payload size=724. now we have 1448/1754
using cached desync profile 0 (no_action)
IP4: LocalIP => 212.192.127.40 proto=tcp sport=44356 dport=443 flags=AP seq=2880926487 ack_seq=831772833

packet: id=60 drop
DELAY desync until reasm is complete (#3)
TLS client hello is PARTIAL
reassemble : feeding data payload size=724. now we have 1448/1754
using cached desync profile 0 (no_action)
IP4: LocalIP => 212.192.127.40 proto=tcp sport=44356 dport=443 flags=AP seq=2880926487 ack_seq=831772833

packet: id=93 drop
DELAY desync until reasm is complete (#8)
TLS client hello is PARTIAL
reassemble : feeding data payload size=512. now we have 1448/1754
using cached desync profile 0 (no_action)
IP4: LocalIP => 212.192.127.40 proto=tcp sport=44356 dport=443 flags=A seq=2880925763 ack_seq=831772833

packet: id=97 drop
DELAY desync until reasm is complete (#9)
TLS client hello is PARTIAL
reassemble : feeding data payload size=256. now we have 1448/1754
using cached desync profile 0 (no_action)
IP4: LocalIP => 212.192.127.40 proto=tcp sport=44356 dport=443 flags=A seq=2880925763 ack_seq=831772833

packet: id=188 pass unmodified
no lua functions in this profile
[/opt/etc/nfqws2/lists/ipset_exclude.list] exclude ipset check for 212.192.127.40 : positive
desync profile 0 (no_action) matches
IP4: LocalIP => 212.192.127.40 proto=tcp sport=44356 dport=443 flags=R seq=2880925763 ack_seq=0

у другого человека с той же проблемой:

packet: id=196 drop
DELAY desync until reasm is complete (#3)
TLS client hello is PARTIAL
reassemble : feeding data payload size=1452. now we have 1452/1786
using cached desync profile 0 (no_action)
client mode desync profile/ipcache search target ip=212.192.127.40 port=443
TCP: len=1452 : 16 03 01 06 F5 01 00 06 F1 03 03 29 D9 92 BD F1 DB D5 CC 6C E6 64 5E 75 AC 36 68 FF 06 EA 38 13 ... : ...........).......l.d^u.6h...8. ...
IP4: 192.168.1.122 => 212.192.127.40 proto=tcp ttl=127 sport=53660 dport=443 flags=A seq=4225229583 ack_seq=4230215789
packet: id=196 len=1492 mark=00000000 ifin=br-lan(10) ifout=wan(3)

в баузере у меня - таймаут, у другого человека - err_connection_reset

по второму серверу точно должно быть reasm cancelled because server window size %u is smaller than expected reasm size %zu\n", ctrack->pos.server.winsize_calc

нужно как-то исключить эти проблемные ip.

У меня четко отрабатывает как надо.
Убедиться, что версия последняя
Убедиться, что перехватывается хотя бы входящий SYN,ACK.
С нулевым перехватом входящих защита не сработает
На винде SYN,FIN,RST перехватываются автоматически, --wf-tcp-in не нужен

Есть какой-нибудь более удобный или универсальный способ настроить под винду так, чтобы модификация пакетов не применялась для туннелей, помимо прибивания гвоздями через --wf-iface= к Ethernet-адаптеру по его номеру?

–nlm-filter, --ssid-filter
но там только включающий список, эксепшинов нет и типа интерфейса тоже нет
и работает только по факту наличия интерфейса, в маршрутизацию не лезет
распознать ситуацию “включили VPN” или “отключили VPN” не может
–wf-iface - пожалуй единственный способ
в windivert нет средств фильтрануть тип интерфейса на уровне ядра

спасибо.

212.192.127.40 сам по себе странный какой-то.
перехватываются (все по мануалу), если бы не перехватывались - были бы проблемы с тем же автолистом. вроде корректно. версия последняя.

на втором роутере с openwrt на борту сейчас нет nfqws2, обход не нужен - пока не хочу его трогать, чтобы проверить.
видимо, что-то у меня не получается с connbytes (iptables).

сейчас windows vm on kvm (в режиме моста) подниму, посмотрю хоть как это на винде происходит.

Можно прогнать на соединении --in-range=a --lua-desync=pktdebug
будет простыня, ее в файл
там искать winsize_calc
Если он где-то 0 после пакетов SYN туда-сюда или большой (не 1448 как на том сервере), то проблема.
В шарке четко видно, что сервак выставляет winsize мелкий для slow start. Это анти-ддос

Релиз 0.9.4.4, nfqws2 падает сразу на старте с ошибкой LUA INIT ERROR

Linux nfqws2-aks 5.6.3 #2 SMP Thu Feb 12 13:51:00 UTC 2026 aarch64 Linux (RouterOS 7.21.3)

Спойлер

nfqws2:/opt/zapret2# /opt/zapret2/nfq2/nfqws2 --user=tpws --fwmark=0x40000000 --qnum=300 --debug 1
github version v0.9.4.4 (96f58adc7ac99b5e3f9d88435111505448fe3dfe) lua_compat_ver 5

adding low-priority default empty desync profile
we have 1 user defined desync profile(s) and default low priority profile 0
we have 0 user defined desync template(s)

lists summary:

blobs summary:
blob ‘fake_default_tls’ : size=680 alloc=808
blob ‘fake_default_http’ : size=263 alloc=263
blob ‘fake_default_quic’ : size=620 alloc=620

initializing conntrack with timeouts tcp=60:300:60 udp=60
ipcache lifetime 7200s
Running as UID=100 GID=65533,65533
initializing raw sockets bind-fix4=0 bind-fix6=0
set_socket_buffers fd=3 rcvbuf=2048 sndbuf=32768
fd=3 SO_RCVBUF=4096
fd=3 SO_SNDBUF=65536
set_socket_buffers fd=4 rcvbuf=2048 sndbuf=32768
fd=4 SO_RCVBUF=4096
fd=4 SO_SNDBUF=65536

LUA INIT
LUA INIT ERROR

На x86-64 такого не наблюдается.

Предлагаю снять upx, проверить.
Если нет, запустить под strace и кинуть сюда последние 30-40 записей
Проверьте права на /dev/urandom.
Должен быть доступ o+r

Распаковал бинарник upx-ом

Спойлер

ls -l /opt/zapret2/binaries/linux-arm64/
total 795
-rwxr-xr-x 1 root root 37728 Mar 3 10:54 ip2net
-rwxr-xr-x 1 root root 51956 Mar 3 10:54 mdig
-rwxr-xr-x 1 root root 723560 Mar 3 18:07 nfqws2

Ошибка осталась

Снял трейс

Спойлер

strace /opt/zapret2/nfq2/nfqws2 --user=tpws --fwmark=0x40000000 --qnum=300 --debug 1
execve(“/opt/zapret2/nfq2/nfqws2”, [“/opt/zapret2/nfq2/nfqws2”, “–user=tpws”, “–fwmark=0x40000000”, “–qnum=300”, “–debug”, “1”], 0xfffffffffc38 /* 17 vars */) = 0
set_tid_address(0x4c92e0) = 320
brk(NULL) = 0x4ca000
brk(0x4cc000) = 0x4cc000
mmap(0x4ca000, 4096, PROT_NONE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x4ca000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffff7ffd000
ioctl(1, TIOCGWINSZ, {ws_row=65, ws_col=316, ws_xpixel=0, ws_ypixel=0}) = 0
writev(1, [{iov_base=“github version v0.9.4.4 (96f58ad”…, iov_len=83}, {iov_base=“\n\n”, iov_len=2}], 2github version v0.9.4.4 (96f58adc7ac99b5e3f9d88435111505448fe3dfe) lua_compat_ver 5

) = 85
readlinkat(AT_FDCWD, “/opt”, 0xffffffff9a78, 4083) = -1 EINVAL (Invalid argument)
readlinkat(AT_FDCWD, “/opt/zapret2”, 0xffffffff9a78, 4091) = -1 EINVAL (Invalid argument)
readlinkat(AT_FDCWD, “/opt/zapret2/nfq2”, 0xffffffff9a78, 4096) = -1 EINVAL (Invalid argument)
getpid() = 320
capget({version=_LINUX_CAPABILITY_VERSION_3, pid=320}, {effective=1<<CAP_CHOWN|1<<CAP_DAC_OVERRIDE|1<<CAP_DAC_READ_SEARCH|1<<CAP_FOWNER|1<<CAP_FSETID|1<<CAP_KILL|1<<CAP_SETGID|1<<CAP_SETUID|1<<CAP_SETPCAP|1<<CAP_LINUX_IMMUTABLE|1<<CAP_NET_BIND_SERVICE|1<<CAP_NET_BROADCAST|1<<CAP_NET_ADMIN|1<<CAP_NET_RAW|1<<CAP_IPC_LOCK|1<<CAP_IPC_OWNER|1<<CAP_SYS_MODULE|1<<CAP_SYS_RAWIO|1<<CAP_SYS_CHROOT|1<<CAP_SYS_PTRACE|1<<CAP_SYS_PACCT|1<<CAP_SYS_ADMIN|1<<CAP_SYS_BOOT|1<<CAP_SYS_NICE|1<<CAP_SYS_RESOURCE|1<<CAP_SYS_TIME|1<<CAP_SYS_TTY_CONFIG|1<<CAP_MKNOD|1<<CAP_LEASE|1<<CAP_AUDIT_WRITE|1<<CAP_AUDIT_CONTROL|1<<CAP_SETFCAP|1<<CAP_MAC_OVERRIDE|1<<CAP_MAC_ADMIN|1<<CAP_SYSLOG|1<<CAP_WAKE_ALARM|1<<CAP_BLOCK_SUSPEND|1<<CAP_AUDIT_READ, permitted=1<<CAP_CHOWN|1<<CAP_DAC_OVERRIDE|1<<CAP_DAC_READ_SEARCH|1<<CAP_FOWNER|1<<CAP_FSETID|1<<CAP_KILL|1<<CAP_SETGID|1<<CAP_SETUID|1<<CAP_SETPCAP|1<<CAP_LINUX_IMMUTABLE|1<<CAP_NET_BIND_SERVICE|1<<CAP_NET_BROADCAST|1<<CAP_NET_ADMIN|1<<CAP_NET_RAW|1<<CAP_IPC_LOCK|1<<CAP_IPC_OWNER|1<<CAP_SYS_MODULE|1<<CAP_SYS_RAWIO|1<<CAP_SYS_CHROOT|1<<CAP_SYS_PTRACE|1<<CAP_SYS_PACCT|1<<CAP_SYS_ADMIN|1<<CAP_SYS_BOOT|1<<CAP_SYS_NICE|1<<CAP_SYS_RESOURCE|1<<CAP_SYS_TIME|1<<CAP_SYS_TTY_CONFIG|1<<CAP_MKNOD|1<<CAP_LEASE|1<<CAP_AUDIT_WRITE|1<<CAP_AUDIT_CONTROL|1<<CAP_SETFCAP|1<<CAP_MAC_OVERRIDE|1<<CAP_MAC_ADMIN|1<<CAP_SYSLOG|1<<CAP_WAKE_ALARM|1<<CAP_BLOCK_SUSPEND|1<<CAP_AUDIT_READ, inheritable=0}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffff7ffc000
openat(AT_FDCWD, “/etc/passwd”, O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
fcntl(3, F_SETFD, FD_CLOEXEC) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffff7ffb000
fcntl(3, F_SETFD, FD_CLOEXEC) = 0
read(3, “root:x:0:0:root:/root:/bin/ash\nb”…, 1024) = 1024
read(3, “gin\nsmmsp:x:209:209:smmsp:/var/s”…, 1024) = 204
close(3) = 0
munmap(0xfffff7ffb000, 4096) = 0
writev(1, [{iov_base=“”, iov_len=0}, {iov_base=“adding low-priority default empt”…, iov_len=49}], 2adding low-priority default empty desync profile
) = 49
writev(1, [{iov_base=“we have 1”, iov_len=9}, {iov_base=" user defined desync profile(s) “…, iov_len=67}], 2we have 1 user defined desync profile(s) and default low priority profile 0
) = 76
writev(1, [{iov_base=“we have 0”, iov_len=9}, {iov_base=” user defined desync template(s)“…, iov_len=33}], 2we have 0 user defined desync template(s)
) = 42
writev(1, [{iov_base=”“, iov_len=0}, {iov_base=”\nlists summary:\n", iov_len=16}], 2
lists summary:
) = 16
writev(1, [{iov_base=“”, iov_len=0}, {iov_base=“\nblobs summary:\n”, iov_len=16}], 2
blobs summary:
) = 16
writev(1, [{iov_base=“blob ‘fake_default_tls’ : size=6”…, iov_len=44}, {iov_base=“\n”, iov_len=1}], 2blob ‘fake_default_tls’ : size=680 alloc=808
) = 45
writev(1, [{iov_base=“blob ‘fake_default_http’ : size=”…, iov_len=45}, {iov_base=“\n”, iov_len=1}], 2blob ‘fake_default_http’ : size=263 alloc=263
) = 46
writev(1, [{iov_base=“blob ‘fake_default_quic’ : size=”…, iov_len=45}, {iov_base=“\n”, iov_len=1}], 2blob ‘fake_default_quic’ : size=620 alloc=620
) = 46
writev(1, [{iov_base=“”, iov_len=0}, {iov_base=“\n”, iov_len=1}], 2
) = 1
writev(1, [{iov_base=“initializing conntrack with time”…, iov_len=57}, {iov_base=“\n”, iov_len=1}], 2initializing conntrack with timeouts tcp=60:300:60 udp=60
) = 58
writev(1, [{iov_base=“ipcache lifetime 7200”, iov_len=21}, {iov_base=“s\n”, iov_len=2}], 2ipcache lifetime 7200s
) = 23
prctl(PR_SET_KEEPCAPS, 1) = 0
socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0) = 3
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffff7ffb000
connect(3, {sa_family=AF_UNIX, sun_path=“/var/run/nscd/socket”}, 24) = -1 ENOENT (No such file or directory)
close(3) = 0
munmap(0xfffff7ffb000, 4096) = 0
openat(AT_FDCWD, “/etc/group”, O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
fcntl(3, F_SETFD, FD_CLOEXEC) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffff7ffb000
fcntl(3, F_SETFD, FD_CLOEXEC) = 0
read(3, “root:x:0:root\nbin:x:1:root,bin,d”…, 1024) = 701
read(3, “”, 1024) = 0
close(3) = 0
munmap(0xfffff7ffb000, 4096) = 0
rt_sigprocmask(SIG_BLOCK, ~[RTMIN RT_1 RT_2], , 8) = 0
rt_sigprocmask(SIG_BLOCK, ~, NULL, 8) = 0
setgroups(2, [65533, 65533]) = 0
rt_sigprocmask(SIG_SETMASK, , NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, ~[RTMIN RT_1 RT_2], , 8) = 0
rt_sigprocmask(SIG_BLOCK, ~, NULL, 8) = 0
setgid(65533) = 0
rt_sigprocmask(SIG_SETMASK, , NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, ~[RTMIN RT_1 RT_2], , 8) = 0
rt_sigprocmask(SIG_BLOCK, ~, NULL, 8) = 0
setuid(100) = 0
rt_sigprocmask(SIG_SETMASK, , NULL, 8) = 0
openat(AT_FDCWD, “/proc/sys/kernel/cap_last_cap”, O_RDONLY|O_LARGEFILE) = 3
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffff7ffb000
read(3, “37\n”, 1024) = 3
lseek(3, -1, SEEK_CUR) = 2
close(3) = 0
munmap(0xfffff7ffb000, 4096) = 0
getpid() = 320
capset({version=_LINUX_CAPABILITY_VERSION_3, pid=320}, {effective=1<<CAP_SETPCAP|1<<CAP_NET_ADMIN|1<<CAP_NET_RAW, permitted=1<<CAP_SETPCAP|1<<CAP_NET_ADMIN|1<<CAP_NET_RAW, inheritable=0}) = 0
prctl(PR_CAPBSET_DROP, CAP_CHOWN) = 0
prctl(PR_CAPBSET_DROP, CAP_DAC_OVERRIDE) = 0
prctl(PR_CAPBSET_DROP, CAP_DAC_READ_SEARCH) = 0
prctl(PR_CAPBSET_DROP, CAP_FOWNER) = 0
prctl(PR_CAPBSET_DROP, CAP_FSETID) = 0
prctl(PR_CAPBSET_DROP, CAP_KILL) = 0
prctl(PR_CAPBSET_DROP, CAP_SETGID) = 0
prctl(PR_CAPBSET_DROP, CAP_SETUID) = 0
prctl(PR_CAPBSET_DROP, CAP_SETPCAP) = 0
prctl(PR_CAPBSET_DROP, CAP_LINUX_IMMUTABLE) = 0
prctl(PR_CAPBSET_DROP, CAP_NET_BIND_SERVICE) = 0
prctl(PR_CAPBSET_DROP, CAP_NET_BROADCAST) = 0
prctl(PR_CAPBSET_DROP, CAP_NET_ADMIN) = 0
prctl(PR_CAPBSET_DROP, CAP_NET_RAW) = 0
prctl(PR_CAPBSET_DROP, CAP_IPC_LOCK) = 0
prctl(PR_CAPBSET_DROP, CAP_IPC_OWNER) = 0
prctl(PR_CAPBSET_DROP, CAP_SYS_MODULE) = 0
prctl(PR_CAPBSET_DROP, CAP_SYS_RAWIO) = 0
prctl(PR_CAPBSET_DROP, CAP_SYS_CHROOT) = 0
prctl(PR_CAPBSET_DROP, CAP_SYS_PTRACE) = 0
prctl(PR_CAPBSET_DROP, CAP_SYS_PACCT) = 0
prctl(PR_CAPBSET_DROP, CAP_SYS_ADMIN) = 0
prctl(PR_CAPBSET_DROP, CAP_SYS_BOOT) = 0
prctl(PR_CAPBSET_DROP, CAP_SYS_NICE) = 0
prctl(PR_CAPBSET_DROP, CAP_SYS_RESOURCE) = 0
prctl(PR_CAPBSET_DROP, CAP_SYS_TIME) = 0
prctl(PR_CAPBSET_DROP, CAP_SYS_TTY_CONFIG) = 0
prctl(PR_CAPBSET_DROP, CAP_MKNOD) = 0
prctl(PR_CAPBSET_DROP, CAP_LEASE) = 0
prctl(PR_CAPBSET_DROP, CAP_AUDIT_WRITE) = 0
prctl(PR_CAPBSET_DROP, CAP_AUDIT_CONTROL) = 0
prctl(PR_CAPBSET_DROP, CAP_SETFCAP) = 0
prctl(PR_CAPBSET_DROP, CAP_MAC_OVERRIDE) = 0
prctl(PR_CAPBSET_DROP, CAP_MAC_ADMIN) = 0
prctl(PR_CAPBSET_DROP, CAP_SYSLOG) = 0
prctl(PR_CAPBSET_DROP, CAP_WAKE_ALARM) = 0
prctl(PR_CAPBSET_DROP, CAP_BLOCK_SUSPEND) = 0
prctl(PR_CAPBSET_DROP, CAP_AUDIT_READ) = 0
getpid() = 320
capset({version=_LINUX_CAPABILITY_VERSION_3, pid=320}, {effective=1<<CAP_NET_ADMIN|1<<CAP_NET_RAW, permitted=1<<CAP_NET_ADMIN|1<<CAP_NET_RAW, inheritable=0}) = 0
getuid() = 100
getgroups(128, [65533, 65533]) = 2
writev(1, [{iov_base=“Running as UID=100 GID=65533,655”…, iov_len=34}, {iov_base=“\n”, iov_len=1}], 2Running as UID=100 GID=65533,65533
) = 35
prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0) = 0
prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, {len=23, filter=0xffffffffa9c8}) = 0
writev(1, [{iov_base=“initializing raw sockets bind-fi”…, iov_len=48}, {iov_base=“\n”, iov_len=1}], 2initializing raw sockets bind-fix4=0 bind-fix6=0
) = 49
socket(AF_INET, SOCK_RAW, IPPROTO_RAW) = 3
writev(1, [{iov_base=“set_socket_buffers fd=3 rcvbuf=2”…, iov_len=48}, {iov_base=“\n”, iov_len=1}], 2set_socket_buffers fd=3 rcvbuf=2048 sndbuf=32768
) = 49
setsockopt(3, SOL_SOCKET, SO_RCVBUF, [2048], 4) = 0
setsockopt(3, SOL_SOCKET, SO_SNDBUF, [32768], 4) = 0
getsockopt(3, SOL_SOCKET, SO_RCVBUF, [4096], [4]) = 0
writev(1, [{iov_base=“fd=3 SO_RCVBUF=4096”, iov_len=19}, {iov_base=“\n”, iov_len=1}], 2fd=3 SO_RCVBUF=4096
) = 20
getsockopt(3, SOL_SOCKET, SO_SNDBUF, [65536], [4]) = 0
writev(1, [{iov_base=“fd=3 SO_SNDBUF=65536”, iov_len=20}, {iov_base=“\n”, iov_len=1}], 2fd=3 SO_SNDBUF=65536
) = 21
setsockopt(3, SOL_SOCKET, SO_PRIORITY, [6], 4) = 0
setsockopt(3, SOL_IP, IP_NODEFRAG, [1], 4) = 0
setsockopt(3, SOL_IP, IP_FREEBIND, [1], 4) = 0
socket(AF_INET6, SOCK_RAW, IPPROTO_RAW) = 4
writev(1, [{iov_base=“set_socket_buffers fd=4 rcvbuf=2”…, iov_len=48}, {iov_base=“\n”, iov_len=1}], 2set_socket_buffers fd=4 rcvbuf=2048 sndbuf=32768
) = 49
setsockopt(4, SOL_SOCKET, SO_RCVBUF, [2048], 4) = 0
setsockopt(4, SOL_SOCKET, SO_SNDBUF, [32768], 4) = 0
getsockopt(4, SOL_SOCKET, SO_RCVBUF, [4096], [4]) = 0
writev(1, [{iov_base=“fd=4 SO_RCVBUF=4096”, iov_len=19}, {iov_base=“\n”, iov_len=1}], 2fd=4 SO_RCVBUF=4096
) = 20
getsockopt(4, SOL_SOCKET, SO_SNDBUF, [65536], [4]) = 0
writev(1, [{iov_base=“fd=4 SO_SNDBUF=65536”, iov_len=20}, {iov_base=“\n”, iov_len=1}], 2fd=4 SO_SNDBUF=65536
) = 21
setsockopt(4, SOL_SOCKET, SO_PRIORITY, [6], 4) = 0
setsockopt(4, SOL_IPV6, IPV6_FREEBIND, [1], 4) = 0
rt_sigprocmask(SIG_UNBLOCK, [RT_1 RT_2], NULL, 8) = 0
rt_sigaction(SIGHUP, {sa_handler=0x41711c, sa_mask=, sa_flags=SA_RESTORER, sa_restorer=0x47cc50}, NULL, 8) = 0
rt_sigaction(SIGUSR1, {sa_handler=0x41ce00, sa_mask=, sa_flags=SA_RESTORER, sa_restorer=0x47cc50}, NULL, 8) = 0
rt_sigaction(SIGUSR2, {sa_handler=0x4171f4, sa_mask=, sa_flags=SA_RESTORER, sa_restorer=0x47cc50}, NULL, 8) = 0
rt_sigaction(SIGINT, {sa_handler=0x41715c, sa_mask=, sa_flags=SA_RESTORER, sa_restorer=0x47cc50}, NULL, 8) = 0
rt_sigaction(SIGTERM, {sa_handler=0x4171a8, sa_mask=, sa_flags=SA_RESTORER, sa_restorer=0x47cc50}, NULL, 8) = 0
writev(1, [{iov_base=“”, iov_len=0}, {iov_base=“\nLUA INIT\n”, iov_len=10}], 2
LUA INIT
) = 10
getrandom(“\xbb\x79\x39\xbc\x01\xeb\x79\xf3\x12\x10\x3c\x0e\x0a\x7d\xf8\x5a\xda\x6a\xdd\x61\xd6\x82\x2f\x0a\x6a\x0f\xf4\x07\xd1\x1c\x82\x8e”, 32, 0) = 32
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffff7ffa000
writev(2, [{iov_base=“LUA INIT ERROR\n”, iov_len=15}, {iov_base=NULL, iov_len=0}], 2LUA INIT ERROR
) = 15
close(3) = 0
close(4) = 0
munmap(0xfffff7ffc000, 4096) = 0
close(1) = 0
close(2) = 0
exit_group(1) = ?
+++ exited with 1 +++

На /dev/urandom права o+r есть (оно и видно из трейса - getrandom возвращает 32, а не -1)

Спойлер

ls -l /dev/urandom
crw-rw-rw- 1 root root 1, 9 Mar 3 18:06 /dev/urandom

понятно. скорее всего проблема в том, что я перешел на аллокатор из musl вместо lj_alloc.
У ARM64 стандартная проблема с адресами в памяти, которые не лезут в 47 бит
попробуйте предыдущую версию. если не падает, вероятно в этом порылась собака

Предыдущая работает отлично, откатился на неё.

nfqws2.gz (391,3 КБ)

А это ?
Собрано с lj_alloc

И этот тоже. С github
nfqws2.gz (386,9 КБ)

Оба запустились без ошибок.

Спойлер

nfqws2-bor:~# /tmp/nfqws2 --user=tpws --fwmark=0x40000000 --qnum=301
self-built version Mar 3 2026 19:01:37 lua_compat_ver 5

we have 1 user defined desync profile(s) and default low priority profile 0
we have 0 user defined desync template(s)
Running as UID=100 GID=65533,65533
initializing raw sockets bind-fix4=0 bind-fix6=0
LUA v5.1
JIT: ON fold cse dce fwd dse narrow loop abc sink fuse
opening nfq library handle
unbinding existing nf_queue handler for AF_INET (if any)
binding nfnetlink_queue as nf_queue handler for AF_INET
unbinding existing nf_queue handler for AF_INET6 (if any)
binding nfnetlink_queue as nf_queue handler for AF_INET6
binding this socket to queue ‘301’
setting copy_packet mode
could not set receive buffer size to 1048576. real size is 212992
^CINT received !
quit requested
unbinding from queue 301
closing nfq library handle
nfqws2-bor:~# /tmp/nfqws2\ (1) --user=tpws --fwmark=0x40000000 --qnum=301
github version master (98bdd5db272e8b5e6693a238bbcbf9845aa2ba65) lua_compat_ver 5

we have 1 user defined desync profile(s) and default low priority profile 0
we have 0 user defined desync template(s)
Running as UID=100 GID=65533,65533
initializing raw sockets bind-fix4=0 bind-fix6=0
LUA v5.1 LuaJIT 2.1.1756211046 OpenResty
JIT: ON fold cse dce fwd dse narrow loop abc sink fuse
opening nfq library handle
unbinding existing nf_queue handler for AF_INET (if any)
binding nfnetlink_queue as nf_queue handler for AF_INET
unbinding existing nf_queue handler for AF_INET6 (if any)
binding nfnetlink_queue as nf_queue handler for AF_INET6
binding this socket to queue ‘301’
setting copy_packet mode
could not set receive buffer size to 1048576. real size is 212992
^CINT received !
quit requested
unbinding from queue 301
closing nfq library handl

В запрет 2 стал хорошо работать автохостлист по 16кб блокировкам, 2 дня тестил вот, сама сборка от RR