mirror of
https://github.com/bol-van/zapret.git
synced 2026-02-01 15:20:39 +03:00
update bins and docs
This commit is contained in:
42
docs/bsd.txt
42
docs/bsd.txt
@@ -47,15 +47,6 @@ BSD не содержит системного вызова splice. tpws раб
|
||||
Управление асинхронными сокетами в tpws основано на linux-specific механизме epoll.
|
||||
В BSD для его эмуляции используется epoll-shim - прослойка для эмуляции epoll на базе kqueue.
|
||||
|
||||
Некоторые функции dvtws пришлось реализовывать через хаки.
|
||||
В BSD много ограничений, особенностей и багов при работе с низкоуровневой сетью, в особенности в области ipv6.
|
||||
Казалось бы столько лет прошло, а в коде все еще сидят ограничители 15-20 летней давности.
|
||||
Прямая отсылка ipv6 фреймов с измененным source address и вовсе невозможна через raw sockets.
|
||||
OpenBSD не дает отсылать через raw sockets tcp фреймы.
|
||||
Там, где функции нельзя было реализовать напрямую, либо их реализация привела бы к залезанию в низкоуровневые дебри,
|
||||
используются те же divert сокеты. Оказывается через них можно скармливать ядру любые пакеты, обходя ограничения
|
||||
raw sockets. Не знаю насколько это легально, но пока это работает. Однако, имейте в виду. Что-то может сломаться.
|
||||
|
||||
mdig и ip2net полностью работоспособны в BSD. В них нет ничего системо-зависимого.
|
||||
|
||||
FreeBSD
|
||||
@@ -122,10 +113,10 @@ ipfw add 100 fwd ::1,988 tcp from any to any 80,443 proto ip6 recv em1
|
||||
|
||||
Для всего трафика :
|
||||
ipfw delete 100
|
||||
ipfw add 100 divert 989 tcp from any to any 80,443 out not diverted not sockarg xmit em0
|
||||
ipfw add 100 divert 989 tcp from any to any 80,443 out not diverted xmit em0
|
||||
# required for autottl mode only
|
||||
ipfw add 100 divert 989 tcp from any 80,443 to any tcpflags syn,ack in not diverted not sockarg recv em0
|
||||
/opt/zapret/nfq/dvtws --port=989 ---dpi-desync=split2
|
||||
ipfw add 100 divert 989 tcp from any 80,443 to any tcpflags syn,ack in not diverted recv em0
|
||||
/opt/zapret/nfq/dvtws --port=989 --dpi-desync=split2
|
||||
|
||||
Для трафика только на таблицу zapret, за исключением таблицы nozapret :
|
||||
ipfw delete 100
|
||||
@@ -135,15 +126,6 @@ ipfw add 100 divert 989 tcp from any to table\(zapret\) 80,443 out not diverted
|
||||
ipfw add 100 divert 989 tcp from table\(zapret\) 80,443 to any tcpflags syn,ack in not diverted not sockarg recv em0
|
||||
/opt/zapret/nfq/dvtws --port=989 --dpi-desync=split2
|
||||
|
||||
Недопущение зацикливания - повторного вхождения фейк пакетов на обработку.
|
||||
FreeBSD игнорирует sockarg в ipv6.
|
||||
Это искусственное ограничение в коде ядра, которое тянется уже лет 10-20.
|
||||
Кто-то в свое время посчитал код сырым, и до сих пор никто не удосужился поправить.
|
||||
dvtws в FreeBSD отсылает ipv4 фреймы через raw socket. Такие пакеты не 'diverted'. Они отсекаются по 'sockarg'.
|
||||
Для отсылки ipv6 фейков используется divert socket, потому что ipv6 raw сокеты в BSD не дают самому
|
||||
формировать IP заголовок и подменять source address. Фейки в ipv6 'diverted'. Они отсекаются по 'diverted'.
|
||||
В linux nfqws для недопущения зацикливания используется fwmark.
|
||||
|
||||
|
||||
PF в FreeBSD:
|
||||
Настройка аналогична OpenBSD, но есть важные нюансы.
|
||||
@@ -152,8 +134,10 @@ PF в FreeBSD:
|
||||
Смотрите через ifconfig адрес fe80:... и добавляете в правило
|
||||
3) Синтаксис pf.conf немного отличается. Более новая версия PF.
|
||||
4) Лимит на количество элементов таблиц задается так : sysctl net.pf.request_maxcount=2000000
|
||||
5) Слово 'divert-packet' отсутствует в бинарике pfctl, правила divert-packet выдают ошибку.
|
||||
'divert-to' - это не то. Не похоже, что в FreeBSD можно завести dvtws через PF.
|
||||
5) divert-to сломан. Он работает, но не работает механизм предотвращения зацикливаний.
|
||||
Кто-то уже написал патч, но в 14-RELEASE проблема все еще есть.
|
||||
Следовательно, на данный момент работа dvtws через pf невозможна.
|
||||
|
||||
/etc/pf.conf
|
||||
-----------
|
||||
rdr pass on em1 inet6 proto tcp to port {80,443} -> fe80::31c:29ff:dee2:1c4d port 988
|
||||
@@ -168,7 +152,7 @@ pfsense
|
||||
-------
|
||||
|
||||
pfsense основано на FreeBSD.
|
||||
pfsense использует фаервол pf, а он не поддерживает divert.
|
||||
pfsense использует фаервол pf, а он имеет проблемы с divert.
|
||||
К счастью, модули ipfw и ipdivert присутствуют в поставке последних версий pfsense.
|
||||
Их можно подгрузить через kldload.
|
||||
В некоторых более старых версиях pfsense требуется изменить порядок фаерволов через sysctl, сделав ipfw первым.
|
||||
@@ -204,7 +188,7 @@ sysctl net.inet6.ip6.pfil.outbound=ipfw,pf
|
||||
sysctl net.inet6.ip6.pfil.inbound=ipfw,pf
|
||||
|
||||
ipfw delete 100
|
||||
ipfw add 100 divert 989 tcp from any to any 80,443 out not diverted not sockarg xmit em0
|
||||
ipfw add 100 divert 989 tcp from any to any 80,443 out not diverted xmit em0
|
||||
pkill ^dvtws$
|
||||
dvtws --daemon --port 989 --dpi-desync=split2
|
||||
|
||||
@@ -261,6 +245,9 @@ rdr pass on em1 inet6 proto tcp from any to any port = http -> fe80::20c:29ff:5a
|
||||
rdr pass on em1 inet6 proto tcp from any to any port = https -> fe80::20c:29ff:5ae3:4821 port 988
|
||||
-----------
|
||||
|
||||
Так же есть более элегантный способ запуска tpws через @reboot в cron и правило перенаправления в UI.
|
||||
Это позволит не редактировать код pfsense.
|
||||
|
||||
|
||||
OpenBSD
|
||||
-------
|
||||
@@ -351,10 +338,7 @@ MacOS
|
||||
|
||||
Иначально ядро этой ОС "darwin" основывалось на BSD, потому в ней много похожего на другие версии BSD.
|
||||
Однако, как и в других массовых коммерческих проектах, приоритеты смещаются в сторону от оригинала.
|
||||
Яблочники что хотят, то и творят. Меняют, убирают, оставляют какие-то безумно старые версии API и утилит.
|
||||
То, что уже давно везде обновили, может быть еще древним как мамонт в самой последней версии MacOS.
|
||||
Но кого это волнует ?
|
||||
|
||||
Яблочники что хотят, то и творят.
|
||||
Раньше был ipfw, потом его убрали, заменили на PF.
|
||||
Есть сомнения, что divert сокеты в ядре остались. Попытка создать divert socket не выдает ошибок,
|
||||
но полученный сокет ведет себя точно так же, как raw, со всеми его унаследованными косяками + еще яблочно специфическими.
|
||||
|
||||
Reference in New Issue
Block a user