bol-van / zapret

DPI bypass multi platform
5.87k stars 512 forks source link

Изменение параметра --mss на лету #346

Closed ivdeveloper86 closed 1 week ago

ivdeveloper86 commented 1 week ago

Добрый день!

Уже писал по поводу телека LG, который не хочет работать с обходом блокировки (лучи ненависти в его сторону). На роутере ASUS удалось завести только способ tpws через редирект на порт.

Единственный вариант конфига при котором телек стабильно и всегда загружает интерфейс Ютуба и запускает ролики, но с тормозами: ARGS="--daemon --bind-addr 192.168.1.1 --port 999 --split-pos=2 --mss=88 --pidfile $PIDFILE" Все остальные параметры вообще никак не влияют на ситуацию с телеком, перебрал много разных вариантов.

Суть в чем, если после загрузки интерфейса Ютуба ручками изменить параметр --mss=500, то ролики начинают отлично работать в 4К без тормозов. Если же с такими настройками телек выключить и через часик снова попробовать запустить Ютуб, он покажет серый экран и интерфейс не загрузится, т.е. опять нужно прописывать --mss=88.

Вопрос, можно ли доработать Zapret для возможности увеличивать значение --mss на лету по каким-то параметрам (или может быть вообще отключать) ?

bol-van commented 1 week ago

слишком частно и костыльно не вариант

bol-van commented 1 week ago

единственная задача mss - фрагментация ответа сервера у nfqws для этого есть более эффективное средство wssize лучше разберитесь почему с nfqws не срослось

ivdeveloper86 commented 1 week ago

по дебагу с nfqws вот такая картина получается

