readme: datanoack may pass cgNAT

This commit is contained in:
bol-van 2024-03-05 16:54:39 +03:00
parent 663a2bb2a4
commit d28074b357
2 changed files with 12 additions and 6 deletions

View File

@ -249,8 +249,8 @@ add tcp option **MD5 signature**. All of them have their own disadvantages :
ISP drops them or because there are two same headers. ISP drops them or because there are two same headers.
DPIs may still anaylize packets with one or two hop-by-hop headers. DPIs may still anaylize packets with one or two hop-by-hop headers.
* `datanoack` sends tcp fakes without ACK flag. Servers do not accept this but DPI may accept. * `datanoack` sends tcp fakes without ACK flag. Servers do not accept this but DPI may accept.
This mode breaks NAT and does not work with iptables if masquerade is used, even from the router itself. This mode may break NAT and may not work with iptables if masquerade is used, even from the router itself.
Works with nftables properly. Requires external IP address. Works with nftables properly. Likely requires external IP address (some ISPs pass these packets through their NAT).
* `autottl` tries to automatically guess TTL value that allows DPI to receive fakes and does not allow them to reach the server. * `autottl` tries to automatically guess TTL value that allows DPI to receive fakes and does not allow them to reach the server.
This tech relies on well known TTL values used by OS : 64,128,255. nfqws takes first incoming packet (YES, you need to redirect it too), This tech relies on well known TTL values used by OS : 64,128,255. nfqws takes first incoming packet (YES, you need to redirect it too),
guesses path length and decreases by `delta` value (default 1). If resulting value is outside the range (min,max - default 3,20) guesses path length and decreases by `delta` value (default 1). If resulting value is outside the range (min,max - default 3,20)
@ -570,7 +570,7 @@ tpws is transparent proxy.
--split-pos=<numeric_offset> ; split at specified pos. split-http-req takes precedence over split-pos for http reqs. --split-pos=<numeric_offset> ; split at specified pos. split-http-req takes precedence over split-pos for http reqs.
--split-any-protocol ; split not only http and https --split-any-protocol ; split not only http and https
--disorder ; when splitting simulate sending second fragment first --disorder ; when splitting simulate sending second fragment first
--oob ; when splitting send out of band zero byte --oob[=<char>|0xHEX] ; when splitting send out of band byte. default is HEX 0x00.
--hostcase ; change Host: => host: --hostcase ; change Host: => host:
--hostspell ; exact spelling of "Host" header. must be 4 chars. default is "host" --hostspell ; exact spelling of "Host" header. must be 4 chars. default is "host"
--hostdot ; add "." after Host: name --hostdot ; add "." after Host: name
@ -583,6 +583,8 @@ tpws is transparent proxy.
--unixeol ; replace 0D0A to 0A --unixeol ; replace 0D0A to 0A
--tlsrec=sni ; make 2 TLS records. split at SNI. don't split if SNI is not present. --tlsrec=sni ; make 2 TLS records. split at SNI. don't split if SNI is not present.
--tlsrec-pos=<pos> ; make 2 TLS records. split at specified pos --tlsrec-pos=<pos> ; make 2 TLS records. split at specified pos
--tamper-start=<pos> ; start tampering only from specified outbound stream position. default is 0.
--tamper-cutoff=<pos> ; do not tamper anymore after specified outbound stream position. default is unlimited.
--daemon ; daemonize --daemon ; daemonize
--pidfile=<filename> ; write pid to file --pidfile=<filename> ; write pid to file
--user=<username> ; drop root privs --user=<username> ; drop root privs

View File

