Ставим 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
ipfw add 100 divert 989 tcp from any to any 80,443 out not diverted xmit pppoe0
pfctl -d ; pfctl -e
${SERVICE_CMD} \
--debug=0 \
--pidfile=/var/run/dvtws.pid \
--port=989 \
--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 \
--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
будет объяснять почему в файле появляется та или иная запись