diff --git a/docs/readme.eng.txt b/docs/readme.eng.txt index e2ad3b1..95a680b 100644 --- a/docs/readme.eng.txt +++ b/docs/readme.eng.txt @@ -404,8 +404,6 @@ tpws - tpws transparent mode tpws-socks - tpws socks mode binds to localhost and LAN interface (if IFACE_LAN is specified or the system is OpenWRT). port 988 nfqws - nfqws -nfqws - use nfqws - filter - only fill ipset or load hostlist custom - use custom script for running daemons and establishing firewall rules diff --git a/docs/readme.txt b/docs/readme.txt index 92ad54f..7310cbe 100644 --- a/docs/readme.txt +++ b/docs/readme.txt @@ -925,10 +925,6 @@ install_easy.sh автоматизирует описанные выше руч или названия пакетов не соответствуют прописанным в инсталятор, пакеты нужно установить вручную. Требуется : ipset curl -ВАЖНО : Хоть инсталятор и спрашивает является ли система роутером, -настройка маршрутизации , маскарада и т.д. не входит в задачу zapret. -Роутер вдруг сам волшебно не поднимется. Предполагается, что роутер вы уже настроили сами. - В комплекте идут статические бинарики для большинства архитектур. Какой-то из них подойдет с вероятностью 99%. Но если у вас экзотическая система, инсталятор попробует собрать бинарики сам через make. Для этого нужны gcc, make и необходимые -dev пакеты. Можно форсировать режим @@ -936,8 +932,16 @@ install_easy.sh автоматизирует описанные выше руч install_easy.sh make -Для MacOS готовые бинарики не поставляются, поэтому всегда выбирается вариант установки через make. -Запуск make на чистой системе вызывает автоматическую установку developer tools. В них есть все необходимое. +Под openwrt все уже сразу готово для использования системы в качестве роутера. +Имена интерфейсов WAN и LAN известны из настроек системы. +Под другими системами роутер вы настраиваете самостоятельно. Инсталятор в это не вмешивается. +Инсталятор в зависимости от выбранного режима может спросить LAN и WAN интерфейсы. +Нужно понимать, что заворот проходящего трафика на tpws в прозрачном режиме происходит до выполнения маршрутизаци, +следовательно возможна фильтрация по LAN и невозможна по WAN. +Решение о завороте на tpws локального исходящего трафика принимается после выполнения маршрутизации, +следовательно ситуация обратная : LAN не имеет смысла, фильтрация по WAN возможна. +Заворот на nfqws происходит всегда после маршрутизации, поэтому к нему применима только фильтрация по WAN. +Возможность прохождения трафика в том или ином направлении настраивается вами в процессе конфигурации роутера. Деинсталяция выполняется через uninstall_easy.sh diff --git a/install_easy.sh b/install_easy.sh index 9d1dcd3..038ac72 100755 --- a/install_easy.sh +++ b/install_easy.sh @@ -23,6 +23,8 @@ DNSCHECK_DIG1=/tmp/dig1.txt DNSCHECK_DIG2=/tmp/dig2.txt DNSCHECK_DIGS=/tmp/digs.txt +[ -n "$TPPORT" ] || TPPORT=988 + SYSTEMD_SYSTEM_DIR=/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_mode + select_mode_iface select_mode_http select_mode_keepalive select_mode_https @@ -395,24 +398,6 @@ ask_config() select_getlist } -ask_iface() -{ - # $1 - var to ask - # $2 - additional name () - - 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() { 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 - [ -n "$IFACE_LAN" ] && T=Y - local old_lan=$IFACE_LAN - local old_wan=$IFACE_WAN + local ifs i0 def new + eval def="\$$1" + + [ -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 - if [ "$SYSTEM" = "macos" ]; then - echo "WARNING ! OS feature \"internet sharing\" is not supported." - echo "Only manually configured PF router is supported." - else - echo "WARNING ! This installer will not configure routing, NAT, ... for you. Its your responsibility." - fi - if ask_yes_no $T "is this system a router"; then - echo LAN interface : - ask_iface IFACE_LAN - echo WAN interface : - [ -n "$IFACE_WAN" ] || IFACE_WAN="ANY" - ask_iface IFACE_WAN "ANY" - [ "$IFACE_WAN" = "ANY" ] && { - # any = not defined - IFACE_WAN= - write_config_var IFACE_WAN - } - else - [ -n "$old_lan" ] && { - IFACE_LAN="" - write_config_var IFACE_LAN - } - [ -n "$old_wan" ] && { - IFACE_WAN="" - write_config_var IFACE_WAN - } - fi -} -ask_config_desktop() -{ - select_router_iface + + case "$MODE" in + tpws-socks) + echo "select LAN interface to allow socks access from your LAN. select NONE for localhost only." + echo "expect socks on tcp port $TPPORT" + ask_iface_lan + ;; + tpws) + echo "select LAN interface to operate in router mode. select NONE for local outgoing traffic only." + if [ "$SYSTEM" = "macos" ]; then + echo "WARNING ! OS feature \"internet sharing\" is not supported." + echo "Only manually configured PF router is supported." + else + echo "WARNING ! This installer will not configure routing, NAT, ... for you. Its your responsibility." + fi + ask_iface_lan + ;; + custom) + echo "select LAN interface for your custom script (how it works depends on your code)" + ask_iface_lan + ;; + esac + + case "$MODE" in + tpws) + echo "select WAN interface for $MODE operations. select ANY to operate on any interface." + [ -n "$IFACE_LAN" ] && echo "WAN filtering works only for local outgoing traffic !" + ask_iface_wan + ;; + nfqws) + 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() @@ -843,7 +873,6 @@ install_systemd() install_binaries check_dns select_ipv6 - ask_config_desktop ask_config service_install_systemd download_list @@ -1211,7 +1240,6 @@ install_macos() install_binaries check_dns select_ipv6 - ask_config_desktop ask_config service_install_macos macos_fw_reload_trigger_clear