@ -325,8 +325,10 @@ fakeknown отличается от fake тем, что применяется
такие пакеты могут фильтроваться и не доходить. Расчет идет на то, что DPI проанализирует пакет с hop-by-hop, такие пакеты могут фильтроваться и не доходить. Расчет идет на то, что DPI проанализирует пакет с hop-by-hop,
но он либо не дойдет до адресата всилу фильтров провайдера, либо будет отброшен сервером, потому что хедера два. но он либо не дойдет до адресата всилу фильтров провайдера, либо будет отброшен сервером, потому что хедера два.
* datanoack высылает фейки со снятым tcp флагом ACK. Сервера такое не принимают, а DPI может принять. * datanoack высылает фейки со снятым tcp флагом ACK. Сервера такое не принимают, а DPI может принять.
Эта техника ломает NAT и не работает с iptables, если используется masquerade, даже с локальной системы Эта техника может ломать NAT и не всегда работает с iptables, если используется masquerade, даже с локальной системы
(почти всегда для ipv4). С nftables работает без ограничений. Требуется внешний IP адрес. (почти всегда для ipv4). С nftables работает без ограничений.
Экспериментально выяснено, что некоторые провайдерские NAT не отбрасывают эти пакеты, потому работает даже
с внутренним провайдерским IP. Но linux NAT оно не пройдет. В общем случае требуется внешний IP адрес.
* autottl. Суть режима в автоматическом определении TTL, чтобы он почти наверняка прошел DPI и немного не дошел до сервера. * autottl. Суть режима в автоматическом определении TTL, чтобы он почти наверняка прошел DPI и немного не дошел до сервера.
Берутся базовые значения TTL 64,128,255, смотрится входящий пакет (да, требуется направить первый входящий пакет на nfqws !). Берутся базовые значения TTL 64,128,255, смотрится входящий пакет (да, требуется направить первый входящий пакет на nfqws !).
Вычисляется длина пути, отнимается delta (1 по умолчанию). Если TTL вне диапазона (min,max - 3,20 по умолчанию), Вычисляется длина пути, отнимается delta (1 по умолчанию). Если TTL вне диапазона (min,max - 3,20 по умолчанию),
@ -646,7 +648,7 @@ tpws - это transparent proxy.
--split-pos=<offset> ; делить все посылы на сегменты в указанной позиции. единственная опция, работающая на не-http. при указании split-http-req он имеет преимущество на http. --split-pos=<offset> ; делить все посылы на сегменты в указанной позиции. единственная опция, работающая на не-http. при указании split-http-req он имеет преимущество на http.
--split-any-protocol ; применять split-pos к любым пакетам. по умолчанию - только к http и TLS ClientHello --split-any-protocol ; применять split-pos к любым пакетам. по умолчанию - только к http и TLS ClientHello
--disorder ; путем манипуляций с сокетом вынуждает отправлять первым второй сегмент разделенного запроса --disorder ; путем манипуляций с сокетом вынуждает отправлять первым второй сегмент разделенного запроса
--oob ; отправить 1 нулевой байт out-of-band data (OOB) в конце первой части сплита --oob[=<char>|0xHEX] ; отправить байт out-of-band data (OOB) в конце первой части сплита
--hostcase ; менять регистр заголовка "Host:". по умолчанию на "host:". --hostcase ; менять регистр заголовка "Host:". по умолчанию на "host:".
--hostspell=HoST ; точное написание заголовка Host (можно "HOST" или "HoSt"). автоматом включает --hostcase --hostspell=HoST ; точное написание заголовка Host (можно "HOST" или "HoSt"). автоматом включает --hostcase
--hostdot ; добавление точки после имени хоста : "Host: kinozal.tv." --hostdot ; добавление точки после имени хоста : "Host: kinozal.tv."
@ -659,6 +661,8 @@ tpws - это transparent proxy.
--unixeol ; конвертировать 0D0A в 0A и использовать везде 0A --unixeol ; конвертировать 0D0A в 0A и использовать везде 0A
--tlsrec=sni ; разбивка TLS ClientHello на 2 TLS records. режем между 1 и 2 символами hostname в SNI. Если SNI нет - отмена. --tlsrec=sni ; разбивка TLS ClientHello на 2 TLS records. режем между 1 и 2 символами hostname в SNI. Если SNI нет - отмена.
--tlsrec-pos=<pos> ; разбивка TLS ClientHello на 2 TLS records. режем на указанной позиции, если длина слишком мелкая - на позиции 1. --tlsrec-pos=<pos> ; разбивка TLS ClientHello на 2 TLS records. режем на указанной позиции, если длина слишком мелкая - на позиции 1.
--tamper-start=<pos> ; начинать дурение только с указанной байтовой позиции исходяшего потока (считается позиция начала принятого блока)
--tamper-cutoff=<pos> ; закончить дурение на указанной байтовой позиции исходящего потока (считается позиция начала принятого блока)
--hostlist=<filename> ; действовать только над доменами, входящими в список из filename. поддомены автоматически учитываются. --hostlist=<filename> ; действовать только над доменами, входящими в список из filename. поддомены автоматически учитываются.
; в файле должен быть хост на каждой строке. ; в файле должен быть хост на каждой строке.
; список читается 1 раз при старте и хранится в памяти в виде иерархической структуры для быстрого поиска. ; список читается 1 раз при старте и хранится в памяти в виде иерархической структуры для быстрого поиска.