Sep  2 10:34:22 nfqws[3356]: Loading hostlist /tmp/mnt/DPI/zapret-master/hostlist.txt
Sep  2 10:34:22 nfqws[3356]: loading plain text list
Sep  2 10:34:22 kernel: DROP IN=eth0 OUT= MAC=f0:2f:74:2d:88:c0:68:ab:09:60:69:44:08:00 SRC=64.233.164.198 DST=100.120.63.92 LEN=96 TOS=0x00 PREC=0x00 TTL=123 ID=40993 PROTO=TCP SPT=443 DPT=51589 SEQ=1520047538 ACK=4273082780 WINDOW=489 RES=0x00 ACK PSH URGP=0 MARK=0x8000000 
Sep  2 10:34:22 nfqws[3356]: Loaded 148632 hosts from /tmp/mnt/DPI/zapret-master/hostlist.txt
Sep  2 10:34:22 nfqws[3357]: initializing conntrack with timeouts tcp=60:300:60 udp=60
Sep  2 10:34:22 nfqws[3357]: opening library handle
Sep  2 10:34:22 nfqws[3357]: unbinding existing nf_queue handler for AF_INET (if any)
Sep  2 10:34:22 nfqws[3357]: binding nfnetlink_queue as nf_queue handler for AF_INET
Sep  2 10:34:22 nfqws[3357]: binding this socket to queue '200'
Sep  2 10:34:22 nfqws[3357]: setting copy_packet mode
Sep  2 10:34:22 nfqws[3357]: initializing raw sockets bind-fix4=0 bind-fix6=0
Sep  2 10:34:22 nfqws[3357]: set_socket_buffers fd=5 rcvbuf=2048 sndbuf=32768
Sep  2 10:34:22 nfqws[3357]: fd=5 SO_RCVBUF=4096
Sep  2 10:34:22 nfqws[3357]: fd=5 SO_SNDBUF=65536
Sep  2 10:34:22 nfqws[3357]: set_socket_buffers fd=6 rcvbuf=2048 sndbuf=32768
Sep  2 10:34:22 nfqws[3357]: fd=6 SO_RCVBUF=4096
Sep  2 10:34:22 nfqws[3357]: fd=6 SO_SNDBUF=65536
Sep  2 10:34:22 nfqws[3357]: seccomp: Invalid argument
Sep  2 10:34:22 nfqws[3357]: seccomp: this can be safely ignored if kernel does not support seccomp
Sep  2 10:34:22 nfqws[3357]: Running as UID=2147483647 GID=2147483647
Sep  2 10:34:22 nfqws[3357]: set_socket_buffers fd=4 rcvbuf=65536 sndbuf=32768
Sep  2 10:34:22 nfqws[3357]: fd=4 SO_RCVBUF=131072
Sep  2 10:34:22 nfqws[3357]: fd=4 SO_SNDBUF=65536
Sep  2 10:34:34 kernel: DROP IN=eth0 OUT= MAC=f0:2f:74:2d:88:c0:68:ab:09:60:69:44:08:00 SRC=91.227.28.205 DST=100.120.63.92 LEN=52 TOS=0x00 PREC=0x00 TTL=117 ID=40316 DF PROTO=TCP SPT=52435 DPT=51537 SEQ=2283560083 ACK=0 WINDOW=64240 RES=0x00 SYN URGP=0 OPT (020405B40103030801010402) MARK=0x8000000 
Sep  2 10:34:35 kernel: DROP IN=eth0 OUT= MAC=f0:2f:74:2d:88:c0:68:ab:09:60:69:44:08:00 SRC=91.227.28.205 DST=100.120.63.92 LEN=52 TOS=0x00 PREC=0x00 TTL=117 ID=40317 DF PROTO=TCP SPT=52435 DPT=51537 SEQ=2283560083 ACK=0 WINDOW=64240 RES=0x00 SYN URGP=0 OPT (020405B40103030801010402) MARK=0x8000000 
Sep  2 10:34:37 kernel: DROP IN=eth0 OUT= MAC=f0:2f:74:2d:88:c0:68:ab:09:60:69:44:08:00 SRC=91.227.28.205 DST=100.120.63.92 LEN=52 TOS=0x00 PREC=0x00 TTL=117 ID=40318 DF PROTO=TCP SPT=52435 DPT=51537 SEQ=2283560083 ACK=0 WINDOW=64240 RES=0x00 SYN URGP=0 OPT (020405B40103030801010402) MARK=0x8000000 
Sep  2 10:34:41 kernel: DROP IN=eth0 OUT= MAC=f0:2f:74:2d:88:c0:68:ab:09:60:69:44:08:00 SRC=91.227.28.205 DST=100.120.63.92 LEN=52 TOS=0x00 PREC=0x00 TTL=117 ID=40320 DF PROTO=TCP SPT=52435 DPT=51537 SEQ=2283560083 ACK=0 WINDOW=64240 RES=0x00 SYN URGP=0 OPT (020405B40103030801010402) MARK=0x8000000 
Sep  2 10:34:48 kernel: DROP IN=eth0 OUT= MAC=f0:2f:74:2d:88:c0:68:ab:09:60:69:44:08:00 SRC=31.43.223.209 DST=100.120.63.92 LEN=52 TOS=0x00 PREC=0x00 TTL=54 ID=2891 DF PROTO=TCP SPT=49687 DPT=51537 SEQ=1015696176 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402) MARK=0x8000000 
Sep  2 10:34:49 kernel: DROP IN=eth0 OUT= MAC=f0:2f:74:2d:88:c0:68:ab:09:60:69:44:08:00 SRC=91.227.28.205 DST=100.120.63.92 LEN=52 TOS=0x00 PREC=0x00 TTL=117 ID=40322 DF PROTO=TCP SPT=52435 DPT=51537 SEQ=2283560083 ACK=0 WINDOW=64240 RES=0x00 SYN URGP=0 OPT (020405B40103030801010402) MARK=0x8000000 
Sep  2 10:34:51 kernel: DROP IN=eth0 OUT= MAC=f0:2f:74:2d:88:c0:68:ab:09:60:69:44:08:00 SRC=31.43.223.209 DST=100.120.63.92 LEN=52 TOS=0x00 PREC=0x00 TTL=54 ID=2929 DF PROTO=TCP SPT=49687 DPT=51537 SEQ=1015696176 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402) MARK=0x8000000 
Sep  2 10:34:57 kernel: DROP IN=eth0 OUT= MAC=f0:2f:74:2d:88:c0:68:ab:09:60:69:44:08:00 SRC=31.43.223.209 DST=100.120.63.92 LEN=48 TOS=0x00 PREC=0x00 TTL=54 ID=3077 DF PROTO=TCP SPT=49687 DPT=51537 SEQ=1015696176 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B401010402) MARK=0x8000000 
Sep  2 10:35:04 kernel: DROP IN=eth0 OUT= MAC=f0:2f:74:2d:88:c0:68:ab:09:60:69:44:08:00 SRC=172.67.146.99 DST=100.120.63.92 LEN=79 TOS=0x00 PREC=0x00 TTL=55 ID=49859 DF PROTO=TCP SPT=443 DPT=50950 SEQ=968847493 ACK=2536572685 WINDOW=10 RES=0x00 ACK PSH URGP=0 MARK=0x8000000 
Sep  2 10:35:35 kernel: DROP IN=eth0 OUT= MAC=f0:2f:74:2d:88:c0:68:ab:09:60:69:44:08:00 SRC=95.28.142.51 DST=100.120.63.92 LEN=52 TOS=0x00 PREC=0x00 TTL=121 ID=2537 DF PROTO=TCP SPT=49542 DPT=51537 SEQ=3590454229 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402) MARK=0x8000000 
Sep  2 10:35:36 kernel: DROP IN=eth0 OUT= MAC=f0:2f:74:2d:88:c0:68:ab:09:60:69:44:08:00 SRC=157.240.205.60 DST=100.120.63.92 LEN=76 TOS=0x00 PREC=0x00 TTL=52 ID=34982 DF PROTO=TCP SPT=443 DPT=37292 SEQ=2470929914 ACK=2299806770 WINDOW=265 RES=0x00 ACK PSH URGP=0 OPT (0101080A9BEE0451E24ADF9E) MARK=0x8000000 
Sep  2 10:35:38 kernel: DROP IN=eth0 OUT= MAC=f0:2f:74:2d:88:c0:68:ab:09:60:69:44:08:00 SRC=95.28.142.51 DST=100.120.63.92 LEN=52 TOS=0x00 PREC=0x00 TTL=121 ID=3321 DF PROTO=TCP SPT=49542 DPT=51537 SEQ=3590454229 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402) MARK=0x8000000 
Sep  2 10:35:44 kernel: DROP IN=eth0 OUT= MAC=f0:2f:74:2d:88:c0:68:ab:09:60:69:44:08:00 SRC=95.28.142.51 DST=100.120.63.92 LEN=48 TOS=0x00 PREC=0x00 TTL=121 ID=4002 DF PROTO=TCP SPT=49542 DPT=51537 SEQ=3590454229 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B401010402) MARK=0x8000000 
Sep  2 10:36:34 kernel: DROP IN=eth0 OUT= MAC=f0:2f:74:2d:88:c0:68:ab:09:60:69:44:08:00 SRC=31.43.223.209 DST=100.120.63.92 LEN=52 TOS=0x00 PREC=0x00 TTL=54 ID=10231 DF PROTO=TCP SPT=50656 DPT=51537 SEQ=490343829 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402) MARK=0x8000000 
Sep  2 10:36:37 kernel: DROP IN=eth0 OUT= MAC=f0:2f:74:2d:88:c0:68:ab:09:60:69:44:08:00 SRC=31.43.223.209 DST=100.120.63.92 LEN=52 TOS=0x00 PREC=0x00 TTL=54 ID=10377 DF PROTO=TCP SPT=50656 DPT=51537 SEQ=490343829 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402) MARK=0x8000000 

