install_easy: router concept redesign on desktop systems

This commit is contained in:
bol-van 2021-03-06 11:52:07 +03:00
parent 1222c0534b
commit 986e5a0683
3 changed files with 95 additions and 65 deletions

View File

@ -404,8 +404,6 @@ tpws - tpws transparent mode
tpws-socks - tpws socks mode tpws-socks - tpws socks mode
binds to localhost and LAN interface (if IFACE_LAN is specified or the system is OpenWRT). port 988 binds to localhost and LAN interface (if IFACE_LAN is specified or the system is OpenWRT). port 988
nfqws - nfqws nfqws - nfqws
nfqws - use nfqws
filter - only fill ipset or load hostlist filter - only fill ipset or load hostlist
custom - use custom script for running daemons and establishing firewall rules custom - use custom script for running daemons and establishing firewall rules

View File

@ -925,10 +925,6 @@ install_easy.sh автоматизирует описанные выше руч
или названия пакетов не соответствуют прописанным в инсталятор, пакеты нужно установить вручную. или названия пакетов не соответствуют прописанным в инсталятор, пакеты нужно установить вручную.
Требуется : ipset curl Требуется : ipset curl
ВАЖНО : Хоть инсталятор и спрашивает является ли система роутером,
настройка маршрутизации , маскарада и т.д. не входит в задачу zapret.
Роутер вдруг сам волшебно не поднимется. Предполагается, что роутер вы уже настроили сами.
В комплекте идут статические бинарики для большинства архитектур. Какой-то из них подойдет В комплекте идут статические бинарики для большинства архитектур. Какой-то из них подойдет
с вероятностью 99%. Но если у вас экзотическая система, инсталятор попробует собрать бинарики сам с вероятностью 99%. Но если у вас экзотическая система, инсталятор попробует собрать бинарики сам
через make. Для этого нужны gcc, make и необходимые -dev пакеты. Можно форсировать режим через make. Для этого нужны gcc, make и необходимые -dev пакеты. Можно форсировать режим
@ -936,8 +932,16 @@ install_easy.sh автоматизирует описанные выше руч
install_easy.sh make install_easy.sh make
Для MacOS готовые бинарики не поставляются, поэтому всегда выбирается вариант установки через make. Под openwrt все уже сразу готово для использования системы в качестве роутера.
Запуск make на чистой системе вызывает автоматическую установку developer tools. В них есть все необходимое. Имена интерфейсов WAN и LAN известны из настроек системы.
Под другими системами роутер вы настраиваете самостоятельно. Инсталятор в это не вмешивается.
Инсталятор в зависимости от выбранного режима может спросить LAN и WAN интерфейсы.
Нужно понимать, что заворот проходящего трафика на tpws в прозрачном режиме происходит до выполнения маршрутизаци,
следовательно возможна фильтрация по LAN и невозможна по WAN.
Решение о завороте на tpws локального исходящего трафика принимается после выполнения маршрутизации,
следовательно ситуация обратная : LAN не имеет смысла, фильтрация по WAN возможна.
Заворот на nfqws происходит всегда после маршрутизации, поэтому к нему применима только фильтрация по WAN.
Возможность прохождения трафика в том или ином направлении настраивается вами в процессе конфигурации роутера.
Деинсталяция выполняется через uninstall_easy.sh Деинсталяция выполняется через uninstall_easy.sh

View File

