docs: Fix quick_start, bsd formatting cleanup

This commit is contained in:
maximilionus 2024-11-07 19:04:23 +03:00
parent 905a9519ce
commit e1e55b1653
2 changed files with 141 additions and 146 deletions

View File

@ -2,7 +2,7 @@
## Поддерживаемые версии
**FreeBSD** 11.x+ , **OpenBSD** 6.x+, частично **MacOS Sierra +**
**FreeBSD** 11.x+ , **OpenBSD** 6.x+, частично **MacOS Sierra** +
> [!CAUTION]
> На более старых может собираться, может не собираться, может работать или не
@ -14,9 +14,9 @@
## Особенности BSD систем
### Отсутствие nfqueue
В **BSD** нет `nfqueue`. Похожий механизм - *divert sockets*. Из каталога
**nfq** под **BSD** собирается `dvtws` вместо `nfqws`. Он разделяет с `nfqws`
большую часть кода и почти совпадает по параметрам командной строки.
В **BSD** нет `nfqueue`. Похожий механизм - divert sockets. Из каталога
[`nfq/`](../nfq/) под **BSD** собирается `dvtws` вместо `nfqws`. Он разделяет с
`nfqws` большую часть кода и почти совпадает по параметрам командной строки.
### Типы Firewall
**FreeBSD** содержит 3 фаервола : **IPFilter**, **ipfw** и **Packet Filter (PF
@ -35,49 +35,46 @@ make bsd
make mac
```
**FreeBSD** make распознает *BSDmakefile*, **OpenBSD** и **MacOS** - нет.
Поэтому там используется отдельный *target* в *Makefile*. Сборка всех
исходников:
**FreeBSD** make распознает BSDmakefile, **OpenBSD** и **MacOS** - нет. Поэтому
там используется отдельный target в Makefile. Сборка всех исходников:
```sh
make -C /opt/zapret
```
### Divert сокеты
*Divert сокет* это внутренний тип сокета ядра **BSD**. Он не привязывается ни к
Divert сокет это внутренний тип сокета ядра **BSD**. Он не привязывается ни к
какому сетевому адресу, не участвует в обмене данными через сеть и
идентифицируется по номеру порта `1..65535`. Аналогия с номером очереди
`NFQUEUE`. На *divert сокеты* заворачивается трафик посредством правил **ipfw**
или **PF**. Если в фаерволе есть *правило divert*, но на *divert порту* никто
не слушает, то пакеты дропаются. Это поведение аналогично правилам `NFQUEUE`
без параметра `--queue-bypass`. На **FreeBSD** *divert сокеты* могут быть
только **ipv4**, хотя на них принимаются и **ipv4**, и **ipv6** фреймы. На
**OpenBSD** *divert сокеты* создаются отдельно для **ipv4** и **ipv6** и
работают только с одной версией `ip` каждый. На **MacOS** похоже, что *divert
сокеты* из ядра вырезаны. См подробнее раздел про **MacOS**. Отсылка в *divert
сокет* работает аналогично отсылке через *raw socket* на linux. Передается
полностью IP фрейм, начиная с ip загловка. Эти особенности учитываются в
`dvtws`.
`NFQUEUE`. На divert сокеты заворачивается трафик посредством правил ipfw или
PF. Если в фаерволе есть правило divert, но на divert порту никто не слушает,
то пакеты дропаются. Это поведение аналогично правилам `NFQUEUE` без параметра
`--queue-bypass`. На **FreeBSD** divert сокеты могут быть только ipv4, хотя на
них принимаются и ipv4, и ipv6 фреймы. На **OpenBSD** divert сокеты создаются
отдельно для ipv4 и ipv6 и работают только с одной версией `ip` каждый. На
**MacOS** похоже, что divert сокеты из ядра вырезаны. См подробнее раздел про
**MacOS**. Отсылка в divert сокет работает аналогично отсылке через raw socket
на linux. Передается полностью IP фрейм, начиная с ip загловка. Эти особенности
учитываются в `dvtws`.
### Lookup Tables
Скрипты `ipset/*.sh` при наличии **ipfw** работают с *ipfw lookup tables*. Это
прямой аналог **ipset**. *lookup tables* не разделены на **v4** и **v6**. Они
могут содержать **v4** и **v6** адреса и подсети одновременно. Если **ipfw**
отсутствует, то действие зависит от переменной `LISTS_RELOAD` в *config*. Если
она задана, то выполняется команда из `LISTS_RELOAD`. В противном случае не
делается ничего. Если `LISTS_RELOAD=-`, то заполнение таблиц отключается даже
при наличии **ipfw**.
Скрипты [`ipset/*.sh`](../ipset/) при наличии ipfw работают с ipfw lookup
tables. Это прямой аналог ipset. lookup tables не разделены на v4 и v6. Они
могут содержать v4 и v6 адреса и подсети одновременно. Если ipfw отсутствует,
то действие зависит от переменной `LISTS_RELOAD` в config. Если она задана, то
выполняется команда из `LISTS_RELOAD`. В противном случае не делается ничего.
Если `LISTS_RELOAD=-`, то заполнение таблиц отключается даже при наличии ipfw.
### PF с файла
**PF** может загружать ip таблицы из файла. Чтобы использовать эту возможность
следует отключить сжатие gzip для листов через параметр файла *config*
PF может загружать ip таблицы из файла. Чтобы использовать эту возможность
следует отключить сжатие gzip для листов через параметр файла config:
`GZIP_LISTS=0`.
### Отсутствие splice
**BSD** не содержит системного вызова splice. `tpws` работает через переброску
данных в *user mode* в оба конца. Это медленнее, но не критически. Управление
асинхронными сокетами в `tpws` основано на linux-specific механизме *epoll*. В
**BSD** для его эмуляции используется *epoll-shim* - прослойка для эмуляции
*epoll* на базе *kqueue*.
данных в user mode в оба конца. Это медленнее, но не критически. Управление
асинхронными сокетами в `tpws` основано на linux-specific механизме epoll. В
**BSD** для его эмуляции используется epoll-shim - прослойка для эмуляции epoll
на базе kqueue.
### mdig, ip2net
mdig и ip2net полностью работоспособны в **BSD**. В них нет ничего
@ -86,7 +83,7 @@ mdig и ip2net полностью работоспособны в **BSD**. В н
## FreeBSD
### Подгрузка ipdivert
*Divert сокеты* требуют специального модуля ядра - `ipdivert`.
Divert сокеты требуют специального модуля ядра - `ipdivert`.
- Поместите следующие строки в `/boot/loader.conf` (создать, если отсутствует):
```
@ -94,19 +91,19 @@ ipdivert_load="YES"
net.inet.ip.fw.default_to_accept=1
```
- `/etc/rc.conf`:
`/etc/rc.conf`:
```
firewall_enable="YES"
firewall_script="/etc/rc.firewall.my"
```
- `/etc/rc.firewall.my`:
`/etc/rc.firewall.my`:
```sh
$ ipfw -q -f flush
```
### Авто-восстановление правил ipfw и работа в фоне
В `/etc/rc.firewall.my` можно дописывать правила **ipfw**, чтобы они
В `/etc/rc.firewall.my` можно дописывать правила ipfw, чтобы они
восстанавливались после перезагрузки. Оттуда же можно запускать и демоны
zapret, добавив в параметры `--daemon`. Например так:
```sh
@ -123,7 +120,7 @@ $ /etc/rc.d/ipfw restart
Краткая инструкция по запуску `tpws` в прозрачном режиме.
> [!NOTE]
> Предполагается, что интерфейс **LAN** называется `em1`, **WAN** - `em0`.
> Предполагается, что интерфейс LAN называется `em1`, WAN - `em0`.
#### Весь трафик
```sh
@ -151,7 +148,7 @@ $ /opt/zapret/tpws/tpws --port=988 --user=daemon --bind-addr=::1 --bind-addr=127
> [!NOTE]
> Таблицы zapret, nozapret, ipban создаются скриптами из ipset по аналогии с
> Linux. Обновление скриптов можно забить в `cron` под root:
> Linux. Обновление скриптов можно забить в cron под root:
> ```sh
> $ crontab -e
> ```
@ -162,15 +159,15 @@ $ /opt/zapret/tpws/tpws --port=988 --user=daemon --bind-addr=::1 --bind-addr=127
> ```
> [!CAUTION]
> При использовании **ipfw** `tpws` не требует повышенных привилегий для
> реализации прозрачного режима. Однако, без рута невозможен бинд на порты
> <1024 и смена UID/GID. Без смены UID будет рекурсия, поэтому правила **ipfw**
> нужно создавать с учетом UID, под которым работает `tpws`. Переадресация на
> порты >=1024 может создать угрозу перехвата трафика непривилегированным
> При использовании ipfw `tpws` не требует повышенных привилегий для реализации
> прозрачного режима. Однако, без рута невозможен бинд на порты `< 1024` и
> смена UID/GID. Без смены UID будет рекурсия, поэтому правила ipfw нужно
> создавать с учетом UID, под которым работает `tpws`. Переадресация на порты
> `>= 1024` может создать угрозу перехвата трафика непривилегированным
> процессом, если вдруг `tpws` не запущен.
### Запуск `dvtws`
### Запуск dvtws
#### Весь трафик
```sh
@ -197,59 +194,58 @@ $ /opt/zapret/nfq/dvtws --port=989 --dpi-desync=split2
### PF в FreeBSD
Настройка аналогична **OpenBSD**, но есть важные нюансы.
1. В **FreeBSD** поддержка PF в `tpws` отключена по умолчанию. Чтобы ее
включить, нужно использовать параметр `--enable-pf`.
2. Нельзя сделать **ipv6** rdr на `::1`. Нужно делать на *link-local* адрес
входящего интерфейса. Смотрите через `ifconfig` адрес `fe80:...` и
добавляете в правило
3. Синтаксис `pf.conf` немного отличается. Более новая версия **PF**.
4. Лимит на количество элементов таблиц задается так:
```sh
$ sysctl net.pf.request_maxcount=2000000
```
5. *divert-to* сломан. Он работает, но не работает механизм предотвращения
зацикливаний. Кто-то уже написал патч, но в `14-RELEASE` проблема все еще
есть. Следовательно, на данный момент работа `dvtws` через **PF**
невозможна.
- В **FreeBSD** поддержка PF в `tpws` отключена по умолчанию. Чтобы ее
включить, нужно использовать параметр `--enable-pf`.
- Нельзя сделать ipv6 rdr на `::1`. Нужно делать на link-local адрес входящего
интерфейса. Смотрите через `ifconfig` адрес `fe80:...` и добавляете в правило.
- Синтаксис `pf.conf` немного отличается. Более новая версия PF.
- Лимит на количество элементов таблиц задается так:
```sh
$ sysctl net.pf.request_maxcount=2000000
```
- Сломан 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
rdr pass on em1 inet proto tcp to port {80,443} -> 127.0.0.1 port 988
```
`/etc/pf.conf`:
```
rdr pass on em1 inet6 proto tcp to port {80,443} -> fe80::31c:29ff:dee2:1c4d port 988
rdr pass on em1 inet proto tcp to port {80,443} -> 127.0.0.1 port 988
```
```sh
$ /opt/zapret/tpws/tpws --port=988 --enable-pf --bind-addr=127.0.0.1 --bind-iface6=em1 --bind-linklocal=force
```
```sh
$ /opt/zapret/tpws/tpws --port=988 --enable-pf --bind-addr=127.0.0.1 --bind-iface6=em1 --bind-linklocal=force
```
> В PF непонятно как делать rdr-to с той же системы, где работает proxy.
> Вариант с route-to у меня не заработал.
> В PF непонятно как делать rdr-to с той же системы, где работает proxy.
> Вариант с route-to у меня не заработал.
### pfsense
#### Что это
**pfsense** основан на **FreeBSD** и использует фаервол **PF**, имеющий
проблемы с *divert*. К счастью, модули **ipfw** и **ipdivert** присутствуют в
поставке последних версий **pfsense**. Их можно подгрузить через `kldload`.
pfsense основан на **FreeBSD** и использует фаервол PF, имеющий проблемы с
divert. К счастью, модули ipfw и ipdivert присутствуют в поставке последних
версий pfsense. Их можно подгрузить через `kldload`.
#### Особенности
В некоторых более старых версиях **pfsense** требуется изменить порядок
фаерволов через `sysctl`, сделав **ipfw** первым. В более новых эти параметры
`sysctl` отсутствуют, но система работает как надо и без них. В некоторых
случаях фаервол **PF** может ограничивать возможности `dvtws`, в частности в
области фрагментации ip.
В некоторых более старых версиях pfsense требуется изменить порядок фаерволов
через `sysctl`, сделав ipfw первым. В более новых эти параметры `sysctl`
отсутствуют, но система работает как надо и без них. В некоторых случаях
фаервол PF может ограничивать возможности `dvtws`, в частности в области
фрагментации ip.
#### Исполняемые файлы
Присутствуют по умолчанию правила scrub для реассемблинга фрагментов.
Бинарики из [`binaries/freebsd-x64`](../binaries/freebsd-x64) собраны под
**FreeBSD 11**. Они должны работать и на последующих версиях **FreeBSD**,
включая **pfsense**. Можно пользоваться `install_bin.sh`.
Присутствуют по умолчанию правила scrub для реассемблинга фрагментов. Бинарики
из [`binaries/freebsd-x64`](../binaries/freebsd-x64) собраны под **FreeBSD
11**. Они должны работать и на последующих версиях **FreeBSD**, включая
pfsense. Можно пользоваться `install_bin.sh`.
#### Автозапуск
Пример скрипта автозапуска лежит в [`init.d/pfsense`](../init.d/pfsense). Его
следует поместить в `/usr/local/etc/rc.d` и отредактировать на предмет правил
**ipfw** и запуска демонов. Есть встроенный редактор `edit` как более
приемлемая альтернатива `vi`.
ipfw и запуска демонов. Есть встроенный редактор `edit` как более приемлемая
альтернатива `vi`.
> [!NOTE]
> Поскольку `git` отсутствует, копировать файлы удобнее всего через `ssh`.
@ -265,12 +261,12 @@ $ /opt/zapret/nfq/dvtws --port=989 --dpi-desync=split2
> Если вас напрягает бедность имеющегося репозитория, можно включить
> репозиторий от **FreeBSD**, который по умолчанию выключен.
>
> Поменяйте *no* на *yes* в `/usr/local/etc/pkg/repos/FreeBSD.conf`
> Поменяйте `no` на `yes` в `/usr/local/etc/pkg/repos/FreeBSD.conf`
>
> Можно установить весь привычный софт, включая `git`, чтобы напрямую скачивать
> zapret с github.
- `/usr/local/etc/rc.d/zapret.sh` (chmod `755`):
`/usr/local/etc/rc.d/zapret.sh` (chmod `755`):
```sh
#!/bin/sh
@ -294,12 +290,12 @@ pfctl -d ; pfctl -e
#### Проблемы tpws
Что касается `tpws`, то видимо имеется некоторый конфликт двух фаерволов, и
правила fwd в **ipfw** не работают. Работает перенаправление средствами **PF**
как описано в разделе по **FreeBSD**. В **PF** можно изменять правила только
целыми блоками - якорями (anchors). Нельзя просто так добавить или удалить
что-то. Но чтобы какой-то anchor был обработан, на него должна быть ссылка из
основного набора правил. Его трогать нельзя, иначе порушится весь фаервол.
Поэтому придется править код скриптов pfsense.
правила fwd в ipfw не работают. Работает перенаправление средствами PF как
описано в разделе по **FreeBSD**. В PF можно изменять правила только целыми
блоками - якорями (anchors). Нельзя просто так добавить или удалить что-то. Но
чтобы какой-то anchor был обработан, на него должна быть ссылка из основного
набора правил. Его трогать нельзя, иначе порушится весь фаервол. Поэтому
придется править код скриптов pfsense.
1. Поправьте `/etc/inc/filter.inc` следующим образом:
```
@ -319,8 +315,8 @@ rdr pass on em1 inet proto tcp to port {80,443} -> 127.0.0.1 port 988
rdr pass on em1 inet6 proto tcp to port {80,443} -> fe80::20c:29ff:5ae3:4821 port 988
```
`fe80::20c:29ff:5ae3:4821` замените на ваш link local адрес **LAN** интерфейса,
либо уберите строчку, если **ipv6** не нужен.
`fe80::20c:29ff:5ae3:4821` замените на ваш link local адрес LAN интерфейса,
либо уберите строчку, если ipv6 не нужен.
3. Добавьте в автозапуск `/usr/local/etc/rc.d/zapret.sh`:
```sh
@ -349,14 +345,14 @@ rdr pass on em1 inet6 proto tcp from any to any port = https -> fe80::20c:29ff:5
```
> [!NOTE]
> Так же есть более элегантный способ запуска `tpws` через @reboot в `cron` и
> Так же есть более элегантный способ запуска `tpws` через @reboot в cron и
> правило перенаправления в UI. Это позволит не редактировать код pfsense.
## OpenBSD
### tpws бинд на ipv4
В `tpws` бинд по умолчанию только на **ipv6**. для бинда на **ipv4** указать
В `tpws` бинд по умолчанию только на ipv6. для бинда на ipv4 указать
`--bind-addr=0.0.0.0` Используйте `--bind-addr=0.0.0.0 --bind-addr=::` для
достижения того же результата, как в других ОС по умолчанию. Но лучше все же
так не делать, а сажать на определенные внутренние адреса или интерфейсы.
@ -364,7 +360,7 @@ rdr pass on em1 inet6 proto tcp from any to any port = https -> fe80::20c:29ff:5
### tpws для проходящего трафика
- `/etc/pf.conf`:
`/etc/pf.conf`:
```
pass in quick on em1 inet proto tcp to port {80,443} rdr-to 127.0.0.1 port 988
pass in quick on em1 inet6 proto tcp to port {80,443} rdr-to ::1 port 988
@ -376,7 +372,7 @@ $ tpws --port=988 --user=daemon --bind-addr=::1 --bind-addr=127.0.0.1
```
> [!NOTE]
> В **PF** непонятно как делать rdr-to с той же системы, где работает proxy.
> В PF непонятно как делать rdr-to с той же системы, где работает proxy.
> Вариант с route-to у меня не заработал. Поддержка rdr-to реализована через
> `/dev/pf`, поэтому прозрачный режим **требует root**.
@ -384,7 +380,7 @@ $ tpws --port=988 --user=daemon --bind-addr=::1 --bind-addr=127.0.0.1
### Запуск `dvtws`
#### Весь трафик
- `/etc/pf.conf`:
`/etc/pf.conf`:
```
pass in quick on em0 proto tcp from port {80,443} flags SA/SA divert-packet port 989 no state
pass in quick on em0 proto tcp from port {80,443} no state
@ -399,7 +395,7 @@ $ ./dvtws --port=989 --dpi-desync=split2
#### Трафик только на таблицу zapret
> За исключением таблицы nozapret
- `/etc/pf.conf`:
`/etc/pf.conf`:
```
set limit table-entries 2000000
table <zapret> file "/opt/zapret/ipset/zapret-ip.txt"
@ -438,7 +434,7 @@ $ ./dvtws --port=989 --dpi-desync=split2
### Особенность отправки fake пакетов
В **OpenBSD** `dvtws` все фейки отсылает через divert socket, поскольку эта
возможность через raw sockets заблокирована. Видимо **PF** автоматически
возможность через raw sockets заблокирована. Видимо PF автоматически
предотвращает повторный заворот diverted фреймов, поэтому проблемы зацикливания
нет.
@ -450,7 +446,7 @@ no state и in правилом позволяет обойти эту проб
### Перезагрузка PF таблиц
Скрипты из **ipset** не перезагружают таблицы в **PF** по умолчанию.
Скрипты из ipset не перезагружают таблицы в PF по умолчанию.
Чтобы они это делали, добавьте параметр в `/opt/zapret/config`:
```
@ -473,7 +469,7 @@ $ pfctl -Tl -f /etc/pf.conf
> ошибка перезагрузки фаервола.
> [!NOTE]
> После настройки обновление листов можно поместить в `cron`:
> После настройки обновление листов можно поместить в cron:
> ```sh
> $ crontab -e
> ```
@ -493,27 +489,26 @@ $ pfctl -Tl -f /etc/pf.conf
### dvtws бесполезен
Раньше был **ipfw**, потом его убрали, заменили на **PF**. Есть сомнения, что
*divert сокеты* в ядре остались. Попытка создать *divert socket* не выдает
ошибок, но полученный сокет ведет себя точно так же, как *raw*, со всеми его
унаследованными косяками + еще яблочно специфическими. В **PF** *divert-packet*
не работает. Простой grep бинарика `pfctl` показывает, что там нет слова
"divert", а в других версиях **BSD** оно есть. `dvtws` собирается, но
совершенно бесполезен.
Раньше был ipfw, потом его убрали, заменили на PF. Есть сомнения, что divert
сокеты в ядре остались. Попытка создать divert socket не выдает ошибок, но
полученный сокет ведет себя точно так же, как raw, со всеми его унаследованными
косяками + еще яблочно специфическими. В PF divert-packet не работает. Простой
grep бинарика `pfctl` показывает, что там нет слова "divert", а в других
версиях **BSD** оно есть. `dvtws` собирается, но совершенно бесполезен.
### tpws
`tpws` удалось адаптировать, он работоспособен. Получение адреса назначения для
прозрачного прокси в **PF** (`DIOCNATLOOK`) убрали из заголовков в новых SDK,
прозрачного прокси в PF (`DIOCNATLOOK`) убрали из заголовков в новых SDK,
сделав фактически недокументированным.
В `tpws` перенесены некоторые определения из более старых версий яблочных SDK.
С ними удалось завести прозрачный режим. Однако, что будет в следующих версиях
угадать сложно. Гарантий нет. Еще одной особенностью **PF** в **MacOS**
является проверка на рута в момент обращения к `/dev/pf`, чего нет в остальных
**BSD**. `tpws` по умолчанию сбрасывает рутовые привилегии. Необходимо явно
указать параметр `--user=root`. В остальном **PF** себя ведет похоже на
**FreeBSD**. Синтаксис `pf.conf` тот же.
угадать сложно. Гарантий нет. Еще одной особенностью PF в **MacOS** является
проверка на рута в момент обращения к `/dev/pf`, чего нет в остальных **BSD**.
`tpws` по умолчанию сбрасывает рутовые привилегии. Необходимо явно указать
параметр `--user=root`. В остальном PF себя ведет похоже на **FreeBSD**.
Синтаксис `pf.conf` тот же.
> [!IMPORTANT]
> На **MacOS** работает редирект как с проходящего трафика, так и с локальной
@ -522,7 +517,7 @@ $ pfctl -Tl -f /etc/pf.conf
> Отсюда имеем недостаток - **обход DPI для рута работать НЕ будет**.
#### Работа в прозрачном режиме только для исходящих запросов
- `/etc/pf.conf`:
`/etc/pf.conf`:
```
rdr pass on lo0 inet proto tcp from !127.0.0.0/8 to any port {80,443} -> 127.0.0.1 port 988
rdr pass on lo0 inet6 proto tcp from !::1 to any port {80,443} -> fe80::1 port 988
@ -544,7 +539,7 @@ $ ifconfig en1 | grep fe80
inet6 fe80::bbbb:bbbb:bbbb:bbbb%en1 prefixlen 64 scopeid 0x8
```
- `/etc/pf.conf`:
`/etc/pf.conf`:
```
rdr pass on en1 inet proto tcp from any to any port {80,443} -> 127.0.0.1 port 988
rdr pass on en1 inet6 proto tcp from any to any port {80,443} -> fe80::bbbb:bbbb:bbbb:bbbb port 988
@ -561,7 +556,7 @@ $ /opt/zapret/tpws/tpws --user=root --port=988 --bind-addr=127.0.0.1 --bind-ifac
### Проблема link-local адреса
Если вы пользуетесь **MaсOS** в качестве **ipv6** роутера, то нужно будет
Если вы пользуетесь **MaсOS** в качестве ipv6 роутера, то нужно будет
решить вопрос с регулярно изменяемым link-local адресом. С некоторых версий
**MacOS** использует по умолчанию постоянные "secured" ipv6 адреса вместо
генерируемых на базе MAC адреса.
@ -578,10 +573,10 @@ local. Скрывать link local не имеет смысла, а динами
Все равно для исходящих соединений будут использоваться temporary адреса, как и
в других системах. Или вам идея не по вкусу, можно прописать дополнительный
статический **ipv6** из диапазона маски `fc00::/7` - выберите любой с длиной
статический ipv6 из диапазона маски `fc00::/7` - выберите любой с длиной
префикса `128`. Это можно сделать в системных настройках, создав дополнительный
адаптер на базе того же сетевого интерфейса, отключить в нем **ipv4** и вписать
статический **ipv6**. Он добавится к автоматически настраеваемым.
адаптер на базе того же сетевого интерфейса, отключить в нем ipv4 и вписать
статический ipv6. Он добавится к автоматически настраеваемым.
### Сборка
@ -590,9 +585,10 @@ $ make -C /opt/zapret mac
```
> [!IMPORTANT]
> Скрипты получения листов ipset/*.sh работают. Если будете пользоваться
> `ipset/get_combined.sh`, нужно установить `GNU grep` через `brew`. Имеющийся
> очень старый и безумно медленный с оцией `-f`.
> Скрипты получения листов [`ipset/*.sh`](../ipset/) работают. Если будете
> пользоваться [`get_combined.sh`](../ipset/get_combined.sh), нужно установить
> GNU grep через `brew`. Имеющийся очень старый и безумно медленный с оцией
> `-f`.
### Простая установка
@ -606,7 +602,7 @@ $ make -C /opt/zapret mac
> [!WARNING]
> Internet sharing средствами системы **не поддерживается**!
>
> Поддерживается только роутер, настроенный своими силами через **PF**. Если вы
> Поддерживается только роутер, настроенный своими силами через PF. Если вы
> вдруг включили шаринг, а потом выключили, то доступ к сайтам может пропасть
> совсем.
>
@ -618,7 +614,7 @@ $ make -C /opt/zapret mac
> Если вам нужен шаринг интернета, лучше отказаться от прозрачного режима и
> использовать socks прокси.
Для автостарта используется **launchd** (`/Library/LaunchDaemons/zapret.plist`)
Для автостарта используется launchd (`/Library/LaunchDaemons/zapret.plist`)
Управляющий скрипт : `/opt/zapret/init.d/macos/zapret`
Следующие команды работают с `tpws` и фаерволом одновременно (если
@ -653,8 +649,8 @@ $ /opt/zapret/init.d/macos/zapret reload-fw-tables
> [`ipset/*.sh`](../ipset/) автоматически перезагружают IP таблицы в PF.
> [!NOTE]
> Автоматически создается cron job на `ipset/get_config.sh`, по аналогии с
> openwrt.
> Автоматически создается cron job на
> [`ipset/get_config.sh`](../ipset/get_config.sh), по аналогии с openwrt.
При start-fw скрипт автоматически модицифирует `/etc/pf.conf`, вставляя туда
anchors "zapret". Модификация расчитана на `pf.conf`, в котором сохранены
@ -695,9 +691,9 @@ anchor "zapret"
custom firewall отличается от linux варианта. Вместо заполнения `iptables` вам
нужно сгенерировать правила для `zapret-v4` и `zapret-v6` anchors и выдать их в
**stdout**. Это делается в функциях `zapret_custom_firewall_v4()` и
stdout. Это делается в функциях `zapret_custom_firewall_v4()` и
`zapret_custom_firewall_v6()`. Определения таблиц заполняются основным скриптом
- вам это делать не нужно. Можно ссылаться на таблицы zapret и zapret-user в
v4, zapret6 и zapret6-user.
- вам это делать не нужно. Можно ссылаться на таблицы `zapret` и `zapret-user`
в v4, `zapret6` и `zapret6-user`.
Cм. пример [в файле](../init.d/macos/custom.d.examples/50-extra-tpws)
Cм. пример [в файле](../init.d/macos/custom.d.examples/50-extra-tpws).

View File

@ -139,21 +139,21 @@
> направления (IP сервера). скрипт не всегда может выдать вам в итогах
> оптимальную стратегию, которую надо просто переписать в настройки. В
> некоторых случаях надо реально думать что происходит, анализируя результат
> на разных стратегиях. Если вы применяете большой **TTL**, чтобы достать до
> на разных стратегиях. Если вы применяете большой TTL, чтобы достать до
> магистрала, то не лишним будет добавить дополнительный ограничитель
> `--dpi-desync-fooling`, чтобы не сломать сайты на более коротких
> дистанциях. `md5sig` наиболее совместим, но работает **только** на linux
> серверах. `badseq` может работать только на **https** и не работать на
> **http**. Чтобы выяснить какие дополнительные ограничители работают,
> смотрите результат теста аналогичных стратегий без **TTL** с каждым из
> этих ограничителей.
> серверах. `badseq` может работать только на https и не работать на http.
> Чтобы выяснить какие дополнительные ограничители работают, смотрите
> результат теста аналогичных стратегий без TTL с каждым из этих
> ограничителей.
>
> При использовании `autottl` следует протестировать как можно больше разных
> доменов. Эта техника может на одних провайдерах работать стабильно, на
> других потребуется выяснить при каких параметрах она стабильна, на третьих
> полный хаос, и проще отказаться.
>
> Далее, имея понимание что работает на **http**, **https**, **quic**, нужно
> Далее, имея понимание что работает на http, https, quic нужно
> сконструировать параметры запуска `tpws` и/или `nfqws` с использованием
> мультистратегии. Как работают мультистратегии описано в readme.txt.
>
@ -223,15 +223,14 @@
> --filter-tcp=443 --wssize 1:6"
> ```
>
> В этом примере `wssize` будет применяться всегда к порту **tcp** `443` вне
> В этом примере `wssize` будет применяться всегда к порту tcp `443` вне
> зависимости от параметра `MODE_FILTER`. Хостлист будет игнорироваться,
> если таковой имеется. К **http** применять **wssize** вредно и
> бессмысленно.
> если таковой имеется. К http применять `wssize` вредно и бессмысленно.
>
> Никто не мешает использовать `tpws` для **http**, `nfqws` для **https**,
> либо комбинировать действие `nfqws` и `tpws` для одного протокола. В
> текущем варианте скриптов запуска это делается максимально гибко и
> независимо друг от друга.
> Никто не мешает использовать `tpws` для http, `nfqws` для https, либо
> комбинировать действие `nfqws` и `tpws` для одного протокола. В текущем
> варианте скриптов запуска это делается максимально гибко и независимо друг
> от друга.
7. Запустите скрипт облегченной установки - `install_easy.sh` Выберите `nfqws`
и/или `tpws`, затем согласитесь на редактирование параметров. Откроется
@ -252,5 +251,5 @@
подбирать такие стратегии, которые вызывают минимальные поломки. Есть стратегии
довольно безобидные, а есть сильно ломающие, которые подходят только для
точечного пробития отдельных ресурсов, когда ничего лучше нет. Хорошая
стратегия может большие проблемы из-за плохо подобранных ограничителей для
фейков (**ttl**, **fooling**).
стратегия может сильно ломать из-за плохо подобранных ограничителей для фейков
- ttl, fooling.