Вот полный скрипт

#!/bin/sh

SCRIPT=/tmp/mnt/DPI/zapret-master/nfq/nfqws
PIDFILE=/var/run/nfqwsTCP.pid
HOSTLISTFILE=/tmp/mnt/DPI/zapret-master/hostlist.txt
DVTWS="--debug=syslog --daemon --qnum=200 --dpi-desync=split2 --dpi-desync-split-pos=2 --pidfile $PIDFILE --hostlist $HOSTLISTFILE"

start() {
  if [ -f $PIDFILE ] && kill -0 $(cat $PIDFILE); then
    echo 'Service NFQWS is already running' >&2
    return 1
  fi
  $SCRIPT $DVTWS
  iptables -t mangle -I POSTROUTING -o br0 -p tcp --match multiport --dport 80,443 -j NFQUEUE --queue-num 200 --queue-bypass
  echo 'Started NFQWS service'
}

stop() {
  if [ ! -f "$PIDFILE" ] || ! kill -0 $(cat "$PIDFILE"); then
    echo 'Service NFQWS is not running' >&2
    return 1
  fi
  echo 'Stopping NFQWS service...'
  kill -15 $(cat "$PIDFILE") && rm -f "$PIDFILE"
  iptables -t mangle -D POSTROUTING -o br0 -p tcp --match multiport --dport 80,443 -j NFQUEUE --queue-num 200 --queue-bypass
}

