From e1e55b16538b579454c54ce791d507e2b4b21d4f Mon Sep 17 00:00:00 2001 From: maximilionus Date: Thu, 7 Nov 2024 19:04:23 +0300 Subject: [PATCH] docs: Fix quick_start, bsd formatting cleanup --- docs/bsd.md | 258 ++++++++++++++++++++++---------------------- docs/quick_start.md | 29 +++-- 2 files changed, 141 insertions(+), 146 deletions(-) diff --git a/docs/bsd.md b/docs/bsd.md index 927e5bf..1f7414b 100644 --- a/docs/bsd.md +++ b/docs/bsd.md @@ -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 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). diff --git a/docs/quick_start.md b/docs/quick_start.md index cc4a2e9..5eef9ef 100644 --- a/docs/quick_start.md +++ b/docs/quick_start.md @@ -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.