diff --git a/changes.txt b/changes.txt index 9f9c9dd..4f62512 100644 --- a/changes.txt +++ b/changes.txt @@ -82,3 +82,7 @@ v16 tpws: split-http-req=method : split inside method name, not after ISP support : mns.ru changed split pos to 3 (got redirect page with HEAD req : curl -I ej.ru) + +v17 + +ISP support : athome moved from nfqws to tpws because of instability and http request hangs diff --git a/init.d/debian7/zapret b/init.d/debian7/zapret index 35b1e38..5459bd0 100644 --- a/init.d/debian7/zapret +++ b/init.d/debian7/zapret @@ -16,6 +16,7 @@ ISP=mns #ISP=beeline #ISP=domru #ISP=tiera +#ISP=athome # If ISP is unlisted then uncomment "custom" # Find out what works for your ISP and modify "# PLACEHOLDER" parts of this script @@ -94,6 +95,16 @@ case "$1" in DAEMON=$TPWS DAEMON_OPTS="--port=$TPPORT --split-http-req=host --user=$TPWS_USER --bind-addr=127.0.0.1" ;; + athome) + adduser --disabled-login --no-create-home --system --quiet $TPWS_USER + sysctl -w net.ipv4.conf.$SLAVE_ETH.route_localnet=1 + iptables -t nat -C PREROUTING -p tcp --dport 80 -i $SLAVE_ETH -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT 2>/dev/null || + iptables -t nat -I PREROUTING -p tcp --dport 80 -i $SLAVE_ETH -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT + iptables -t nat -C OUTPUT -p tcp --dport 80 -m owner ! --uid-owner $TPWS_USER -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT 2>/dev/null || + iptables -t nat -I OUTPUT -p tcp --dport 80 -m owner ! --uid-owner $TPWS_USER -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT + DAEMON=$TPWS + DAEMON_OPTS="--port=$TPPORT --split-http-req=method --user=$TPWS_USER --bind-addr=127.0.0.1" + ;; custom) # PLACEHOLDER echo !!! NEED ATTENTION !!! @@ -133,7 +144,7 @@ case "$1" in iptables -t raw -D PREROUTING -p udp --sport 53 -m string --hex-string "|2a022698a00000000000000000000110|" --algo bm -j DROP --from 40 --to 300 DAEMON=$TPWS ;; - tiera) + tiera|athome) sysctl -w net.ipv4.conf.$SLAVE_ETH.route_localnet=0 iptables -t nat -D PREROUTING -p tcp --dport 80 -i $SLAVE_ETH -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT iptables -t nat -D OUTPUT -p tcp --dport 80 -m owner ! --uid-owner $TPWS_USER -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT diff --git a/init.d/openwrt/firewall.user.athome b/init.d/openwrt/firewall.user.athome new file mode 100644 index 0000000..59b541f --- /dev/null +++ b/init.d/openwrt/firewall.user.athome @@ -0,0 +1,18 @@ +TPPORT=1188 +TPWS_USER=daemon + +. /lib/functions/network.sh + +network_find_wan wan_iface + +for ext_iface in $wan_iface; do + network_get_device DEVICE $ext_iface + # DNAT for local traffic + iptables -t nat -C OUTPUT -p tcp --dport 80 -o $DEVICE -m owner ! --uid-owner $TPWS_USER -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT || + iptables -t nat -I OUTPUT -p tcp --dport 80 -o $DEVICE -m owner ! --uid-owner $TPWS_USER -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT + +done + +sysctl -w net.ipv4.conf.br-lan.route_localnet=1 +iptables -t nat -C prerouting_lan_rule -p tcp --dport 80 -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT || + iptables -t nat -I prerouting_lan_rule -p tcp --dport 80 -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT diff --git a/init.d/openwrt/firewall.user.mns b/init.d/openwrt/firewall.user.mns index 162f33e..30fabca 100644 --- a/init.d/openwrt/firewall.user.mns +++ b/init.d/openwrt/firewall.user.mns @@ -1,5 +1,2 @@ -# put it to /etc/firewall.user - -# for MNS ISP iptables -t raw -C PREROUTING -p tcp --sport 80 --tcp-flags SYN,ACK SYN,ACK -m set --match-set zapret src -j NFQUEUE --queue-num 200 --queue-bypass || iptables -t raw -I PREROUTING -p tcp --sport 80 --tcp-flags SYN,ACK SYN,ACK -m set --match-set zapret src -j NFQUEUE --queue-num 200 --queue-bypass diff --git a/init.d/openwrt/firewall.user.rt b/init.d/openwrt/firewall.user.rt index 270376c..30fabca 100644 --- a/init.d/openwrt/firewall.user.rt +++ b/init.d/openwrt/firewall.user.rt @@ -1,5 +1,2 @@ -# put it to /etc/firewall.user - -# for Rostelecom ISP iptables -t raw -C PREROUTING -p tcp --sport 80 --tcp-flags SYN,ACK SYN,ACK -m set --match-set zapret src -j NFQUEUE --queue-num 200 --queue-bypass || iptables -t raw -I PREROUTING -p tcp --sport 80 --tcp-flags SYN,ACK SYN,ACK -m set --match-set zapret src -j NFQUEUE --queue-num 200 --queue-bypass diff --git a/init.d/openwrt/zapret b/init.d/openwrt/zapret index 7f79dae..3d0cfb5 100755 --- a/init.d/openwrt/zapret +++ b/init.d/openwrt/zapret @@ -2,11 +2,12 @@ # Copyright (C) 2006-2011 OpenWrt.org # CHOOSE ISP HERE. UNCOMMENT ONLY ONE LINE. -#ISP=mns +ISP=mns #ISP=rt -ISP=beeline +#ISP=beeline #ISP=domru #ISP=tiera +#ISP=athome # If ISP is unlisted then uncomment "custom" # Find out what works for your ISP and modify "# PLACEHOLDER" parts of this script @@ -68,6 +69,10 @@ get_daemon() { DAEMON_OPTS="--port=$TPPORT --split-http-req=host --bind-addr=127.0.0.1 --user=$TPWS_USER" DAEMON=$TPWS ;; + athome) + DAEMON_OPTS="--port=$TPPORT --split-http-req=method --bind-addr=127.0.0.1 --user=$TPWS_USER" + DAEMON=$TPWS + ;; custom) # PLACEHOLDER echo !!! NEED ATTENTION !!! diff --git a/init.d/ubuntu12/zapret.conf b/init.d/ubuntu12/zapret.conf index d5e4bce..ed99385 100644 --- a/init.d/ubuntu12/zapret.conf +++ b/init.d/ubuntu12/zapret.conf @@ -4,11 +4,12 @@ start on runlevel [2345] stop on runlevel [!2345] # CHOOSE ISP HERE. UNCOMMENT ONLY ONE LINE. -#env ISP=mns +env ISP=mns #env ISP=rt -env ISP=beeline +#env ISP=beeline #env ISP=domru #env ISP=tiera +#env ISP=athome # If ISP is unlisted then uncomment "custom" # Find out what works for your ISP and modify "# PLACEHOLDER" parts of this script @@ -54,7 +55,7 @@ pre-start script iptables -t raw -C PREROUTING -p udp --sport 53 -m string --hex-string "|2a022698a00000000000000000000110|" --algo bm -j DROP --from 40 --to 300 || iptables -t raw -I PREROUTING -p udp --sport 53 -m string --hex-string "|2a022698a00000000000000000000110|" --algo bm -j DROP --from 40 --to 300 ;; - tiera) + tiera|athome) adduser --disabled-login --no-create-home --system --quiet $TPWS_USER sysctl -w net.ipv4.conf.$SLAVE_ETH.route_localnet=1 iptables -t nat -C PREROUTING -p tcp --dport 80 -i $SLAVE_ETH -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT || @@ -94,6 +95,10 @@ script NFEXE=$TPWS NFARG="--port=$TPPORT --split-http-req=host --user=$TPWS_USER --bind-addr=127.0.0.1" ;; + athome) + NFEXE=$TPWS + NFARG="--port=$TPPORT --split-http-req=method --user=$TPWS_USER --bind-addr=127.0.0.1" + ;; custom) # PLACEHOLDER echo !!! NEED ATTENTION !!! @@ -124,7 +129,7 @@ pre-stop script iptables -t raw -D PREROUTING -p udp --sport 53 -m string --hex-string "|5cfff16e|" --algo bm -j DROP --from 40 --to 300 iptables -t raw -D PREROUTING -p udp --sport 53 -m string --hex-string "|2a022698a00000000000000000000110|" --algo bm -j DROP --from 40 --to 300 ;; - tiera) + tiera|athome) sysctl -w net.ipv4.conf.$SLAVE_ETH.route_localnet=0 iptables -t nat -D PREROUTING -p tcp --dport 80 -i $SLAVE_ETH -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT iptables -t nat -D OUTPUT -p tcp --dport 80 -m owner ! --uid-owner $TPWS_USER -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT diff --git a/readme.txt b/readme.txt index ac95c95..8fdc5ed 100644 --- a/readme.txt +++ b/readme.txt @@ -1,4 +1,4 @@ -zapret v.16 +zapret v.17 Для чего это надо ----------------- @@ -124,22 +124,29 @@ tpws - это transparent proxy. ---------- mns.ru : нужна замена window size на 3. mns.ru убирает заблокированные домены из выдачи своих DNS серверов. меняем на сторонние. + at-home.ru : при дефолтном подключении все блокировалось по IP. после заказа внешнего IP (static NAT) по IP блокируются немногие сайты. закономерность не ясна. - Для обхода DPI подходят настройки mns.ru. в https подменяется сертификат. Если у вас все блокируется по IP, то нет никакого способа, кроме как проксирование порта 80 по аналогии с 443. + Для обхода DPI работает замена windows size на 3, но была замечена нестабильность и подвисания. Лучше всего работает сплит запроса около метода в течение всей http сессии. + В https подменяется сертификат. Если у вас все блокируется по IP, то нет никакого способа, кроме как проксирование порта 80 по аналогии с 443. + beeline (corbina) : нужна замена регистра "Host:" на протяжении всей http сессии. С некоторых пор "host" не работает, но работают другие регистры букв. + dom.ru : нужно проксирование HTTP сессий через tpws с заменой регистра "Host:" и разделение TCP сегментов на хедере "Host:". Ахтунг ! Домру блокирует все поддомены заблоченого домена. IP адреса всевозможных поддоменов узнать невозможно из реестра блокировок, поэтому если вдруг на каком-то сайте вылезает блокировочный баннер, то идите в консоль firefox, вкладка network. Загружайте сайт и смотрите куда идет редирект. Потом вносите домен в zapret-hosts-user.txt. Например, на kinozal.tv имеются 2 запрашиваемых поддомена : s.kinozal.tv и st.kinozal.tv с разными IP адресами. Домру перехватывает DNS запросы и всовывает свой лже-ответ. Это обходится через дроп лже-ответа посредством iptables по наличию IP адреса заглушки или через dnscrypt. + sknt.ru : проверена работа с tpws с параметром "--split-http-req=method". возможно, будет работать nfqueue, пока возможности проверить нет + Ростелеком/tkt : помогает разделение http запроса на сегменты, настройки mns.ru подходят ТКТ был куплен ростелекомом, используется фильтрация ростелекома. Поскольку DPI не отбрасывает входящую сессию, а только всовывает свой пакет, который приходит раньше ответа от настоящего сервера, блокировки так же обходятся без применения "тяжелой артиллерии" следующим правилом : iptables -t raw -I PREROUTING -p tcp --sport 80 -m string --hex-string "|0D0A|Location: http://95.167.13.50" --algo bm -j DROP --from 40 --to 200 + tiera : Требуется сплит http запросов в течение всей сессии. Другие провайдеры