zapret/docs/manual_setup.md
2024-09-17 17:12:49 +03:00

421 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

- [Пример ручной установки на Debian-подобную систему](#пример-ручной-установки-на-debian-подобную-систему)
- [CentOS 7+, Fedora](#centos-7-fedora)
- [openSUSE](#opensuse)
- [Arch Linux](#arch-linux)
- [Gentoo](#gentoo)
- [Ручная установка на OpenWrt/LEDE 15.xx-21.xx](#ручная-установка-на-openwrtlede-15xx-21xx)
Пример ручной установки на Debian-подобную систему
--------------------------------------------------
На Debian основано большое количество дистрибутивов Linux, включая Ubuntu.
Здесь рассматриваются прежде всего Debian 8+ и Ubuntu 16+.
Но с большой вероятностью может сработать и на производных от них.
Главное условие - наличие `systemd`, `apt` и нескольких стандартных пакетов в репозитории.
Установить пакеты:
```sh
apt-get update
apt-get install ipset curl dnsutils git
```
Если хотите использовать `nftables`, то нужен пакет `nftables`, а `ipset` не обязателен.
Скопировать директорию `zapret` в `/opt` или скачать через `git`:
```sh
cd /opt
git clone --depth 1 https://github.com/bol-van/zapret
```
Запустить автоинсталлятор бинарников. Он сам определит рабочую архитектуру и настроит все бинарники.
```sh
/opt/zapret/install_bin.sh
```
**АЛЬТЕРНАТИВА:** `make -C /opt/zapret`. Получите динамические бинарники под вашу ось.
Для сборки требуются dev пакеты: `zlib1g-dev`, `libcap-dev`, `libnetfilter-queue-dev`.
Создать конфиг по умолчанию:
```sh
cp /opt/zapret/config.default /opt/zapret/config
```
Настроить параметры согласно разделу "Выбор параметров".
Создать user листы по умолчанию:
```sh
cp /opt/zapret/ipset/zapret-hosts-user-exclude.txt.default /opt/zapret/ipset/zapret-hosts-user-exclude.txt
echo nonexistent.domain > /opt/zapret/ipset/zapret-hosts-user.txt
touch /opt/zapret/ipset/zapret-hosts-user-ipban.txt
```
Создать ссылку на service unit в `systemd`:
```sh
ln -fs /opt/zapret/init.d/systemd/zapret.service /lib/systemd/system
```
Удалить старые листы, если они были созданы ранее:
```sh
/opt/zapret/ipset/clear_lists.sh
```
По желанию прописать в `/opt/zapret/ipset/zapret-hosts-user.txt` свои домены.
Выполнить скрипт обновления листа:
```sh
/opt/zapret/ipset/get_config.sh
```
Настроить таймер `systemd` для обновления листа:
```sh
ln -fs /opt/zapret/init.d/systemd/zapret-list-update.service /lib/systemd/system
ln -fs /opt/zapret/init.d/systemd/zapret-list-update.timer /lib/systemd/system
```
Принять изменения в `systemd`: `systemctl daemon-reload`
Включить автозапуск службы: `systemctl enable zapret`
Включить таймер обновления листа: `systemctl enable zapret-list-update.timer`
Запустить службу: `systemctl start zapret`
Шпаргалка по управлению службой и таймером :
- enable auto start: `systemctl enable zapret`
- disable auto start: `systemctl disable zapret`
- start: `systemctl start zapret`
- stop: `systemctl stop zapret`
- status, output messages: `systemctl status zapret`
- timer info: `systemctl list-timer`
- delete service: `systemctl disable zapret; rm /lib/systemd/system/zapret.service`
- delete timer: `systemctl disable zapret-list-update.timer; rm /lib/systemd/system/zapret-list-update.*`
CentOS 7+, Fedora
-----------------
CentOS с 7 версии и более-менее новые федоры построены на `systemd`.
В качестве пакетного менеджера используется `yum`.
Установить пакеты:
```sh
yum install -y curl ipset dnsutils git
```
Далее все аналогично Debian.
openSUSE
--------
Новые openSUSE основаны на `systemd` и менеджере пакетов `zypper`.
Установить пакеты:
```sh
zypper --non-interactive install curl ipset
```
Далее все аналогично Debian, кроме расположения `systemd`.
В openSUSE он находится не в `/lib/systemd`, а в `/usr/lib/systemd`.
Правильные команды будут:
```sh
ln -fs /opt/zapret/init.d/systemd/zapret.service /usr/lib/systemd/system
ln -fs /opt/zapret/init.d/systemd/zapret-list-update.service /usr/lib/systemd/system
ln -fs /opt/zapret/init.d/systemd/zapret-list-update.timer /usr/lib/systemd/system
```
Arch Linux
----------
Построен на базе `systemd`.
Установить пакеты:
```sh
pacman -Syy
pacman --noconfirm -S ipset curl
```
Далее все аналогично Debian.
Gentoo
------
Эта система использует OpenRC - улучшенную версию sysvinit.
Установка пакетов производится командой: `emerge <package_name>`
Пакеты собираются из исходников.
Требуются все те же `ipset`, `curl`, `git` для скачивания с GitHub.
`git` и `curl` по умолчанию могут присутствовать, `ipset` отсутствует.
```sh
emerge ipset
```
Настроить параметры согласно разделу "Выбор параметров".
Запустить автоинсталлятор бинарников. Он сам определит рабочую архитектуру и настроит все бинарники:
```sh
/opt/zapret/install_bin.sh
```
**АЛЬТЕРНАТИВА:** `make -C /opt/zapret`. Получите динамические бинарники под вашу ось.
Удалить старые листы, если они были созданы ранее:
```sh
/opt/zapret/ipset/clear_lists.sh
```
По желанию прописать в `/opt/zapret/ipset/zapret-hosts-user.txt` свои домены.
Выполнить скрипт обновления листа:
```sh
/opt/zapret/ipset/get_config.sh
```
Зашедулить обновление листа:
```sh
crontab -e
```
Создать для крона строчку `0 12 */2* * /opt/zapret/ipset/get_config.sh`
Подключить init скрипт:
```sh
ln -fs /opt/zapret/init.d/openrc/zapret /etc/init.d
rc-update add zapret
```
Запустить службу:
```sh
rc-service zapret start
```
Шпаргалка по управлению службой:
- enable auto start: `rc-update add zapret`
- disable auto start: `rc-update del zapret`
- start: `rc-service zapret start`
- stop: `rc-service zapret stop`
Ручная установка на OpenWrt/LEDE 15.xx-21.xx
--------------------------------------------
**ВАЖНО:** Данная инструкция написана для систем, основанных на `iptables`+`firewall3`.
В новых версиях OpenWrt переходит на `nftables`+`firewall4`, инструкция неприменима. Пользуйтесь `install_easy.sh`
Установить дополнительные пакеты:
```sh
opkg update
opkg install iptables-mod-extra iptables-mod-nfqueue iptables-mod-filter iptables-mod-ipopt iptables-mod-conntrack-extra ipset curl
# (IPv6) opkg install ip6tables-mod-nat
# (опционально) opkg install gzip
# (опционально) opkg install coreutils-sort
```
**ЭКОНОМИЯ МЕСТА:**
`gzip` от `busybox` в разы медленней полноценного варианта. `gzip` используется скриптами получения листов.
`sort` от `busybox` медленней полноценного варианта и жрет намного больше памяти. `sort` используется скриптами получения листов.
`iptables-mod-nfqueue` можно выкинуть, если не будем пользоваться `nfqws`.
`curl` можно выкинуть, если для получения IP листа будет использоваться только `get_user.sh`
Самая главная трудность - скомпилировать программы на C. Это можно сделать на Linux x64 при помощи SDK, который можно скачать с официального сайта OpenWrt или LEDE. Но процесс кросс-компиляции - это всегда сложности.
Недостаточно запустить `make` как на традиционной Linux системе.
Поэтому в `binaries/` имеются готовые статические бинарники для всех самых распространенных архитектур.
Статическая сборка означает, что бинарник не зависит от типа `libc` (`glibc`, `uclibc` или `musl`) и наличия установленных `*.so`.
Его можно использовать сразу. Лишь бы подходил тип CPU. У ARM и MIPS есть несколько версий.
Скорее всего найдется рабочий вариант. Если нет - вам придется собирать самостоятельно.
Для всех поддерживаемых архитектур бинарники запакованы `upx`. На текущий момент все, кроме `mips64`.
Скопировать директорию `zapret` в `/opt` на роутер.
Если места достаточно, самый простой способ:
```sh
opkg update
opkg install git-http
mkdir /opt
cd /opt
git clone --depth 1 https://github.com/bol-van/zapret
```
Если места немного:
```sh
opkg update
opkg install openssh-sftp-server unzip
ifconfig br-lan
```
Скачать на комп с GitHub zip архив кнопкой "Clone or download" -> Download ZIP
Скопировать средствами `sftp` zip архив на роутер в `/tmp`.
```sh
mkdir /opt
cd /opt
unzip /tmp/zapret-master.zip
mv zapret-master zapret
rm /tmp/zapret-master.zip
```
Если места совсем мало:
На Linux системе скачать и распаковать zapret. Оставить необходимый минимум файлов.
Запаковать в архив `zapret.tar.gz`.
```sh
nc -l -p 1111 < zapret.tar.gz
```
На роутере:
```sh
cd /tmp
nc <linux_system_ip> 1111 >zapret.tar.gz
```
Не стоит работать с распакованной версией `zapret` на Windows. Потеряются ссылки и `chmod`.
Запустить автоинсталлятор бинарников. Он сам определит рабочую архитектуру и настроит все бинарники:
```sh
/opt/zapret/install_bin.sh
```
Создать ссылку на скрипт запуска:
```sh
ln -fs /opt/zapret/init.d/openwrt/zapret /etc/init.d
```
Создать ссылку на скрипт события поднятия интерфейса:
```sh
ln -fs /opt/zapret/init.d/openwrt/90-zapret /etc/hotplug.d/iface
```
Создать конфиг по умолчанию:
```sh
cp /opt/zapret/config.default /opt/zapret/config
```
Настроить параметры согласно разделу "Выбор параметров".
Создать user листы по умолчанию:
```sh
cp /opt/zapret/ipset/zapret-hosts-user-exclude.txt.default /opt/zapret/ipset/zapret-hosts-user-exclude.txt
echo nonexistent.domain > /opt/zapret/ipset/zapret-hosts-user.txt
touch /opt/zapret/ipset/zapret-hosts-user-ipban.txt
```
Удалить старые листы, если они были созданы ранее:
```sh
/opt/zapret/ipset/clear_lists.sh
```
По желанию прописать в `/opt/zapret/ipset/zapret-hosts-user.txt` свои домены.
Выполнить скрипт обновления листа:
```sh
/opt/zapret/ipset/get_config.sh
```
Зашедулить обновление листа:
```sh
crontab -e
```
Создать для крона строчку `0 12 */2* * /opt/zapret/ipset/get_config.sh`
Включить автозапуск службы и запустить ее:
```sh
/etc/init.d/zapret enable
/etc/init.d/zapret start
```
**ПРИМЕЧАНИЕ:** на этапе старта системы интерфейсы еще не подняты.
В некоторых случаях невозможно правильно сформировать параметры запуска демонов, не зная имя физического интерфейса LAN.
Скрипт из /etc/hotplug.d/iface перезапустит демоны по событию поднятия LAN.
Создать ссылку на firewall include:
```sh
ln -fs /opt/zapret/init.d/openwrt/firewall.zapret /etc/firewall.zapret
```
Проверить была ли создана ранее запись о firewall include:
```sh
uci show firewall | grep firewall.zapret
```
Если `firewall.zapret` нет, значит добавить:
```sh
uci add firewall include
uci set firewall.@include[-1].path="/etc/firewall.zapret"
uci set firewall.@include[-1].reload="1"
uci commit firewall
```
Проверить, не включен ли flow offload:
```sh
uci show firewall.@defaults[0]
```
Если `flow_offloading=1` или `flow_offloading_hw=1`:
```sh
uci set firewall.@defaults[0].flow_offloading=0
uci set firewall.@defaults[0].flow_offloading_hw=0
uci commit firewall
```
Перезапустить фаервол:
```sh
fw3 restart
```
Посмотреть через `iptables -nL`, `ip6tables -nL` или через `luci` вкладку "firewall", появились ли нужные правила.
**ЭКОНОМИЯ МЕСТА:** если его мало, то можно оставить в директории `zapret` лишь подкаталоги `ipset/`, `common/`, файл `config/`, `init.d/openwrt/`.
Далее нужно создать подкаталоги с реально используемыми бинарниками (`ip2net`, `mdig`, `tpws`, `nfq`) и скопировать туда из `binaries/` рабочие executables.
**ЕСЛИ ВСЕ ПЛОХО С МЕСТОМ:** откажитесь от работы со списком РКН. используйте только `get_user.sh`.
**ЕСЛИ СОВСЕМ ВСЕ УЖАСНО С МЕСТОМ:** берете `tpws` и делаете все своими руками. поднятие `iptables`, автостарт бинарника.
С некоторых версий скрипты запуска zapret без `ipset` не работают (он требуется для IP exclude).
**СОВЕТ:** Покупайте только роутеры с USB.
В USB можно воткнуть флэшку и вынести на нее корневую файловую систему или использовать ее в качестве оверлея.
Не надо мучить себя, запихивая незапихиваемое в 8 мб встроенной флэшки.
Для комфортной работы с zapret нужен роутер с 16 Mb встроенной памяти или USB разъемом и 128+ Mb RAM.
На 64 Mb без swap будут проблемы с листами РКН. Если у вас только 64 Mb, и вы хотите листы РКН, подключите swap.
32 Mb для современных версий OpenWrt - конфигурация на грани живучести. Возможны хаотические падения процессов в oom.
Работа с листами РКН невозможна в принципе.