mirror of
https://github.com/bol-van/zapret.git
synced 2024-11-26 12:10:53 +03:00
Compare commits
13 Commits
337a291086
...
9e641f1ca1
Author | SHA1 | Date | |
---|---|---|---|
|
9e641f1ca1 | ||
|
6695245357 | ||
|
ca39017d10 | ||
|
7129923a70 | ||
|
9f1687ffec | ||
|
abe507c9c3 | ||
|
fa1430b604 | ||
|
a5e6b20e71 | ||
|
b79d8becd3 | ||
|
6250a26127 | ||
|
db0caf7d58 | ||
|
34c6c5e9ba | ||
|
868d115c5d |
379
.github/workflows/build.yml
vendored
Normal file
379
.github/workflows/build.yml
vendored
Normal file
@ -0,0 +1,379 @@
|
|||||||
|
name: build
|
||||||
|
run-name: ${{ startsWith(github.ref, 'refs/tags/v') && format('Release {0}', github.ref_name) || null }}
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- v[0-9]+*
|
||||||
|
# branches:
|
||||||
|
# - master
|
||||||
|
# paths:
|
||||||
|
# - 'ip2net/**'
|
||||||
|
# - 'mdig/**'
|
||||||
|
# - 'nfq/**'
|
||||||
|
# - 'tpws/**'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-linux:
|
||||||
|
name: Linux ${{ matrix.arch }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- arch: arm64
|
||||||
|
tool: aarch64-unknown-linux-musl
|
||||||
|
- arch: arm
|
||||||
|
tool: arm-unknown-linux-musleabi
|
||||||
|
# - arch: armhf
|
||||||
|
# tool: arm-unknown-linux-musleabihf
|
||||||
|
# - arch: armv7
|
||||||
|
# tool: armv7-unknown-linux-musleabi
|
||||||
|
# - arch: armv7hf
|
||||||
|
# tool: armv7-unknown-linux-musleabihf
|
||||||
|
# - arch: mips64el
|
||||||
|
# tool: mips64el-unknown-linux-musl
|
||||||
|
- arch: mips64
|
||||||
|
tool: mips64-unknown-linux-musl
|
||||||
|
# - arch: mipsel
|
||||||
|
# tool: mipsel-unknown-linux-musl
|
||||||
|
- arch: mipselsf
|
||||||
|
tool: mipsel-unknown-linux-muslsf
|
||||||
|
# - arch: mips
|
||||||
|
# tool: mips-unknown-linux-musl
|
||||||
|
- arch: mipssf
|
||||||
|
tool: mips-unknown-linux-muslsf
|
||||||
|
# - arch: ppc64
|
||||||
|
# tool: powerpc64-unknown-linux-musl
|
||||||
|
- arch: ppc
|
||||||
|
tool: powerpc-unknown-linux-musl
|
||||||
|
- arch: x86
|
||||||
|
tool: i586-unknown-linux-musl
|
||||||
|
- arch: x86_64
|
||||||
|
tool: x86_64-unknown-linux-musl
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
path: zapret
|
||||||
|
|
||||||
|
- name: Set up build tools
|
||||||
|
env:
|
||||||
|
REPO: 'spvkgn/musl-cross'
|
||||||
|
TOOL: ${{ matrix.tool }}
|
||||||
|
run: |
|
||||||
|
sudo apt update -qq && sudo apt install -y libcap-dev
|
||||||
|
mkdir -p $HOME/tools
|
||||||
|
wget -qO- https://github.com/$REPO/releases/download/latest/$TOOL.tar.xz | tar -C $HOME/tools -xJ || exit 1
|
||||||
|
[ -d "$HOME/tools/$TOOL/bin" ] && echo "$HOME/tools/$TOOL/bin" >> $GITHUB_PATH
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
env:
|
||||||
|
ARCH: ${{ matrix.arch }}
|
||||||
|
TARGET: ${{ matrix.tool }}
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
run: |
|
||||||
|
DEPS_DIR=$GITHUB_WORKSPACE/deps
|
||||||
|
export CC="$TARGET-gcc"
|
||||||
|
export LD=$TARGET-ld
|
||||||
|
export AR=$TARGET-ar
|
||||||
|
export NM=$TARGET-nm
|
||||||
|
export STRIP=$TARGET-strip
|
||||||
|
export PKG_CONFIG_PATH=$DEPS_DIR/lib/pkgconfig
|
||||||
|
|
||||||
|
# optimize for size
|
||||||
|
export CFLAGS="-Os -flto=auto"
|
||||||
|
export LDFLAGS="-Os"
|
||||||
|
|
||||||
|
# netfilter libs
|
||||||
|
git clone --depth 1 -b libmnl-1.0.5 git://git.netfilter.org/libmnl
|
||||||
|
git clone --depth 1 -b libnfnetlink-1.0.2 git://git.netfilter.org/libnfnetlink
|
||||||
|
git clone --depth 1 -b libnetfilter_queue-1.0.5 git://git.netfilter.org/libnetfilter_queue
|
||||||
|
|
||||||
|
for i in libmnl libnfnetlink libnetfilter_queue ; do
|
||||||
|
(
|
||||||
|
cd $i
|
||||||
|
./autogen.sh && \
|
||||||
|
./configure --prefix= --host=$TARGET --enable-static --disable-shared && \
|
||||||
|
make install -j$(nproc) DESTDIR=$DEPS_DIR
|
||||||
|
)
|
||||||
|
sed -i "s|^prefix=.*|prefix=$DEPS_DIR|g" $DEPS_DIR/lib/pkgconfig/$i.pc
|
||||||
|
done
|
||||||
|
|
||||||
|
# zlib
|
||||||
|
gh api repos/madler/zlib/releases/latest --jq '.tag_name' |\
|
||||||
|
xargs -I{} wget -qO- https://github.com/madler/zlib/archive/refs/tags/{}.tar.gz | tar -xz
|
||||||
|
(
|
||||||
|
cd zlib-*
|
||||||
|
./configure --prefix= --static && \
|
||||||
|
make install -j$(nproc) DESTDIR=$DEPS_DIR
|
||||||
|
)
|
||||||
|
|
||||||
|
# headers
|
||||||
|
# wget https://git.alpinelinux.org/aports/plain/main/bsd-compat-headers/queue.h && \
|
||||||
|
# wget https://git.kernel.org/pub/scm/libs/libcap/libcap.git/plain/libcap/include/sys/capability.h && \
|
||||||
|
install -Dm644 -t $DEPS_DIR/include/sys /usr/include/x86_64-linux-gnu/sys/queue.h /usr/include/sys/capability.h
|
||||||
|
|
||||||
|
# zapret
|
||||||
|
CFLAGS="$CFLAGS -static-libgcc -static -I$DEPS_DIR/include" \
|
||||||
|
LDFLAGS="$LDFLAGS -L$DEPS_DIR/lib" \
|
||||||
|
make -C zapret -j$(nproc)
|
||||||
|
tar -C zapret/binaries/my -cJf zapret-linux-$ARCH.tar.xz .
|
||||||
|
|
||||||
|
- name: Upload artifacts
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: zapret-linux-${{ matrix.arch }}
|
||||||
|
path: zapret-*.tar.xz
|
||||||
|
if-no-files-found: error
|
||||||
|
|
||||||
|
build-macos:
|
||||||
|
name: macOS
|
||||||
|
runs-on: macos-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Build zapret
|
||||||
|
run: |
|
||||||
|
make mac -j$(sysctl -n hw.logicalcpu)
|
||||||
|
tar -C binaries/my -cJf zapret-mac-x64.tar.xz .
|
||||||
|
|
||||||
|
- name: Upload artifacts
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: zapret-mac-x64
|
||||||
|
path: zapret-*.tar.xz
|
||||||
|
if-no-files-found: error
|
||||||
|
|
||||||
|
build-freebsd:
|
||||||
|
name: FreeBSD ${{ matrix.arch }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- target: x86_64
|
||||||
|
arch: x86_64
|
||||||
|
# - target: i386
|
||||||
|
# arch: x86
|
||||||
|
container:
|
||||||
|
image: empterdose/freebsd-cross-build:11.4
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install packages
|
||||||
|
run: apk add tar xz
|
||||||
|
|
||||||
|
- name: Build zapret
|
||||||
|
env:
|
||||||
|
TARGET: ${{ matrix.target }}
|
||||||
|
ARCH: ${{ matrix.arch }}
|
||||||
|
run: |
|
||||||
|
settarget $TARGET-freebsd11 make bsd -j$(nproc) || exit 1
|
||||||
|
tar -C binaries/my -cJf zapret-freebsd-$ARCH.tar.xz .
|
||||||
|
|
||||||
|
- name: Upload artifacts
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: zapret-freebsd-${{ matrix.arch }}
|
||||||
|
path: zapret-*.tar.xz
|
||||||
|
if-no-files-found: error
|
||||||
|
|
||||||
|
build-windows:
|
||||||
|
name: Windows ${{ matrix.arch }}
|
||||||
|
runs-on: windows-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
arch: [ x86_64, x86 ]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
path: zapret
|
||||||
|
|
||||||
|
- name: Set up MinGW
|
||||||
|
uses: msys2/setup-msys2@v2
|
||||||
|
with:
|
||||||
|
msystem: ${{ matrix.arch == 'x86_64' && 'MINGW64' || 'MINGW32' }}
|
||||||
|
install: >-
|
||||||
|
${{ matrix.arch == 'x86_64' && 'mingw-w64-x86_64-toolchain' || 'mingw-w64-i686-toolchain' }}
|
||||||
|
|
||||||
|
- name: Build ip2net, mdig
|
||||||
|
shell: msys2 {0}
|
||||||
|
run: |
|
||||||
|
mkdir -p output
|
||||||
|
cd zapret
|
||||||
|
mingw32-make -C ip2net win
|
||||||
|
mingw32-make -C mdig win
|
||||||
|
cp -a {ip2net/ip2net,mdig/mdig}.exe ../output
|
||||||
|
|
||||||
|
- name: Restore psmisc from cache
|
||||||
|
id: cache-restore-psmisc
|
||||||
|
uses: actions/cache/restore@v4
|
||||||
|
with:
|
||||||
|
path: ${{ github.workspace }}/psmisc
|
||||||
|
key: psmisc-${{ matrix.arch }}
|
||||||
|
|
||||||
|
- name: Set up Cygwin
|
||||||
|
env:
|
||||||
|
PACKAGES: ${{ steps.cache-restore-psmisc.outputs.cache-hit != 'true' && 'cygport gettext-devel libiconv-devel libncurses-devel' || null }}
|
||||||
|
uses: cygwin/cygwin-install-action@v4
|
||||||
|
with:
|
||||||
|
platform: ${{ matrix.arch }}
|
||||||
|
site: ${{ matrix.arch == 'x86_64' && 'http://ctm.crouchingtigerhiddenfruitbat.org/pub/cygwin/circa/64bit/2024/01/30/231215' || null }}
|
||||||
|
check-sig: ${{ matrix.arch == 'x86_64' && 'false' || null }}
|
||||||
|
packages: >-
|
||||||
|
gcc-core
|
||||||
|
make
|
||||||
|
zlib-devel
|
||||||
|
zip
|
||||||
|
unzip
|
||||||
|
wget
|
||||||
|
${{ env.PACKAGES }}
|
||||||
|
|
||||||
|
- name: Build psmisc
|
||||||
|
if: steps.cache-restore-psmisc.outputs.cache-hit != 'true'
|
||||||
|
env:
|
||||||
|
URL: https://mirrors.kernel.org/sourceware/cygwin/x86_64/release/psmisc
|
||||||
|
shell: C:\cygwin\bin\bash.exe -eo pipefail '{0}'
|
||||||
|
run: >-
|
||||||
|
export MAKEFLAGS=-j$(nproc) &&
|
||||||
|
mkdir -p psmisc && cd psmisc &&
|
||||||
|
wget -qO- ${URL} | grep -Po 'href=\"\Kpsmisc-(\d+\.)+\d+.+src\.tar\.xz(?=\")' | xargs -I{} wget -O- ${URL}/{} | tar -xJ &&
|
||||||
|
cd psmisc-*.src &&
|
||||||
|
echo CYGCONF_ARGS+=\" --disable-dependency-tracking --disable-nls\" >> psmisc.cygport &&
|
||||||
|
cygport psmisc.cygport prep compile install
|
||||||
|
|
||||||
|
- name: Save psmisc to cache
|
||||||
|
if: steps.cache-restore-psmisc.outputs.cache-hit != 'true'
|
||||||
|
uses: actions/cache/save@v4
|
||||||
|
with:
|
||||||
|
path: ${{ github.workspace }}/psmisc
|
||||||
|
key: psmisc-${{ matrix.arch }}
|
||||||
|
|
||||||
|
- name: Build winws
|
||||||
|
env:
|
||||||
|
TARGET: ${{ matrix.arch == 'x86_64' && 'cygwin' || 'cygwin32' }}
|
||||||
|
shell: C:\cygwin\bin\bash.exe -eo pipefail '{0}'
|
||||||
|
run: >-
|
||||||
|
export MAKEFLAGS=-j$(nproc) &&
|
||||||
|
cd zapret &&
|
||||||
|
make -C nfq ${TARGET} &&
|
||||||
|
cp -a nfq/winws.exe ../output
|
||||||
|
|
||||||
|
- name: Create zip
|
||||||
|
env:
|
||||||
|
BITS: ${{ matrix.arch == 'x86_64' && '64' || '32' }}
|
||||||
|
DIR: ${{ matrix.arch == 'x86_64' && 'x64' || 'x86' }}
|
||||||
|
shell: C:\cygwin\bin\bash.exe -e '{0}'
|
||||||
|
run: >-
|
||||||
|
cp -a -t output psmisc/psmisc-*.src/psmisc-*/inst/usr/bin/killall.exe /usr/bin/cygwin1.dll &&
|
||||||
|
wget -O WinDivert.zip https://github.com/basil00/WinDivert/releases/download/v2.2.2/WinDivert-2.2.2-A.zip &&
|
||||||
|
unzip -j WinDivert.zip "*/${DIR}/WinDivert.dll" "*/${DIR}/WinDivert${BITS}.sys" -d output &&
|
||||||
|
zip zapret-win-${{ matrix.arch }}.zip -j output/*
|
||||||
|
|
||||||
|
- name: Upload artifacts
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: zapret-win-${{ matrix.arch }}
|
||||||
|
path: zapret-*.zip
|
||||||
|
if-no-files-found: error
|
||||||
|
|
||||||
|
release:
|
||||||
|
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
|
||||||
|
needs: [ build-linux, build-windows, build-macos, build-freebsd ]
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
repo_dir: zapret-${{ github.ref_name }}
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
path: ${{ env.repo_dir }}
|
||||||
|
|
||||||
|
- name: Download artifacts
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
id: bins
|
||||||
|
with:
|
||||||
|
path: ${{ env.repo_dir }}/binaries
|
||||||
|
pattern: zapret-*
|
||||||
|
|
||||||
|
- name: Install upx
|
||||||
|
uses: crazy-max/ghaction-upx@v3
|
||||||
|
with:
|
||||||
|
install-only: true
|
||||||
|
|
||||||
|
- name: Prepare binaries
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
cd ${{ steps.bins.outputs.download-path }}
|
||||||
|
run_upx() {
|
||||||
|
upx --best --lzma $@ || true
|
||||||
|
}
|
||||||
|
run_dir() {
|
||||||
|
for f in $dir/* ; do
|
||||||
|
# extract binaries
|
||||||
|
case $f in
|
||||||
|
*.tar.xz )
|
||||||
|
tar -C $dir -xvf $f && rm $f
|
||||||
|
if [[ $dir == *-linux-x86_64 ]]; then
|
||||||
|
tar -C $dir -czvf $dir/tpws_wsl.tgz tpws
|
||||||
|
run_upx $dir/*
|
||||||
|
elif [[ $dir =~ linux ]] && [[ $dir != *-linux-mips64 ]]; then
|
||||||
|
run_upx $dir/*
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*.zip )
|
||||||
|
unzip $f -d $dir && rm $f
|
||||||
|
if [[ $dir =~ win ]]; then
|
||||||
|
chmod -x $dir/*
|
||||||
|
run_upx --force $dir/cygwin1.dll
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
mv $dir $1
|
||||||
|
}
|
||||||
|
for dir in * ; do
|
||||||
|
if [ -d $dir ]; then
|
||||||
|
echo "Processing $dir"
|
||||||
|
case $dir in
|
||||||
|
*-freebsd-x86_64 ) run_dir freebsd-x64 ;;
|
||||||
|
*-linux-arm ) run_dir arm ;;
|
||||||
|
*-linux-arm64 ) run_dir aarch64 ;;
|
||||||
|
*-linux-mips64 ) run_dir mips64r2-msb ;;
|
||||||
|
*-linux-mipselsf ) run_dir mips32r1-lsb ;;
|
||||||
|
*-linux-mipssf ) run_dir mips32r1-msb ;;
|
||||||
|
*-linux-ppc ) run_dir ppc ;;
|
||||||
|
*-linux-x86 ) run_dir x86 ;;
|
||||||
|
*-linux-x86_64 ) run_dir x86_64 ;;
|
||||||
|
*-mac-x64 ) run_dir mac64 ;;
|
||||||
|
*-win-x86 ) run_dir win32 ;;
|
||||||
|
*-win-x86_64 ) run_dir win64 ;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
ls -lhR
|
||||||
|
|
||||||
|
- name: Create release bundles
|
||||||
|
run: |
|
||||||
|
rm -rf ${{ env.repo_dir }}/.git*
|
||||||
|
tar -czf ${{ env.repo_dir }}.tar.gz ${{ env.repo_dir }}
|
||||||
|
zip -qr ${{ env.repo_dir }}.zip ${{ env.repo_dir }}
|
||||||
|
|
||||||
|
- name: Upload release assets
|
||||||
|
uses: softprops/action-gh-release@v2
|
||||||
|
with:
|
||||||
|
fail_on_unmatched_files: true
|
||||||
|
prerelease: false
|
||||||
|
draft: false
|
||||||
|
body: |
|
||||||
|
### zapret ${{ github.ref_name }}
|
||||||
|
files: |
|
||||||
|
zapret*.tar.gz
|
||||||
|
zapret*.zip
|
@ -682,6 +682,20 @@ check_prerequisites_linux()
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
removable_pkgs_openwrt()
|
||||||
|
{
|
||||||
|
PKGS="iptables-mod-extra iptables-mod-nfqueue iptables-mod-filter iptables-mod-ipopt iptables-mod-conntrack-extra ip6tables-mod-nat ip6tables-extra kmod-nft-queue gzip coreutils-sort coreutils-sleep curl"
|
||||||
|
}
|
||||||
|
|
||||||
|
remove_extra_pkgs_openwrt()
|
||||||
|
{
|
||||||
|
local PKGS
|
||||||
|
echo \* remove dependencies
|
||||||
|
removable_pkgs_openwrt
|
||||||
|
echo these packages may have been installed by install_easy.sh : $PKGS
|
||||||
|
ask_yes_no N "do you want to remove them" && opkg remove --autoremove $PKGS
|
||||||
|
}
|
||||||
|
|
||||||
check_prerequisites_openwrt()
|
check_prerequisites_openwrt()
|
||||||
{
|
{
|
||||||
echo \* checking prerequisites
|
echo \* checking prerequisites
|
||||||
|
75
docs/bsd.md
75
docs/bsd.md
@ -1,5 +1,38 @@
|
|||||||
# Настройка BSD-подобных систем
|
# Настройка BSD-подобных систем
|
||||||
|
|
||||||
|
* [Поддерживаемые версии](#поддерживаемые-версии)
|
||||||
|
* [Особенности BSD систем](#особенности-bsd-систем)
|
||||||
|
* [Отсутствие nfqueue](#отсутствие-nfqueue)
|
||||||
|
* [Типы Firewall](#типы-firewall)
|
||||||
|
* [Сборка](#сборка)
|
||||||
|
* [Divert сокеты](#divert-сокеты)
|
||||||
|
* [Lookup Tables](#lookup-tables)
|
||||||
|
* [Загрузка ip таблиц из файла](#загрузка-ip-таблиц-из-файла)
|
||||||
|
* [Отсутствие splice](#отсутствие-splice)
|
||||||
|
* [mdig и ip2net](#mdig-и-ip2net)
|
||||||
|
* [FreeBSD](#freebsd)
|
||||||
|
* [Подгрузка ipdivert](#подгрузка-ipdivert)
|
||||||
|
* [Авто-восстановление правил ipfw и работа в фоне](#авто-восстановление-правил-ipfw-и-работа-в-фоне)
|
||||||
|
* [tpws в прозрачном режиме](#tpws-в-прозрачном-режиме)
|
||||||
|
* [Запуск dvtws](#запуск-dvtws)
|
||||||
|
* [PF в FreeBSD](#pf-в-freebsd)
|
||||||
|
* [pfsense](#pfsense)
|
||||||
|
* [OpenBSD](#openbsd)
|
||||||
|
* [tpws бинд на ipv4](#tpws-бинд-на-ipv4)
|
||||||
|
* [tpws для проходящего трафика](#tpws-для-проходящего-трафика)
|
||||||
|
* [Запуск dvtws](#запуск-dvtws)
|
||||||
|
* [Проблемы с badsum](#проблемы-с-badsum)
|
||||||
|
* [Особенность отправки fake пакетов](#особенность-отправки-fake-пакетов)
|
||||||
|
* [Перезагрузка PF таблиц](#перезагрузка-pf-таблиц)
|
||||||
|
* [MacOS](#macos)
|
||||||
|
* [Введение](#введение)
|
||||||
|
* [dvtws бесполезен](#dvtws-бесполезен)
|
||||||
|
* [tpws](#tpws)
|
||||||
|
* [Проблема link-local адреса](#проблема-link-local-адреса)
|
||||||
|
* [Сборка](#сборка)
|
||||||
|
* [Простая установка](#простая-установка)
|
||||||
|
* [Вариант Custom](#вариант-custom)
|
||||||
|
|
||||||
|
|
||||||
## Поддерживаемые версии
|
## Поддерживаемые версии
|
||||||
**FreeBSD** 11.x+ , **OpenBSD** 6.x+, частично **MacOS Sierra** +
|
**FreeBSD** 11.x+ , **OpenBSD** 6.x+, частично **MacOS Sierra** +
|
||||||
@ -13,6 +46,7 @@
|
|||||||
|
|
||||||
|
|
||||||
## Особенности BSD систем
|
## Особенности BSD систем
|
||||||
|
|
||||||
### Отсутствие nfqueue
|
### Отсутствие nfqueue
|
||||||
В **BSD** нет `nfqueue`. Похожий механизм - divert sockets. Из каталога
|
В **BSD** нет `nfqueue`. Похожий механизм - divert sockets. Из каталога
|
||||||
[`nfq/`](../nfq/) под **BSD** собирается `dvtws` вместо `nfqws`. Он разделяет с
|
[`nfq/`](../nfq/) под **BSD** собирается `dvtws` вместо `nfqws`. Он разделяет с
|
||||||
@ -64,7 +98,7 @@ tables. Это прямой аналог ipset. lookup tables не раздел
|
|||||||
выполняется команда из `LISTS_RELOAD`. В противном случае не делается ничего.
|
выполняется команда из `LISTS_RELOAD`. В противном случае не делается ничего.
|
||||||
Если `LISTS_RELOAD=-`, то заполнение таблиц отключается даже при наличии ipfw.
|
Если `LISTS_RELOAD=-`, то заполнение таблиц отключается даже при наличии ipfw.
|
||||||
|
|
||||||
### PF с файла
|
### Загрузка ip таблиц из файла
|
||||||
PF может загружать ip таблицы из файла. Чтобы использовать эту возможность
|
PF может загружать ip таблицы из файла. Чтобы использовать эту возможность
|
||||||
следует отключить сжатие gzip для листов через параметр файла config:
|
следует отключить сжатие gzip для листов через параметр файла config:
|
||||||
`GZIP_LISTS=0`.
|
`GZIP_LISTS=0`.
|
||||||
@ -76,12 +110,13 @@ PF может загружать ip таблицы из файла. Чтобы
|
|||||||
**BSD** для его эмуляции используется epoll-shim - прослойка для эмуляции epoll
|
**BSD** для его эмуляции используется epoll-shim - прослойка для эмуляции epoll
|
||||||
на базе kqueue.
|
на базе kqueue.
|
||||||
|
|
||||||
### mdig, ip2net
|
### mdig и ip2net
|
||||||
mdig и ip2net полностью работоспособны в **BSD**. В них нет ничего
|
mdig и ip2net полностью работоспособны в **BSD**. В них нет ничего
|
||||||
системо-зависимого.
|
системо-зависимого.
|
||||||
|
|
||||||
|
|
||||||
## FreeBSD
|
## FreeBSD
|
||||||
|
|
||||||
### Подгрузка ipdivert
|
### Подгрузка ipdivert
|
||||||
Divert сокеты требуют специального модуля ядра - `ipdivert`.
|
Divert сокеты требуют специального модуля ядра - `ipdivert`.
|
||||||
|
|
||||||
@ -132,8 +167,7 @@ $ ipfw add 100 fwd ::1,988 tcp from any to any 80,443 proto ip6 recv em1
|
|||||||
$ /opt/zapret/tpws/tpws --port=988 --user=daemon --bind-addr=::1 --bind-addr=127.0.0.1
|
$ /opt/zapret/tpws/tpws --port=988 --user=daemon --bind-addr=::1 --bind-addr=127.0.0.1
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Трафик только на таблицу zapret
|
#### Трафик только на таблицу zapret, за исключением таблицы nozapret
|
||||||
> За исключением таблицы nozapret
|
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
$ ipfw delete 100
|
$ ipfw delete 100
|
||||||
@ -178,8 +212,7 @@ $ ipfw add 100 divert 989 tcp from any 80,443 to any tcpflags syn,ack in not div
|
|||||||
$ /opt/zapret/nfq/dvtws --port=989 --dpi-desync=split2
|
$ /opt/zapret/nfq/dvtws --port=989 --dpi-desync=split2
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Трафик только на таблицу zapret
|
#### Трафик только на таблицу zapret, за исключением таблицы nozapret
|
||||||
> За исключением таблицы nozapret
|
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
$ ipfw delete 100
|
$ ipfw delete 100
|
||||||
@ -223,23 +256,22 @@ $ /opt/zapret/nfq/dvtws --port=989 --dpi-desync=split2
|
|||||||
|
|
||||||
### pfsense
|
### pfsense
|
||||||
|
|
||||||
#### Что это
|
#### Описание
|
||||||
pfsense основан на **FreeBSD** и использует фаервол PF, имеющий проблемы с
|
pfsense основан на **FreeBSD** и использует фаервол PF, имеющий проблемы с
|
||||||
divert. К счастью, модули ipfw и ipdivert присутствуют в поставке последних
|
divert. К счастью, модули ipfw и ipdivert присутствуют в поставке последних
|
||||||
версий pfsense. Их можно подгрузить через `kldload`.
|
версий pfsense. Их можно подгрузить через `kldload`.
|
||||||
|
|
||||||
#### Особенности
|
|
||||||
В некоторых более старых версиях pfsense требуется изменить порядок фаерволов
|
В некоторых более старых версиях pfsense требуется изменить порядок фаерволов
|
||||||
через `sysctl`, сделав ipfw первым. В более новых эти параметры `sysctl`
|
через `sysctl`, сделав ipfw первым. В более новых эти параметры `sysctl`
|
||||||
отсутствуют, но система работает как надо и без них. В некоторых случаях
|
отсутствуют, но система работает как надо и без них. В некоторых случаях
|
||||||
фаервол PF может ограничивать возможности `dvtws`, в частности в области
|
фаервол PF может ограничивать возможности `dvtws`, в частности в области
|
||||||
фрагментации ip.
|
фрагментации ip.
|
||||||
|
|
||||||
#### Исполняемые файлы
|
Присутствуют по умолчанию правила scrub для реассемблинга фрагментов.
|
||||||
Присутствуют по умолчанию правила scrub для реассемблинга фрагментов. Бинарики
|
|
||||||
из [`binaries/freebsd-x64`](../binaries/freebsd-x64) собраны под **FreeBSD
|
Бинарики из [`binaries/freebsd-x64`](../binaries/freebsd-x64) собраны под
|
||||||
11**. Они должны работать и на последующих версиях **FreeBSD**, включая
|
**FreeBSD 11**. Они должны работать и на последующих версиях **FreeBSD**,
|
||||||
pfsense. Можно пользоваться `install_bin.sh`.
|
включая pfsense. Можно пользоваться `install_bin.sh`.
|
||||||
|
|
||||||
#### Автозапуск
|
#### Автозапуск
|
||||||
Пример скрипта автозапуска лежит в [`init.d/pfsense`](../init.d/pfsense). Его
|
Пример скрипта автозапуска лежит в [`init.d/pfsense`](../init.d/pfsense). Его
|
||||||
@ -377,7 +409,7 @@ $ tpws --port=988 --user=daemon --bind-addr=::1 --bind-addr=127.0.0.1
|
|||||||
> `/dev/pf`, поэтому прозрачный режим **требует root**.
|
> `/dev/pf`, поэтому прозрачный режим **требует root**.
|
||||||
|
|
||||||
|
|
||||||
### Запуск `dvtws`
|
### Запуск dvtws
|
||||||
|
|
||||||
#### Весь трафик
|
#### Весь трафик
|
||||||
`/etc/pf.conf`:
|
`/etc/pf.conf`:
|
||||||
@ -392,8 +424,7 @@ $ pfctl -f /etc/pf.conf
|
|||||||
$ ./dvtws --port=989 --dpi-desync=split2
|
$ ./dvtws --port=989 --dpi-desync=split2
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Трафик только на таблицу zapret
|
#### Трафик только на таблицу zapret, за исключением таблицы nozapret
|
||||||
> За исключением таблицы nozapret
|
|
||||||
|
|
||||||
`/etc/pf.conf`:
|
`/etc/pf.conf`:
|
||||||
```
|
```
|
||||||
@ -438,8 +469,6 @@ $ ./dvtws --port=989 --dpi-desync=split2
|
|||||||
предотвращает повторный заворот diverted фреймов, поэтому проблемы зацикливания
|
предотвращает повторный заворот diverted фреймов, поэтому проблемы зацикливания
|
||||||
нет.
|
нет.
|
||||||
|
|
||||||
|
|
||||||
### Возможная оптимизация трафика
|
|
||||||
divert-packet автоматически вносит обратное правило для перенаправления. Трюк с
|
divert-packet автоматически вносит обратное правило для перенаправления. Трюк с
|
||||||
no state и in правилом позволяет обойти эту проблему, чтобы напрасно не гнать
|
no state и in правилом позволяет обойти эту проблему, чтобы напрасно не гнать
|
||||||
массивный трафик через `dvtws`.
|
массивный трафик через `dvtws`.
|
||||||
@ -481,6 +510,7 @@ $ pfctl -Tl -f /etc/pf.conf
|
|||||||
|
|
||||||
|
|
||||||
## MacOS
|
## MacOS
|
||||||
|
|
||||||
### Введение
|
### Введение
|
||||||
Иначально ядро этой ОС "darwin" основывалось на **BSD**, потому в ней много
|
Иначально ядро этой ОС "darwin" основывалось на **BSD**, потому в ней много
|
||||||
похожего на другие версии **BSD**. Однако, как и в других массовых коммерческих
|
похожего на другие версии **BSD**. Однако, как и в других массовых коммерческих
|
||||||
@ -584,12 +614,6 @@ local. Скрывать link local не имеет смысла, а динами
|
|||||||
$ make -C /opt/zapret mac
|
$ make -C /opt/zapret mac
|
||||||
```
|
```
|
||||||
|
|
||||||
> [!IMPORTANT]
|
|
||||||
> Скрипты получения листов [`ipset/*.sh`](../ipset/) работают. Если будете
|
|
||||||
> пользоваться [`get_combined.sh`](../ipset/get_combined.sh), нужно установить
|
|
||||||
> GNU grep через `brew`. Имеющийся очень старый и безумно медленный с оцией
|
|
||||||
> `-f`.
|
|
||||||
|
|
||||||
|
|
||||||
### Простая установка
|
### Простая установка
|
||||||
В **MacOS** поддерживается `install_easy.sh`
|
В **MacOS** поддерживается `install_easy.sh`
|
||||||
@ -631,6 +655,7 @@ $ /opt/zapret/init.d/macos/zapret restart
|
|||||||
$ /opt/zapret/init.d/macos/zapret start-daemons
|
$ /opt/zapret/init.d/macos/zapret start-daemons
|
||||||
$ /opt/zapret/init.d/macos/zapret stop-daemons
|
$ /opt/zapret/init.d/macos/zapret stop-daemons
|
||||||
$ /opt/zapret/init.d/macos/zapret restart-daemons
|
$ /opt/zapret/init.d/macos/zapret restart-daemons
|
||||||
|
```
|
||||||
|
|
||||||
Работа только с PF:
|
Работа только с PF:
|
||||||
```sh
|
```sh
|
||||||
@ -693,7 +718,7 @@ custom firewall отличается от linux варианта. Вместо
|
|||||||
нужно сгенерировать правила для `zapret-v4` и `zapret-v6` anchors и выдать их в
|
нужно сгенерировать правила для `zapret-v4` и `zapret-v6` anchors и выдать их в
|
||||||
stdout. Это делается в функциях `zapret_custom_firewall_v4()` и
|
stdout. Это делается в функциях `zapret_custom_firewall_v4()` и
|
||||||
`zapret_custom_firewall_v6()`. Определения таблиц заполняются основным скриптом
|
`zapret_custom_firewall_v6()`. Определения таблиц заполняются основным скриптом
|
||||||
- вам это делать не нужно. Можно ссылаться на таблицы `zapret` и `zapret-user`
|
\- вам это делать не нужно. Можно ссылаться на таблицы `zapret` и `zapret-user`
|
||||||
в v4, `zapret6` и `zapret6-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).
|
||||||
|
@ -359,3 +359,7 @@ blockcheck: do not require root if SKIP_PKTWS=1
|
|||||||
v68:
|
v68:
|
||||||
|
|
||||||
readme.md : move russian version to markdown
|
readme.md : move russian version to markdown
|
||||||
|
nfqws,tpws: use alternate $ sign for $<config_file>
|
||||||
|
repo: binaries removed from repo. git actions binaries build in releases.
|
||||||
|
uninstall_easy.sh: offer to remove dependencies in openwrt
|
||||||
|
install_easy.sh: allow to download lists in autohostlist filter mode
|
||||||
|
@ -252,4 +252,4 @@
|
|||||||
довольно безобидные, а есть сильно ломающие, которые подходят только для
|
довольно безобидные, а есть сильно ломающие, которые подходят только для
|
||||||
точечного пробития отдельных ресурсов, когда ничего лучше нет. Хорошая
|
точечного пробития отдельных ресурсов, когда ничего лучше нет. Хорошая
|
||||||
стратегия может сильно ломать из-за плохо подобранных ограничителей для фейков
|
стратегия может сильно ломать из-за плохо подобранных ограничителей для фейков
|
||||||
- ttl, fooling.
|
\- ttl, fooling.
|
||||||
|
@ -206,12 +206,12 @@ select_mode()
|
|||||||
|
|
||||||
select_getlist()
|
select_getlist()
|
||||||
{
|
{
|
||||||
if [ "$MODE_FILTER" = "ipset" -o "$MODE_FILTER" = "hostlist" ]; then
|
if [ "$MODE_FILTER" = "ipset" -o "$MODE_FILTER" = "hostlist" -o "$MODE_FILTER" = "autohostlist" ]; then
|
||||||
local D=N
|
local D=N
|
||||||
[ -n "$GETLIST" ] && D=Y
|
[ -n "$GETLIST" ] && D=Y
|
||||||
echo
|
echo
|
||||||
if ask_yes_no $D "do you want to auto download ip/host list"; then
|
if ask_yes_no $D "do you want to auto download ip/host list"; then
|
||||||
if [ "$MODE_FILTER" = "hostlist" ] ; then
|
if [ "$MODE_FILTER" = "hostlist" -o "$MODE_FILTER" = "autohostlist" ] ; then
|
||||||
GETLISTS="get_refilter_domains.sh get_antizapret_domains.sh get_reestr_resolvable_domains.sh get_reestr_hostlist.sh"
|
GETLISTS="get_refilter_domains.sh get_antizapret_domains.sh get_reestr_resolvable_domains.sh get_reestr_hostlist.sh"
|
||||||
GETLIST_DEF="get_antizapret_domains.sh"
|
GETLIST_DEF="get_antizapret_domains.sh"
|
||||||
else
|
else
|
||||||
|
@ -72,6 +72,9 @@ remove_openwrt()
|
|||||||
nft_del_table
|
nft_del_table
|
||||||
restart_openwrt_firewall
|
restart_openwrt_firewall
|
||||||
crontab_del
|
crontab_del
|
||||||
|
remove_extra_pkgs_openwrt
|
||||||
|
echo
|
||||||
|
echo to fully remove zapret : rm -r \"$ZAPRET_BASE\"
|
||||||
}
|
}
|
||||||
|
|
||||||
remove_macos()
|
remove_macos()
|
||||||
|
Loading…
Reference in New Issue
Block a user