status() {
  if [ -f $PIDFILE ] && kill -0 $(cat $PIDFILE); then
    echo 'Service NFQWS is running'
  else
    echo 'Service NFQWS is stopped'
  fi
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  status)
    status
    ;;
  restart)
    stop
    start
    ;;
  *)
    echo "Usage: $0 {start|stop|restart|status}"
esac

Еще пробовал с таким конфигом, логи были аналогичные

DVTWS="--debug=syslog --daemon --qnum=200 --dpi-desync=fake,split2 --dpi-desync-autottl --dpi-desync-fooling=md5sig --pidfile $PIDFILE --hostlist $HOSTLISTFILE"

bol-van commented 1 week ago

есть сомнения, что br0 смотрит в инет скорее это lan. тогда написана глупость. ловятся входящие в локалку пакеты с портом назначения 80 443 потому nfqws не ловит ничего

для аутоттл нужен перехват входящего syn,ack

ivdeveloper86 commented 1 week ago

Доброго вечера!

br0 это именно WAN порт насколько я понимаю, вот список интерфейсов 01

В любом случае скрипт tpws у меня с такими настройками работает, думаю дело не в br0

#!/bin/sh

SCRIPT=/tmp/mnt/DPI/zapret-master/tpws/tpws
PIDFILE=/var/run/tpws.pid
HOSTLISTFILE=/tmp/mnt/DPI/zapret-master/hostlist.txt
ARGS="--daemon --bind-addr 192.168.1.1 --port 998 --split-pos=2 --pidfile $PIDFILE --hostlist $HOSTLISTFILE"

start() {
  if [ -f $PIDFILE ] && kill -0 $(cat $PIDFILE); then
    echo 'Service TPWS is already running' >&2
    return 1
  fi
  $SCRIPT $ARGS
  iptables -t nat -A PREROUTING -i br0 -p tcp --match multiport --dport 80,443 -j REDIRECT --to-port 998
  echo 'Started TPWS service'
}

stop() {
  if [ ! -f "$PIDFILE" ] || ! kill -0 $(cat "$PIDFILE"); then
    echo 'Service TPWS is not running' >&2
    return 1
  fi
  echo 'Stopping TPWS service...'
  kill -15 $(cat "$PIDFILE") && rm -f "$PIDFILE"
  iptables -t nat -D PREROUTING -i br0 -p tcp --match multiport --dport 80,443 -j REDIRECT --to-port 998
}

status() {
  if [ -f $PIDFILE ] && kill -0 $(cat $PIDFILE); then
    echo 'Service TPWS is running'
  else
    echo 'Service TPWS is stopped'
  fi
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  status)
    status
    ;;
  restart)
    stop
    start
    ;;
  *)
    echo "Usage: $0 {start|stop|restart|status}"
esac
ivdeveloper86 commented 1 week ago

может надо не так: iptables -t mangle -D POSTROUTING -o br0

а так? iptables -t nat -A PREROUTING -i br0

bol-van commented 1 week ago

nfqws работает на wan интерфейсе, а не lan таблица nat неуместна если роутер работает как мост там отдельная история

bol-van commented 1 week ago

команда ip link show не сможет определить какой интерфейс имеет какую роль это зависит от настроек обычно легко опоеделить по ip адресу мне сложно представить сценарий, где мост смотрел бы в инет если это не точка доступа в локалке

ivdeveloper86 commented 1 week ago

Маэстро был как обычно прав, WAN интерфейс на роутере оказался eth0 (проверил простым переподключением патч-корда провайдера), теперь nfqws работает как часы!