From 3345bf55b0ba0cf7d1406a151b6035331292cfee Mon Sep 17 00:00:00 2001 From: bol-van Date: Sat, 22 Jan 2022 14:36:36 +0300 Subject: [PATCH] bsd docs: pfsense info --- docs/bsd.eng.md | 28 +++++++++++++++++++++++++++- docs/bsd.txt | 30 ++++++++++++++++++++++++++++-- 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/docs/bsd.eng.md b/docs/bsd.eng.md index 372b622..f0d3cd3 100644 --- a/docs/bsd.eng.md +++ b/docs/bsd.eng.md @@ -2,7 +2,7 @@ FreeBSD 11.x+ , OpenBSD 6.x+, partially MacOS Sierra+ -Older versions may work or not. pfSense is not supported. +Older versions may work or not. ## BSD features @@ -168,6 +168,32 @@ then Its not clear how to do rdr-to outgoing traffic. I could not make route-to scheme work. +## pfsense + +pfsense is based on FreeBSD. +Binaries compiled in compatible FreeBSD versions shoud work. +It's been tested that dvtws binary from FreeBSD 13 works on pfsense 2.5.2 with FreeBSD kernel 12.2. +pfsense uses pf firewall which does not support divert. +Fortunately ipfw and ipdivert modules are present and can be kldload-ed. +It's also necessary to change firewall order using sysctl commands. +Sometimes pf may limit dvtws abilities. It scrubs ip fragments disabling dvtws ipfrag2 desync mode. +If something is absent, no ipfw.ko/ipdivert.ko or binaries do not work - try the latest pfsense version. + +/usr/local/etc/rc.d/zapret.sh (chmod 755) +``` +#!/bin/sh + +kldload ipfw +kldload ipdivert +sysctl net.inet.ip.pfil.outbound=ipfw,pf +sysctl net.inet.ip.pfil.inbound=ipfw,pf +sysctl net.inet6.ip6.pfil.outbound=ipfw,pf +sysctl net.inet6.ip6.pfil.inbound=ipfw,pf +ipfw add 100 divert 989 tcp from any to any 80,443 out not diverted not sockarg +dvtws --daemon --port 989 --dpi-desync=split2 +``` + + ## OpenBSD In OpenBSD default tpws bind is ipv6 only. to bind to ipv4 specify --bind-addr=0.0.0.0 diff --git a/docs/bsd.txt b/docs/bsd.txt index 3ab4019..e4f9811 100644 --- a/docs/bsd.txt +++ b/docs/bsd.txt @@ -6,8 +6,7 @@ FreeBSD 11.x+ , OpenBSD 6.x+, частично MacOS Sierra+ На более старых может собираться, может не собираться, может работать или не работать. На FreeBSD 10 собирается и работает dvtws. С tpws есть проблемы из-за слишком старой версии компилятора clang. Вероятно, будет работать, если обновить компилятор. -На pfSense если и можно завести, то это не просто. Собранные на FreeBSD с той же версией ядра бинарики не работают. -Статические бинарики тоже. Модуль ipdivert отсутствует. +Возможна прикрутка к последним версиям pfsense без веб интерфейса в ручном режиме через консоль. Особенности BSD систем @@ -164,6 +163,33 @@ rdr pass on em1 inet proto tcp to port {80,443} -> 127.0.0.1 port 988 В PF непонятно как делать rdr-to с той же системы, где работает proxy. Вариант с route-to у меня не заработал. +pfsense +------- + +pfsense основано на FreeBSD. +На последних версиях pfsense работают бинарики, собранные в FreeBSD совместимых версий. +Проверено, что бинарик dvtws с FreeBSD 13 сработал на pfsense 2.5.2 с ядром FreeBSD 12.2. +pfsense использует фаервол pf, а он не поддерживает divert. +К счастью, модули ipfw и ipdivert присутствуют в поставке последних версий pfsense. +Их можно подгрузить через kldload. Еще требуется изменить порядок фаерволов через sysctl, сделав ipfw первым. +В некоторых случаях фаервол pf может ограничивать возможности dvtws, в частности в области фрагментации ip. +Присутствуют по умолчанию правила scrub для реассемблинга фрагментов. + +/usr/local/etc/rc.d/zapret.sh (chmod 755) +----------- +#!/bin/sh + +kldload ipfw +kldload ipdivert +sysctl net.inet.ip.pfil.outbound=ipfw,pf +sysctl net.inet.ip.pfil.inbound=ipfw,pf +sysctl net.inet6.ip6.pfil.outbound=ipfw,pf +sysctl net.inet6.ip6.pfil.inbound=ipfw,pf +ipfw add 100 divert 989 tcp from any to any 80,443 out not diverted not sockarg +dvtws --daemon --port 989 --dpi-desync=split2 +----------- + + OpenBSD -------