@ -23,6 +23,8 @@ DNSCHECK_DIG1=/tmp/dig1.txt
DNSCHECK_DIG2=/tmp/dig2.txt DNSCHECK_DIG2=/tmp/dig2.txt
DNSCHECK_DIGS=/tmp/digs.txt DNSCHECK_DIGS=/tmp/digs.txt
[ -n "$TPPORT" ] || TPPORT=988
SYSTEMD_SYSTEM_DIR=/lib/systemd/system SYSTEMD_SYSTEM_DIR=/lib/systemd/system
[ -d "$SYSTEMD_SYSTEM_DIR" ] || SYSTEMD_SYSTEM_DIR=/usr/lib/systemd/system [ -d "$SYSTEMD_SYSTEM_DIR" ] || SYSTEMD_SYSTEM_DIR=/usr/lib/systemd/system
@ -346,6 +348,7 @@ select_mode_filter()
select_mode() select_mode()
{ {
select_mode_mode select_mode_mode
select_mode_iface
select_mode_http select_mode_http
select_mode_keepalive select_mode_keepalive
select_mode_https select_mode_https
@ -395,24 +398,6 @@ ask_config()
select_getlist select_getlist
} }
ask_iface()
{
# $1 - var to ask
# $2 - additional name (<any>)
local ifs i0
[ -n "$2" ] && i0="$2 "
case $SYSTEM in
macos)
ifs="$(ifconfig -l)"
;;
*)
ifs="$(ls /sys/class/net)"
;;
esac
ask_list $1 "$i0$ifs" && write_config_var $1
}
ask_config_offload() ask_config_offload()
{ {
is_flow_offload_avail && { is_flow_offload_avail && {
@ -460,47 +445,92 @@ ask_config_tmpdir()
} }
} }
select_router_iface() ask_iface()
{ {
# $1 - ask iface function name # $1 - var to ask
# $2 - additional name for empty string synonim
local T=N local ifs i0 def new
[ -n "$IFACE_LAN" ] && T=Y eval def="\$$1"
local old_lan=$IFACE_LAN
local old_wan=$IFACE_WAN [ -n "$2" ] && i0="$2 "
case $SYSTEM in
macos)
ifs="$(ifconfig -l)"
;;
*)
ifs="$(ls /sys/class/net)"
;;
esac
[ -z "$def" ] && eval $1="$2"
ask_list $1 "$i0$ifs" && {
eval new="\$$1"
[ "$new" = "$2" ] && eval $1=""
write_config_var $1
}
}
ask_iface_lan()
{
echo LAN interface :
ask_iface IFACE_LAN "NONE"
}
ask_iface_wan()
{
echo WAN interface :
ask_iface IFACE_WAN "ANY"
}
select_mode_iface()
{
# openwrt has its own interface management scheme
# filter just creates ip tables, no daemons involved
# nfqws sits in POSTROUTING chain and unable to filter by incoming interface
# tpws redirection works in PREROUTING chain
# in tpws-socks mode IFACE_LAN specifies additional bind interface for the socks listener
# it's not possible to instruct tpws to route outgoing connection to an interface (OS routing table decides)
# custom mode can also benefit from interface names (depends on custom script code)
if [ "$SYSTEM" = "openwrt" ] || [ "$MODE" = "filter" ]; then return; fi
echo echo
if [ "$SYSTEM" = "macos" ]; then
echo "WARNING ! OS feature \"internet sharing\" is not supported." case "$MODE" in
echo "Only manually configured PF router is supported." tpws-socks)
else echo "select LAN interface to allow socks access from your LAN. select NONE for localhost only."
echo "WARNING ! This installer will not configure routing, NAT, ... for you. Its your responsibility." echo "expect socks on tcp port $TPPORT"
fi ask_iface_lan
if ask_yes_no $T "is this system a router"; then ;;
echo LAN interface : tpws)
ask_iface IFACE_LAN echo "select LAN interface to operate in router mode. select NONE for local outgoing traffic only."
echo WAN interface : if [ "$SYSTEM" = "macos" ]; then
[ -n "$IFACE_WAN" ] || IFACE_WAN="ANY" echo "WARNING ! OS feature \"internet sharing\" is not supported."
ask_iface IFACE_WAN "ANY" echo "Only manually configured PF router is supported."
[ "$IFACE_WAN" = "ANY" ] && { else
# any = not defined echo "WARNING ! This installer will not configure routing, NAT, ... for you. Its your responsibility."
IFACE_WAN= fi
write_config_var IFACE_WAN ask_iface_lan
} ;;
else custom)
[ -n "$old_lan" ] && { echo "select LAN interface for your custom script (how it works depends on your code)"
IFACE_LAN="" ask_iface_lan
write_config_var IFACE_LAN ;;
} esac
[ -n "$old_wan" ] && {
IFACE_WAN="" case "$MODE" in
write_config_var IFACE_WAN tpws)
} echo "select WAN interface for $MODE operations. select ANY to operate on any interface."
fi [ -n "$IFACE_LAN" ] && echo "WAN filtering works only for local outgoing traffic !"
} ask_iface_wan
ask_config_desktop() ;;
{ nfqws)
select_router_iface echo "select WAN interface for $MODE operations. select ANY to operate on any interface."
ask_iface_wan
;;
custom)
echo "select WAN interface for your custom script (how it works depends on your code)"
ask_iface_wan
;;
esac
} }
copy_all() copy_all()
@ -843,7 +873,6 @@ install_systemd()
install_binaries install_binaries
check_dns check_dns
select_ipv6 select_ipv6
ask_config_desktop
ask_config ask_config
service_install_systemd service_install_systemd
download_list download_list
@ -1211,7 +1240,6 @@ install_macos()
install_binaries install_binaries
check_dns check_dns
select_ipv6 select_ipv6
ask_config_desktop
ask_config ask_config
service_install_macos service_install_macos
macos_fw_reload_trigger_clear macos_fw_reload_trigger_clear