Ставим git (он вроде доступен без подключения репозиториев, но я уже не помню)
pkg update && pkg install git
Клонируем zapret из github
mkdir /opt && git clone https://github.com/bol-van/zapret.git /opt/zapret
Копируем бинарник
cp /opt/zapret/binaries/freebsd-x64/dvtws /usr/local/sbin && chmod +x /usr/local/sbin/dvtws
Создаём скрипты для запуска
edit /etc/rc.conf.d/dvtws
пишем
dvtws_enable="YES"
далее
edit /usr/local/etc/rc.d/dvtws && chmod +x /usr/local/etc/rc.d/dvtws
пишем (не факт что будет работать с представленными параметрами dpi-desync, их нужно подбирать самостоятельно через blockcheck или ручками). Всё о подборе параметров, их описание и для чего нужны файлы hostlist читаем тут.
#!/bin/sh
SERVICE_NAME="dvtws"
SERVICE_CMD="/usr/local/sbin/dvtws"
pidfile="/var/run/dvtws.pid"
is_service_running() {
pgrep -f "${SERVICE_CMD}" > ${pidfile} && return 0 || return 1
}
mng_service() {
if [ "" = "start" ]; then
kldload ipfw
kldload ipdivert
#pppoe это мой интерфейс наружу, у вас может быть свой
ipfw add 100 divert 989 tcp from any to any 80,443 out not diverted xmit pppoe0
ipfw add 100 divert 989 udp from any to table\(discord\) 50000-50030 out not diverted xmit pppoe0
#тут мы заполняем ipset для таблицы discord, либо создайте список с сетями, либо удалите
ipfw table discord flush
cat /usr/local/etc/dvtws/dvtws_discord | while read line;do
ipfw table discord add $line 1
done
#этот кусок
pfctl -d ; pfctl -e
${SERVICE_CMD} \
--debug=0 \
--pidfile=/var/run/dvtws.pid \
--port=989 \
#порты и правила discord
--filter-udp=50000-50030 \
--dpi-desync=fake \
--dpi-desync-repeats=6 \
--dpi-desync-any-protocol \
--dpi-desync-cutoff=n2 \
--new \
#порт 80(хз зачем, но пусть будет)
--filter-tcp=80 \
--dpi-desync=split2 \
--dpi-desync-split-seqovl=1 \
--hostlist-auto=/usr/local/etc/dvtws/dvtws_auto \
--hostlist-auto-fail-threshold=3 \
--hostlist-auto-fail-time=60 \
--hostlist-auto-retrans-threshold=3 \
--hostlist-auto-debug=/usr/local/etc/dvtws/dvtws_debug \
--hostlist=/usr/local/etc/dvtws/dvtws_auto \
--hostlist=/usr/local/etc/dvtws/dvtws_host \
--hostlist-exclude=/usr/local/etc/dvtws/dvtws_exclude \
--new \
#порт 443 это весь наш https трафик
--filter-tcp=443 \
--dpi-desync=split2 \
--dpi-desync-split-seqovl=1 \
--hostlist-auto=/usr/local/etc/dvtws/dvtws_auto \
--hostlist-auto-fail-threshold=3 \
--hostlist-auto-fail-time=60 \
--hostlist-auto-retrans-threshold=3 \
--hostlist-auto-debug=/usr/local/etc/dvtws/dvtws_debug \
--hostlist=/usr/local/etc/dvtws/dvtws_auto \
--hostlist=/usr/local/etc/dvtws/dvtws_host \
--hostlist-exclude=/usr/local/etc/dvtws/dvtws_exclude \
| logger -t "${SERVICE_NAME}" >/dev/null 2>&1 &
elif [ "" = "stop" ]; then
ipfw delete 100
pkill -f ${SERVICE_NAME}
fi
}
чтобы управлять сервисом из web’a делаем
edit /usr/local/opnsense/service/conf/actions.d/actions_dvtws.conf
пишем
[start]
command:/usr/local/etc/rc.d/dvtws start
parameters:
type:script
message:starting dvtws
[stop]
command:/usr/local/etc/rc.d/dvtws stop
parameters:
type:script
message:stopping dvtws
[restart]
command:/usr/local/etc/rc.d/dvtws restart
parameters:
type:script
message:restarting dvtws
[status]
command:/usr/local/etc/rc.d/dvtws status; exit 0
parameters:
type:script_output
message:request dvtws status
перезапускаем configd
service configd restart
создаём сервис
edit /usr/local/etc/inc/plugins.inc.d/dvtws.inc
пишем плагин для web’a
<?php
/*
* Copyright (C) 2017 EURO-LOG AG
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/**
* register service
* @return array
*/
function dvtws_services()
{
global $config;
$services = array();
$services[] = array(
'description' => gettext('Anti-DPI server'),
'configd' => array(
'restart' => array('dvtws restart'),
'start' => array('dvtws start'),
'stop' => array('dvtws stop'),
),
'name' => 'dvtws',
'pidfile' => '/var/run/dvtws.pid'
);
return $services;
}
function dvtws_syslog()
{
$logfacilities = array();
$logfacilities['dvtws'] = array(
'facility' => array('dvtws'),
);
return $logfacilities;
ну и напоследок сделаем запуск при старте
edit /usr/local/etc/rc.syshook.d/start/99-dvtws
пишем
#!/bin/sh
#Start dvtws service
/usr/local/etc/rc.d/dvtws start
проверяем что плагин регистрируется
pluginctl -s
в появившемся списке должен присутствовать dvtws. А в system-diagnoctics-services web интерфейса строка
Готово, dvtws установлен, настроен и настроено управление через web. Осталось наполнить hostlist для своих хотелок и перезагрузиться
edit /usr/local/etc/dvtws/dvtws_host
или же оставить всё на усмотрение самого dvtws, который будет наполнять
/usr/local/etc/dvtws/dvtws_auto
за наполение этого файла отвечают параметры
--hostlist-auto-fail-threshold=3 \
--hostlist-auto-fail-time=60 \
--hostlist-auto-retrans-threshold=3 \
а файл
/usr/local/etc/dvtws/dvtws_debug
будет объяснять почему в файле появляется та или иная запись