Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PBR conflict with youtubeUnblock #59

Closed
PulseDiver opened this issue Aug 12, 2024 · 75 comments
Closed

PBR conflict with youtubeUnblock #59

PulseDiver opened this issue Aug 12, 2024 · 75 comments

Comments

@PulseDiver
Copy link

Версия v0.3.0 - youtubeUnblock_918ccc82-1_aarch64_generic.ipk
NanoPi R5S, OpenWrt 23.05.2
В качестве фаирвола nft.

Поставил пакет, доставил зависимости kmod-nft-queue и kmod-nf-conntrack.
Запустил, по логам вроде работает. Ютуб летает.

Mon Aug 12 14:21:14 2024 daemon.info youtubeUnblock[17794]: youtubeUnblock
Mon Aug 12 14:21:14 2024 daemon.info youtubeUnblock[17794]: Bypasses deep packet inspection systems that relies on SNI
Mon Aug 12 14:21:14 2024 daemon.info youtubeUnblock[17794]:
Mon Aug 12 14:21:14 2024 daemon.info youtubeUnblock[17794]: Using TCP segmentation
Mon Aug 12 14:21:14 2024 daemon.info youtubeUnblock[17794]: Fake SNI will be sent before each target client hello
Mon Aug 12 14:21:14 2024 daemon.info youtubeUnblock[17794]: Fragmentation Client Hello will be reversed
Mon Aug 12 14:21:14 2024 daemon.info youtubeUnblock[17794]: Ack-Seq faking strategy will be used
Mon Aug 12 14:21:14 2024 daemon.info youtubeUnblock[17794]: GSO is enabled
Mon Aug 12 14:21:14 2024 daemon.info youtubeUnblock[17794]: Queue 537 started
Mon Aug 12 14:21:14 2024 daemon.info youtubeUnblock[17794]: Target SNI detected: play.google.com
Mon Aug 12 14:21:14 2024 daemon.info youtubeUnblock[17794]: Packet split in portion 2 815
Mon Aug 12 14:21:14 2024 daemon.info youtubeUnblock[17794]: Packet split in portion 466 349
Mon Aug 12 14:21:16 2024 daemon.info youtubeUnblock[17794]: Target SNI detected: rr2---sn-qp5avbg0-3bqz.googlevideo.com
Mon Aug 12 14:21:16 2024 daemon.info youtubeUnblock[17794]: Packet split in portion 2 524
Mon Aug 12 14:21:16 2024 daemon.info youtubeUnblock[17794]: Packet split in portion 415 109
Mon Aug 12 14:21:16 2024 daemon.info youtubeUnblock[17794]: Target SNI detected: rr2---sn-qp5avbg0-3bqz.googlevideo.com
Mon Aug 12 14:21:16 2024 daemon.info youtubeUnblock[17794]: Packet split in portion 2 556
Mon Aug 12 14:21:16 2024 daemon.info youtubeUnblock[17794]: Packet split in portion 497 59
Mon Aug 12 14:21:16 2024 daemon.info youtubeUnblock[17794]: Target SNI detected: jnn-pa.googleapis.com
Mon Aug 12 14:21:16 2024 daemon.info youtubeUnblock[17794]: Packet split in portion 2 1063
Mon Aug 12 14:21:16 2024 daemon.info youtubeUnblock[17794]: Packet split in portion 580 483
Mon Aug 12 14:21:17 2024 daemon.info youtubeUnblock[17794]: Target SNI detected: yt3.ggpht.com
Mon Aug 12 14:21:17 2024 daemon.info youtubeUnblock[17794]: Packet split in portion 2 983
Mon Aug 12 14:21:17 2024 daemon.info youtubeUnblock[17794]: Packet split in portion 229 754
Mon Aug 12 14:21:17 2024 daemon.info youtubeUnblock[17794]: Target SNI detected: rr3---sn-q4fl6nd7.googlevideo.com

Тестирую - скорость 0, на зеркале - 100 мбит/с.

root@FriendlyWrt:~# curl -o/dev/null -k --connect-to ::google.com -k -L -H Host:\ mirror.gcr.io https://test.googlevideo.com/v2/cimg/android/blobs/sha256:6fd8bdac3da660bde7bd0b6f2b6a46e1b686afb74b9a4614def32532b73f5eaa
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:01:01 --:--:--     0^C
root@FriendlyWrt:~# 
root@FriendlyWrt:~# 
root@FriendlyWrt:~# curl -o/dev/null -k --connect-to ::google.com -k -L -H Host:\ mirror.gcr.io https://mirror.gcr.io/v2/cimg/android/blobs/sha256:6fd8bdac3da660bde7bd0b6f2b6a46e1b686afb74b9a4614def32532b73f5eaa
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1144  100  1144    0     0   2666      0 --:--:-- --:--:-- --:--:--  2910
 25  664M   25  168M    0     0  9651k      0  0:01:10  0:00:17  0:00:53 10.1M^C
root@FriendlyWrt:~# 

Все бы хорошо, но!
Ютуб бегает шустро, а вот другие сайты отвалиливаются например тот же mail.ru долгая загрузка, otvet.mail.ru - вообще пишет нет инета. Также по wifi отвалились приложения типа Госуслуги - пишет нет сети. Github крутит ромашку.
До этого ставил GoodbyeDPI - все было ок и с ютубом, и с др сайтами.

@Waujito
Copy link
Owner

Waujito commented Aug 12, 2024

youtubeUnblock не может влиять на другие сайты, замедлять тем более.
Скиньте nft list chains inet fw4

@Waujito
Copy link
Owner

Waujito commented Aug 12, 2024

Также проверьте скорость с --sni-domains=all

@PulseDiver
Copy link
Author

youtubeUnblock не может влиять на другие сайты, замедлять тем более. Скиньте nft list chains inet fw4

root@FriendlyWrt:~# nft list chains inet fw4
Error: syntax error, unexpected string, expecting end of file or newline or semicolon
list chains inet fw4
                 ^^^
root@FriendlyWrt:~# 

@Waujito
Copy link
Owner

Waujito commented Aug 12, 2024

nft list chains inet Всегда забываю)

@PulseDiver
Copy link
Author

root@FriendlyWrt:~# nft list chains inet
table inet fw4 {
	chain input {
		type filter hook input priority filter; policy accept;
	}
	chain forward {
		type filter hook forward priority filter; policy accept;
	}
	chain output {
		type filter hook output priority filter; policy accept;
	}
	chain prerouting {
		type filter hook prerouting priority filter; policy accept;
	}
	chain handle_reject {
	}
	chain syn_flood {
	}
	chain input_lan {
	}
	chain output_lan {
	}
	chain forward_lan {
	}
	chain helper_lan {
	}
	chain accept_from_lan {
	}
	chain accept_to_lan {
	}
	chain input_wan {
	}
	chain output_wan {
	}
	chain forward_wan {
	}
	chain accept_to_wan {
	}
	chain reject_from_wan {
	}
	chain reject_to_wan {
	}
	chain input_tun {
	}
	chain output_tun {
	}
	chain forward_tun {
	}
	chain accept_from_tun {
	}
	chain accept_to_tun {
	}
	chain dstnat {
		type nat hook prerouting priority dstnat; policy accept;
	}
	chain srcnat {
		type nat hook postrouting priority srcnat; policy accept;
	}
	chain dstnat_lan {
	}
	chain srcnat_lan {
	}
	chain dstnat_wan {
	}
	chain srcnat_wan {
	}
	chain srcnat_tun {
	}
	chain raw_prerouting {
		type filter hook prerouting priority raw; policy accept;
	}
	chain raw_output {
		type filter hook output priority raw; policy accept;
	}
	chain mangle_prerouting {
		type filter hook prerouting priority mangle; policy accept;
	}
	chain mangle_postrouting {
		type filter hook postrouting priority mangle; policy accept;
	}
	chain mangle_input {
		type filter hook input priority mangle; policy accept;
	}
	chain mangle_output {
		type route hook output priority mangle; policy accept;
	}
	chain mangle_forward {
		type filter hook forward priority mangle; policy accept;
	}
	chain upnp_forward {
	}
	chain upnp_prerouting {
	}
	chain upnp_postrouting {
	}
	chain pbr_forward {
	}
	chain pbr_input {
	}
	chain pbr_output {
	}
	chain pbr_prerouting {
	}
	chain pbr_postrouting {
	}
	chain pbr_mark_0x010000 {
	}
	chain pbr_mark_0x020000 {
	}
	chain pbr_mark_0x030000 {
	}
	chain pbr_mark_0x040000 {
	}
	chain pbr_mark_0x050000 {
	}
}
table inet nft-qos-monitor {
	chain upload {
		type filter hook postrouting priority filter; policy accept;
	}
	chain download {
		type filter hook prerouting priority filter; policy accept;
	}
}
root@FriendlyWrt:~# 

@Waujito
Copy link
Owner

Waujito commented Aug 12, 2024

Так у вас даже правила нет. youtubeUnblock вообще не будет так работать... Как правила фаервола добавляли? Попробуйте /etc/init.d/firewall reload и снова отправьте вывод команды

@PulseDiver
Copy link
Author

PulseDiver commented Aug 12, 2024

Старнно, но тоже самое после рестарта /etc/init.d/firewall reload
Везде пусто

@Waujito
Copy link
Owner

Waujito commented Aug 12, 2024

/etc/init.d/firewall reload ничего не вывел?
проверьте файл в /usr/share/nftables.d/ruleset-post/537-youtubeUnblock.nft

@PulseDiver
Copy link
Author

PulseDiver commented Aug 12, 2024

/etc/init.d/firewall reload ничего не вывел? проверьте файл в /usr/share/nftables.d/ruleset-post/537-youtubeUnblock.nft

вывел

root@FriendlyWrt:~# /etc/init.d/firewall reload
Section @zone[0] (lan) fullcone in defaults not enabled, ignore zone fullcone settings
Section @zone[1] (wan) fullcone in defaults not enabled, ignore zone fullcone settings
Section @zone[2] (tun) fullcone in defaults not enabled, ignore zone fullcone settings
Section @rule[9] (Reject-IPv6) is disabled, ignoring section
Automatically including '/usr/share/nftables.d/ruleset-post/537-youtubeUnblock.nft'
Automatically including '/usr/share/nftables.d/table-post/20-miniupnpd.nft'
Automatically including '/usr/share/nftables.d/table-post/30-pbr.nft'
Automatically including '/usr/share/nftables.d/chain-post/dstnat/20-miniupnpd.nft'
Automatically including '/usr/share/nftables.d/chain-post/forward/20-miniupnpd.nft'
Automatically including '/usr/share/nftables.d/chain-post/mangle_forward/30-pbr.nft'
Automatically including '/usr/share/nftables.d/chain-post/mangle_input/30-pbr.nft'
Automatically including '/usr/share/nftables.d/chain-post/mangle_output/30-pbr.nft'
Automatically including '/usr/share/nftables.d/chain-post/mangle_postrouting/30-pbr.nft'
Automatically including '/usr/share/nftables.d/chain-post/mangle_prerouting/30-pbr.nft'
Automatically including '/usr/share/nftables.d/chain-post/srcnat/20-miniupnpd.nft'
Activating traffic killswitch [✓]
.......
Deactivating traffic killswitch [✓]
pbr 1.1.1-7 monitoring interfaces: wan WG_PL WG_RU WG_SE VLESS_01 
root@FriendlyWrt:~# 

вот нашел похожее в nft list ruleset

	chain mangle_forward {
		....
		tcp dport 443 ct original packets < 20 counter packets 1387 bytes 160157 queue flags bypass to 537
		.....

файл есть /usr/share/nftables.d/ruleset-post/537-youtubeUnblock.nft

@Waujito
Copy link
Owner

Waujito commented Aug 12, 2024

У вас pbr стоит? Скиньте cat /usr/share/nftables.d/chain-post/mangle_forward/30-pbr.nft

@PulseDiver
Copy link
Author

У вас pbr стоит? Скиньте cat /usr/share/nftables.d/chain-post/mangle_forward/30-pbr.nft

да, стоит

root@FriendlyWrt:~# cat /usr/share/nftables.d/chain-post/mangle_forward/30-pbr.nft
jump pbr_forward comment "Jump into pbr forward chain";
root@FriendlyWrt:~# 

@PulseDiver
Copy link
Author

PulseDiver commented Aug 12, 2024

вообще, если интересно, какие метки используются в PBR у меня:

	chain pbr_prerouting {
		ip daddr @pbr_WG_SE_4_dst_ip_cfg086ff5 goto pbr_mark_0x040000 comment "vm1"
		.......
		ip daddr @pbr_VLESS_01_4_dst_ip_cfg1f6ff5 goto pbr_mark_0x050000 comment "ifconfig.me"
		........
		ip saddr @pbr_wan_4_src_ip_cfg276ff5 goto pbr_mark_0x010000 comment "all_traffic"
	}

мб в них дело?
интерфейсы WG_SE, VLESS_01 - это подняты vpn на внешку и wan - прямое от провайдера

@Waujito
Copy link
Owner

Waujito commented Aug 12, 2024

Да, скорее всего. youtubeUnblock ставит метку (1 << 15) для пакетов, которые он отправляет, чтобы не захватывать уже отправленные. Метку можно проверять по маске, в nft это будет так выглядеть mark and 0x8000 == 0x8000

@PulseDiver
Copy link
Author

Посоветуете, как это можно настроить?

@Waujito
Copy link
Owner

Waujito commented Aug 12, 2024

Ну дайте полный ruleset. Не работал с pbr вообще, но может смогу помочь. nftables поддерживает побитовые операции с метками, не знаю что там с pbr.

@PulseDiver
Copy link
Author

root@FriendlyWrt:~# nft list ruleset
table inet fw4 {
	ct helper amanda {
		type "amanda" protocol udp
		l3proto inet
	}

	ct helper ftp {
		type "ftp" protocol tcp
		l3proto inet
	}

	ct helper RAS {
		type "RAS" protocol udp
		l3proto inet
	}

	ct helper Q.931 {
		type "Q.931" protocol tcp
		l3proto inet
	}

	ct helper irc {
		type "irc" protocol tcp
		l3proto ip
	}

	ct helper pptp {
		type "pptp" protocol tcp
		l3proto ip
	}

	ct helper sip {
		type "sip" protocol udp
		l3proto inet
	}

	ct helper snmp {
		type "snmp" protocol udp
		l3proto ip
	}

	ct helper tftp {
		type "tftp" protocol udp
		l3proto inet
	}

	set pbr_WG_SE_4_dst_ip_cfg1c6ff5 {
		type ipv4_addr
		flags interval
		counter
		auto-merge
		comment "hub.docker.com"
	}

	set pbr_VLESS_01_4_dst_ip_cfg1f6ff5 {
		type ipv4_addr
		flags interval
		counter
		auto-merge
		comment "ifconfig.me"
	}

	set pbr_wan_4_src_ip_cfg256ff5 {
		type ipv4_addr
		flags interval
		counter
		auto-merge
		comment "vm4"
		elements = { 192.168.100.74 counter packets 0 bytes 0 }
	}

	set pbr_wan_4_src_ip_cfg276ff5 {
		type ipv4_addr
		flags interval
		counter
		auto-merge
		comment "all_traffic"
		elements = { 192.168.100.0/24 counter packets 48 bytes 4050 }
	}

	flowtable ft {
		hook ingress priority filter
		devices = { WG_SE, eth1, eth2, pppoe-wan, tun1 }
		counter
	}

	chain input {
		type filter hook input priority filter; policy accept;
		iifname "lo" accept comment "!fw4: Accept traffic from loopback"
		ct state established,related accept comment "!fw4: Allow inbound established and related flows"
		tcp flags syn / fin,syn,rst,ack jump syn_flood comment "!fw4: Rate limit TCP syn packets"
		iifname "br-lan" jump input_lan comment "!fw4: Handle lan IPv4/IPv6 input traffic"
		iifname { "tun1", "WG_SE", "pppoe-wan" } jump input_wan comment "!fw4: Handle wan IPv4/IPv6 input traffic"
		meta nfproto ipv4 iifname "tun1" jump input_tun comment "!fw4: Handle tun IPv4 input traffic"
	}

	chain forward {
		type filter hook forward priority filter; policy accept;
		meta l4proto { tcp, udp } flow add @ft
		ct state established,related accept comment "!fw4: Allow forwarded established and related flows"
		iifname "br-lan" jump forward_lan comment "!fw4: Handle lan IPv4/IPv6 forward traffic"
		iifname { "tun1", "WG_SE", "pppoe-wan" } jump forward_wan comment "!fw4: Handle wan IPv4/IPv6 forward traffic"
		meta nfproto ipv4 iifname "tun1" jump forward_tun comment "!fw4: Handle tun IPv4 forward traffic"
		jump upnp_forward comment "Hook into miniupnpd forwarding chain"
	}

	chain output {
		type filter hook output priority filter; policy accept;
		meta mark & 0x00008000 == 0x00008000 counter packets 0 bytes 0 accept
		oifname "lo" accept comment "!fw4: Accept traffic towards loopback"
		ct state established,related accept comment "!fw4: Allow outbound established and related flows"
		oifname "br-lan" jump output_lan comment "!fw4: Handle lan IPv4/IPv6 output traffic"
		oifname { "tun1", "WG_SE", "pppoe-wan" } jump output_wan comment "!fw4: Handle wan IPv4/IPv6 output traffic"
		meta nfproto ipv4 oifname "tun1" jump output_tun comment "!fw4: Handle tun IPv4 output traffic"
	}

	chain prerouting {
		type filter hook prerouting priority filter; policy accept;
		iifname "br-lan" jump helper_lan comment "!fw4: Handle lan IPv4/IPv6 helper assignment"
	}

	chain handle_reject {
		meta l4proto tcp reject with tcp reset comment "!fw4: Reject TCP traffic"
		reject comment "!fw4: Reject any other traffic"
	}

	chain syn_flood {
		limit rate 25/second burst 50 packets return comment "!fw4: Accept SYN packets below rate-limit"
		drop comment "!fw4: Drop excess packets"
	}

	chain input_lan {
		ct status dnat accept comment "!fw4: Accept port redirections"
		jump accept_from_lan
	}

	chain output_lan {
		jump accept_to_lan
	}

	chain forward_lan {
		tcp dport 853 counter packets 0 bytes 0 jump handle_reject comment "!fw4: ubus:https-dns-proxy[instance1] rule 1"
		udp dport 853 counter packets 0 bytes 0 jump handle_reject comment "!fw4: ubus:https-dns-proxy[instance1] rule 1"
		jump accept_to_wan comment "!fw4: Accept lan to wan forwarding"
		meta nfproto ipv4 jump accept_to_tun comment "!fw4: lan-tun"
		ct status dnat accept comment "!fw4: Accept port forwards"
		jump accept_to_lan
	}

	chain helper_lan {
		udp dport 10080 ct helper set "amanda" comment "!fw4: Amanda backup and archiving proto"
		tcp dport 21 ct helper set "ftp" comment "!fw4: FTP passive connection tracking"
		udp dport 1719 ct helper set "RAS" comment "!fw4: RAS proto tracking"
		tcp dport 1720 ct helper set "Q.931" comment "!fw4: Q.931 proto tracking"
		meta nfproto ipv4 tcp dport 6667 ct helper set "irc" comment "!fw4: IRC DCC connection tracking"
		meta nfproto ipv4 tcp dport 1723 ct helper set "pptp" comment "!fw4: PPTP VPN connection tracking"
		udp dport 5060 ct helper set "sip" comment "!fw4: SIP VoIP connection tracking"
		meta nfproto ipv4 udp dport 161 ct helper set "snmp" comment "!fw4: SNMP monitoring connection tracking"
		udp dport 69 ct helper set "tftp" comment "!fw4: TFTP connection tracking"
	}

	chain accept_from_lan {
		iifname "br-lan" counter packets 16 bytes 4944 accept comment "!fw4: accept lan IPv4/IPv6 traffic"
	}

	chain accept_to_lan {
		oifname "br-lan" counter packets 16 bytes 4920 accept comment "!fw4: accept lan IPv4/IPv6 traffic"
	}

	chain input_wan {
		meta nfproto ipv4 udp dport 68 counter packets 0 bytes 0 accept comment "!fw4: Allow-DHCP-Renew"
		icmp type echo-request counter packets 0 bytes 0 accept comment "!fw4: Allow-Ping"
		meta nfproto ipv4 meta l4proto igmp counter packets 0 bytes 0 accept comment "!fw4: Allow-IGMP"
		meta nfproto ipv6 udp dport 546 counter packets 0 bytes 0 accept comment "!fw4: Allow-DHCPv6"
		ip6 saddr fe80::/10 icmpv6 type . icmpv6 code { mld-listener-query . no-route, mld-listener-report . no-route, mld-listener-done . no-route, mld2-listener-report . no-route } counter packets 0 bytes 0 accept comment "!fw4: Allow-MLD"
		icmpv6 type { destination-unreachable, time-exceeded, echo-request, echo-reply, nd-router-solicit, nd-router-advert } limit rate 1000/second counter packets 0 bytes 0 accept comment "!fw4: Allow-ICMPv6-Input"
		icmpv6 type . icmpv6 code { packet-too-big . no-route, parameter-problem . no-route, nd-neighbor-solicit . no-route, nd-neighbor-advert . no-route, parameter-problem . admin-prohibited } limit rate 1000/second counter packets 0 bytes 0 accept comment "!fw4: Allow-ICMPv6-Input"
		ct status dnat accept comment "!fw4: Accept port redirections"
		jump reject_from_wan
	}

	chain output_wan {
		jump accept_to_wan
	}

	chain forward_wan {
		icmpv6 type { destination-unreachable, time-exceeded, echo-request, echo-reply } limit rate 1000/second counter packets 0 bytes 0 accept comment "!fw4: Allow-ICMPv6-Forward"
		icmpv6 type . icmpv6 code { packet-too-big . no-route, parameter-problem . no-route, parameter-problem . admin-prohibited } limit rate 1000/second counter packets 0 bytes 0 accept comment "!fw4: Allow-ICMPv6-Forward"
		meta l4proto esp counter packets 0 bytes 0 jump accept_to_lan comment "!fw4: Allow-IPSec-ESP"
		udp dport 500 counter packets 0 bytes 0 jump accept_to_lan comment "!fw4: Allow-ISAKMP"
		ct status dnat accept comment "!fw4: Accept port forwards"
		jump reject_to_wan
	}

	chain accept_to_wan {
		meta nfproto ipv4 oifname { "tun1", "WG_SE", "pppoe-wan" } ct state invalid counter packets 1 bytes 64 drop comment "!fw4: Prevent NAT leakage"
		oifname { "tun1", "WG_SE", "pppoe-wan" } counter packets 27 bytes 1703 accept comment "!fw4: accept wan IPv4/IPv6 traffic"
	}

	chain reject_from_wan {
		iifname { "tun1", "WG_SE", "pppoe-wan" } counter packets 1 bytes 52 jump handle_reject comment "!fw4: reject wan IPv4/IPv6 traffic"
	}

	chain reject_to_wan {
		oifname { "tun1", "WG_SE", "pppoe-wan" } counter packets 0 bytes 0 jump handle_reject comment "!fw4: reject wan IPv4/IPv6 traffic"
	}

	chain input_tun {
		jump accept_from_tun
	}

	chain output_tun {
		jump accept_to_tun
	}

	chain forward_tun {
		jump accept_to_tun
	}

	chain accept_from_tun {
		meta nfproto ipv4 iifname "tun1" counter packets 0 bytes 0 accept comment "!fw4: accept tun IPv4 traffic"
	}

	chain accept_to_tun {
		meta nfproto ipv4 oifname "tun1" ct state invalid counter packets 0 bytes 0 drop comment "!fw4: Prevent NAT leakage"
		meta nfproto ipv4 oifname "tun1" counter packets 0 bytes 0 accept comment "!fw4: accept tun IPv4 traffic"
	}

	chain dstnat {
		type nat hook prerouting priority dstnat; policy accept;
		iifname "br-lan" jump dstnat_lan comment "!fw4: Handle lan IPv4/IPv6 dstnat traffic"
		iifname { "tun1", "WG_SE", "pppoe-wan" } jump dstnat_wan comment "!fw4: Handle wan IPv4/IPv6 dstnat traffic"
		jump upnp_prerouting comment "Hook into miniupnpd prerouting chain"
	}

	chain srcnat {
		type nat hook postrouting priority srcnat; policy accept;
		oifname "br-lan" jump srcnat_lan comment "!fw4: Handle lan IPv4/IPv6 srcnat traffic"
		oifname { "tun1", "WG_SE", "pppoe-wan" } jump srcnat_wan comment "!fw4: Handle wan IPv4/IPv6 srcnat traffic"
		meta nfproto ipv4 oifname "tun1" jump srcnat_tun comment "!fw4: Handle tun IPv4 srcnat traffic"
		jump upnp_postrouting comment "Hook into miniupnpd postrouting chain"
	}

	chain dstnat_lan {
		tcp dport 53 counter packets 0 bytes 0 redirect to :53 comment "!fw4: ubus:https-dns-proxy[instance1] redirect 0"
		udp dport 53 counter packets 0 bytes 0 redirect to :53 comment "!fw4: ubus:https-dns-proxy[instance1] redirect 0"
		ip saddr 192.168.100.0/24 ip daddr { 10.252.1.3, 100.74.151.142 } tcp dport 17000 dnat ip to 192.168.100.2:17000 comment "!fw4: Torrent (reflection)"
		ip saddr 192.168.100.0/24 ip daddr { 10.252.1.3, 100.74.151.142 } udp dport 17000 dnat ip to 192.168.100.2:17000 comment "!fw4: Torrent (reflection)"
	}

	chain srcnat_lan {
		ip saddr 192.168.100.0/24 ip daddr 192.168.100.2 tcp dport 17000 snat ip to 192.168.100.1 comment "!fw4: Torrent (reflection)"
		ip saddr 192.168.100.0/24 ip daddr 192.168.100.2 udp dport 17000 snat ip to 192.168.100.1 comment "!fw4: Torrent (reflection)"
	}

	chain dstnat_wan {
		meta nfproto ipv4 tcp dport 17000 counter packets 0 bytes 0 dnat ip to 192.168.100.2:17000 comment "!fw4: Torrent"
		meta nfproto ipv4 udp dport 17000 counter packets 0 bytes 0 dnat ip to 192.168.100.2:17000 comment "!fw4: Torrent"
	}

	chain srcnat_wan {
		meta nfproto ipv4 masquerade comment "!fw4: Masquerade IPv4 wan traffic"
	}

	chain srcnat_tun {
		meta nfproto ipv4 masquerade comment "!fw4: Masquerade IPv4 tun traffic"
	}

	chain raw_prerouting {
		type filter hook prerouting priority raw; policy accept;
	}

	chain raw_output {
		type filter hook output priority raw; policy accept;
	}

	chain mangle_prerouting {
		type filter hook prerouting priority mangle; policy accept;
		jump pbr_prerouting comment "Jump into pbr prerouting chain"
	}

	chain mangle_postrouting {
		type filter hook postrouting priority mangle; policy accept;
		jump pbr_postrouting comment "Jump into pbr postrouting chain"
	}

	chain mangle_input {
		type filter hook input priority mangle; policy accept;
		jump pbr_input comment "Jump into pbr input chain"
	}

	chain mangle_output {
		type route hook output priority mangle; policy accept;
		jump pbr_output comment "Jump into pbr output chain"
	}

	chain mangle_forward {
		type filter hook forward priority mangle; policy accept;
		tcp dport 443 ct original packets < 20 counter packets 15 bytes 1754 queue flags bypass to 537
		iifname { "tun1", "WG_SE", "pppoe-wan" } tcp flags syn tcp option maxseg size set rt mtu comment "!fw4: Zone wan IPv4/IPv6 ingress MTU fixing"
		oifname { "tun1", "WG_SE", "pppoe-wan" } tcp flags syn tcp option maxseg size set rt mtu comment "!fw4: Zone wan IPv4/IPv6 egress MTU fixing"
		meta nfproto ipv4 iifname "tun1" tcp flags syn tcp option maxseg size set rt mtu comment "!fw4: Zone tun IPv4 ingress MTU fixing"
		meta nfproto ipv4 oifname "tun1" tcp flags syn tcp option maxseg size set rt mtu comment "!fw4: Zone tun IPv4 egress MTU fixing"
		jump pbr_forward comment "Jump into pbr forward chain"
	}

	chain upnp_forward {
	}

	chain upnp_prerouting {
	}

	chain upnp_postrouting {
	}

	chain pbr_forward {
	}

	chain pbr_input {
	}

	chain pbr_output {
	}

	chain pbr_prerouting {
		ip daddr @pbr_WG_SE_4_dst_ip_cfg1c6ff5 goto pbr_mark_0x040000 comment "hub.docker.com"
		ip daddr @pbr_VLESS_01_4_dst_ip_cfg1f6ff5 goto pbr_mark_0x050000 comment "ifconfig.me"
		ip saddr @pbr_wan_4_src_ip_cfg256ff5 goto pbr_mark_0x010000 comment "vm4"
		ip saddr @pbr_wan_4_src_ip_cfg276ff5 goto pbr_mark_0x010000 comment "all_traffic"
	}

	chain pbr_postrouting {
	}

	chain pbr_mark_0x010000 {
		counter packets 48 bytes 4050 meta mark set meta mark & 0xff01ffff | 0x00010000
		return
	}

	chain pbr_mark_0x020000 {
		counter packets 0 bytes 0 meta mark set meta mark & 0xff02ffff | 0x00020000
		return
	}

	chain pbr_mark_0x030000 {
		counter packets 0 bytes 0 meta mark set meta mark & 0xff03ffff | 0x00030000
		return
	}

	chain pbr_mark_0x040000 {
		counter packets 0 bytes 0 meta mark set meta mark & 0xff04ffff | 0x00040000
		return
	}

	chain pbr_mark_0x050000 {
		counter packets 0 bytes 0 meta mark set meta mark & 0xff05ffff | 0x00050000
		return
	}
}
table inet nft-qos-monitor {
	chain upload {
		type filter hook postrouting priority filter; policy accept;
		ip saddr 192.168.100.2 counter packets 13134 bytes 1283213
		ip saddr 192.168.100.20 counter packets 1606 bytes 261070
		ip saddr 192.168.100.236 counter packets 38 bytes 5870
		ip saddr 192.168.100.213 counter packets 215 bytes 40876
	}

	chain download {
		type filter hook prerouting priority filter; policy accept;
		ip daddr 192.168.100.2 counter packets 16172 bytes 11994246
		ip daddr 192.168.100.20 counter packets 624 bytes 93787
		ip daddr 192.168.100.236 counter packets 4 bytes 168
		ip daddr 192.168.100.213 counter packets 3 bytes 193
	}
}
root@FriendlyWrt:~# 

вот вырезал похожие правила в PBR, оставил только те, где разные метки есть

@Waujito
Copy link
Owner

Waujito commented Aug 12, 2024

Я понял проблему. youtubeUnblock завершает цепочку с ACCEPT. Чтобы этого избежать, небходимо создать отдельную цепочку и настроить это в файле /usr/share/nftables.d/ruleset-post/537-youtubeUnblock.nft:

chain youtubeUnblockMangle {
    type filter hook forward priority mangle - 1; policy accept;
    tcp dport 443 ct original packets < 20 counter packets 15 bytes 1754 queue flags bypass to 537
}

Другое правило в output оставить.

@PulseDiver
Copy link
Author

правильно ли я понял, что файл будет таким? я не очень силен в nft правилах

#!/usr/sbin/nft -f
# This file 

insert rule inet fw4 mangle_forward tcp dport 443 ct original packets < 20 counter queue num 537 bypass
insert rule inet fw4 output mark and 0x8000 == 0x8000 counter accept

chain youtubeUnblockMangle {
    type filter hook forward priority mangle - 1; policy accept;
    tcp dport 443 ct original packets < 20 counter packets 15 bytes 1754 queue flags bypass to 537
}

@Waujito
Copy link
Owner

Waujito commented Aug 12, 2024

Скорее таким

insert rule inet fw4 output mark and 0x8000 == 0x8000 counter accept
add chain inet fw4 youtubeUnblock_mangle '{type filter hook forward priority mangle - 1; policy accept;}'
add rule inet fw4 youtubeUnblock_mangle tcp dport 443 ct original packets < 20 counter queue num 537 bypass

Перед тем как добавлять это в файл, удалите его, сделайте /etc/init.d/firewall reload и просто введите эти команды самостоятельно (с префиксом nft, перед packets < 20 надо будет поставить кавычки, чтобы баш не ругался)

Если ничего не отвалится и youtubeUnblock заработает - можно добавлять в файл

@Waujito Waujito changed the title OpenWrt 23.05.2 and v0.3.0 - yt work. but not work other sites PBR conflict with youtubeUnblock Aug 12, 2024
@PulseDiver
Copy link
Author

Без одинарных кавычек в файле заработало, с ними выдавало ошибку синтаксиса:

insert rule inet fw4 output mark and 0x8000 == 0x8000 counter accept
add chain inet fw4 youtubeUnblock_mangle { type filter hook forward priority mangle - 1 ; policy accept ; }
add rule inet fw4 youtubeUnblock_mangle tcp dport 443 ct original packets < 20 counter queue num 537 bypass

Остальные сайты вроде не виснут.

Правила появились, в nft list ruleset:

	chain output {
		....
		meta mark & 0x00008000 == 0x00008000 counter packets 92 bytes 31072 accept
		....
	}
	chain youtubeUnblock_mangle {
		type filter hook forward priority mangle - 1; policy accept;
		tcp dport 443 ct original packets < 20 counter packets 1337 bytes 175175 queue flags bypass to 537
	}

но тест скорости показывает 0 все равно :)

 root@FriendlyWrt:~# curl -o/dev/null -k --connect-to ::google.com -k -L -H Host:\ mirror.gcr.io https://test.googlevideo.com/v2/cimg/android/blobs/sha256:6fd8bdac3da660bde7bd0b6f2b6a46e1b686afb74b9a4614def32532b73f5eaa
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:42 --:--:--     0^C
root@FriendlyWrt:~# 
root@FriendlyWrt:~# 
root@FriendlyWrt:~# 
root@FriendlyWrt:~# curl -o/dev/null -k --connect-to ::google.com -k -L -H Host:\ mirror.gcr.io https://mirror.gcr.io/v2/cimg/android/blobs/sha256:6fd8bdac3da660bde7bd0b6f2b6a46e1b686afb74b9a4614def32532b73f5eaa
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1144  100  1144    0     0   2767      0 --:--:-- --:--:-- --:--:--  2994
  7  664M    7 50.9M    0     0  9588k      0  0:01:10  0:00:05  0:01:05 10.4M^C
root@FriendlyWrt:~# 

@Waujito
Copy link
Owner

Waujito commented Aug 12, 2024

Еще один попался на forward и curl) Кажется, надо сказать об этом в README. curl не должен работать из роутера, так как используется хук forward, а всё, что отправляется с роутера, попадает в output.

curl надо сделать с хост-машины. Ну или проверить работоспособность по факту, через ютуб.

@Waujito
Copy link
Owner

Waujito commented Aug 12, 2024

@PulseDiver Всё заработало?

@PulseDiver
Copy link
Author

PulseDiver commented Aug 12, 2024

попробовал с мака по wifi - тоже 0 скорость
но вроде ютуб и сайты по wifi пока работают

@PulseDiver
Copy link
Author

на телике не работает. возможно, там в приложении QUIC и Kyber включены.
а возможно добавить в yotubeunblock флаг выключения QUIC\Kyber, как в GoodbyeDPI?

@Waujito
Copy link
Owner

Waujito commented Aug 13, 2024

Да, QUIC - одна большая проблема. Я сейчас работаю над добавлением его поддержки (#60). Как воркэраунд - nft add rule inet fw4 output udp dport 443 counter drop. Еще у некоторых ТВ начинают работать если программе дать --sni-domains=all

С кубером кстати проблем быть не должно.

@proninyaroslav
Copy link

proninyaroslav commented Aug 13, 2024

@Waujito
Отключение QUIC помогло в Firefox, в хроме нет, на android tv не работает так как видимо он там включен по умолчанию. С воркэраундом не помогает. Вся надежда на поддержку QUIC.

@Waujito
Copy link
Owner

Waujito commented Aug 13, 2024

@Waujito Отключение QUIC помогло в Firefox, в хроме нет, на android tv не работает так как видимо он там включен по умолчанию. С воркэраундом не помогает. Вся надежда на поддержку QUIC.

Поддержку QUIC я запушил в PR, но он сделает не больше обычной блокировки квик из воркэраунда. Необходимо именно добавлять обход блокировки QUIC по QUIC. Большая проблема в том, что разные девайсы используют разные версии протокола QUIC. Вы очень поможете, если сделаете дамп использования телевизором интернета. Как делать дампы описано здесь: https://openwrt.org/docs/guide-user/firewall/misc/tcpdump_wireshark. Я рекомендую использовать вариант с ssh user@myledebox tcpdump -U -s0 -w - 'not port 22' | sudo wireshark -k -i -

Также необходимо будет отключить блокировку QUIC и youtubeUnblock, чтобы максимально точно отследить, что именно хочет телевизор и что именно ему не дают. Также можно сделать дамп с включенным youtubeUnblock. Возможно, он поможет отследить движения трафика дальше.

@proninyaroslav
Copy link

proninyaroslav commented Aug 13, 2024

Постараюсь завтра сделать. Попробовал с конфигом выше + воркэрауд:

insert rule inet fw4 output mark and 0x8000 == 0x8000 counter accept
add chain inet fw4 youtubeUnblock_mangle {type filter hook forward priority mangle - 1; policy accept;}
add rule inet fw4 youtubeUnblock_mangle tcp dport 443 ct original packets < 20 counter queue num 537 bypass

стал грузить в хроме, но нестабильно и медленно сам сайт, видеопоток стабильно и быстро.

выводы:

$ nft list chains inet

...
chain youtubeUnblock_mangle {
		type filter hook forward priority mangle - 1; policy accept;
}
$ nft list ruleset

...
chain youtubeUnblock_mangle {
	type filter hook forward priority mangle - 1; policy accept;
	tcp dport 443 ct original packets < 20 counter packets 601 bytes 217078 queue flags bypass to 537
}

@PulseDiver
Copy link
Author

PulseDiver commented Aug 16, 2024

с этим у меня тоже стартануло быстро и даже главную вывело, частично превью плашки серые, частично загрузились. видос пошел и затупил на ромашке.
/usr/bin/youtubeUnblock --faking-strategy=ttl --faking-ttl=7

останвоил tcpdump и видео пошло, потом опять чз сек 5 остановился на ромашке

по логу вообще split-ов нет

UPD
а вот с --faking-ttl=8 вроде как полетело :)

версия - 0.3.0-51c21a8-1

@proninyaroslav
Copy link

proninyaroslav commented Aug 16, 2024

@PulseDiver
Придётся видимо каждому подбирать это индивиадуально. На 7 у меня работает стабильно.

@PulseDiver
Copy link
Author

@PulseDiver Придётся видимо каждому подбирать это индивиадуально. На 7 у меня работает стабильно.

но есть нюанс.
с faking-ttl=8 не стартует главная.
налету стоплю и запускаю с faking-ttl=7 появляется главная, и часть превью, видосы не идут сразу, чз минуту гдето отдупливается и даже инода идут и перематываются, иногда стопятся на кеширование

с faking-ttl=7 стартует главная и часть превью,
налету стоплю и запускаю с faking-ttl=8 прогружаются все превью и видосы идут шустрее со старта, прям как арньше до замедления, и легко мотаются

@proninyaroslav
Copy link

@PulseDiver
Надо пробовать другие значения. При 8 у меня грузилась главная, но не грузились видео. С 7 нормально, но это видимо просто совпало так). У вас может быть и гораздо меньше или больше.

@proninyaroslav
Copy link

P.S: ещё пробовать с флагом --frag-sni-faked=1.

@Waujito
Copy link
Owner

Waujito commented Aug 16, 2024

@PulseDiver скиньте traceroute www.youtube.com и traceroute manifest.googlevideo.com в тг https://t.me/waujito

@ropucyka
Copy link

Общая заметка.
У меня ipv6, на нём работает только с ttl=6, а на ipv4 начинает работать с ttl=7

@Waujito
Copy link
Owner

Waujito commented Aug 16, 2024

Общая заметка.
У меня ipv6, на нём работает только с ttl=6, а на ipv4 начинает работать с ttl=7

Всё бы ничего, но ipv6 не поддерживается)

@YBS-PC
Copy link

YBS-PC commented Aug 20, 2024

помогите, пожалуйста, разобраться вроде все скомпилировано правильно и устанавливается нормально на роутер с openwrt , потом пробовал установить и это youtubeUnblock-0.3.0-78ed6a1-aarch64_cortex-a53-openwrt-23.05.ipk, но youtube все также тормозит:

mypc@my-PC:~$ curl -o/dev/null -k --connect-to ::google.com -k -L -H Host:\ mirror.gcr.io https://mirror.gcr.io/v2/cimg/android/blobs/sha256:6fd8bdac3da660bde7bd0b6f2b6a46e1b686afb74b9a4614def32532b73f5eaa
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1144  100  1144    0     0   2049      0 --:--:-- --:--:-- --:--:--  2050
 23  664M   23  156M    0     0  9624k      0  0:01:10  0:00:16  0:00:54 10.0M^C
mypc@my-PC:~$ curl -o/dev/null -k --connect-to ::google.com -k -L -H Host:\ mirror.gcr.io https://test.googlevideo.com/v2/cimg/android/blobs/sha256:6fd8bdac3da660bde7bd0b6f2b6a46e1b686afb74b9a4614def32532b73f5eaa
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1144  100  1144    0     0   1112      0  0:00:01  0:00:01 --:--:--  1112
  0  664M    0 2119k    0     0  40942      0  4:43:39  0:00:53  4:42:46     0^C

nft list ruleset > nft-list-ruleset выдает это и вроде правила есть. в процессах он тоже есть 7269 | root | /usr/bin/youtubeUnblock 537 | 0% | 0%

table inet fw4 {
	set homeproxy_local_addr_v4 {
		type ipv4_addr
		flags interval
		auto-merge
		elements = { 0.0.0.0/8, 10.0.0.0/8,
			     100.64.0.0/10, 127.0.0.0/8,
			     169.254.0.0/16, 172.16.0.0/12,
			     192.0.0.0/24, 192.0.2.0/24,
			     192.31.196.0/24, 192.52.193.0/24,
			     192.88.99.0/24, 192.168.0.0/16,
			     192.175.48.0/24, 198.18.0.0/15,
			     198.51.100.0/24, 203.0.113.0/24,
			     224.0.0.0/3 }
	}

	set homeproxy_wan_proxy_addr_v4 {
		type ipv4_addr
		flags interval
		auto-merge
	}

	set homeproxy_wan_direct_addr_v4 {
		type ipv4_addr
		flags interval
		auto-merge
	}

	set homeproxy_routing_port {
		type inet_service
		flags interval
		auto-merge
		elements = { 80, 443 }
	}

	flowtable ft {
		hook ingress priority filter
		devices = { eth0, eth1 }
		flags offload
		counter
	}

	chain input {
		type filter hook input priority filter; policy accept;
		iif "lo" accept comment "!fw4: Accept traffic from loopback"
		ct state vmap { invalid : drop, established : accept, related : accept } comment "!fw4: Handle inbound flows"
		tcp flags syn / fin,syn,rst,ack jump syn_flood comment "!fw4: Rate limit TCP syn packets"
		iifname "br-lan" ip saddr 192.168.2.0/24 jump input_lan_z comment "!fw4: Handle lan_z IPv4 input traffic"
		iifname "br-lan" ip saddr 192.168.3.0/24 jump input_lan_guest_z comment "!fw4: Handle lan_guest_z IPv4 input traffic"
		iifname "pppoe-wan" jump input_wan_z comment "!fw4: Handle wan_z IPv4/IPv6 input traffic"
	}

	chain forward {
		type filter hook forward priority filter; policy drop;
		meta l4proto { tcp, udp } flow add @ft
		ct state vmap { invalid : drop, established : accept, related : accept } comment "!fw4: Handle forwarded flows"
		iifname "br-lan" ip saddr 192.168.2.0/24 jump forward_lan_z comment "!fw4: Handle lan_z IPv4 forward traffic"
		iifname "br-lan" ip saddr 192.168.3.0/24 jump forward_lan_guest_z comment "!fw4: Handle lan_guest_z IPv4 forward traffic"
		iifname "pppoe-wan" jump forward_wan_z comment "!fw4: Handle wan_z IPv4/IPv6 forward traffic"
		jump handle_reject
	}

	chain output {
		type filter hook output priority filter; policy accept;
		meta mark & 0x00008000 == 0x00008000 counter packets 0 bytes 0 accept
		oif "lo" accept comment "!fw4: Accept traffic towards loopback"
		ct state vmap { invalid : drop, established : accept, related : accept } comment "!fw4: Handle outbound flows"
		oifname "br-lan" ip daddr 192.168.2.0/24 jump output_lan_z comment "!fw4: Handle lan_z IPv4 output traffic"
		oifname "br-lan" ip daddr 192.168.3.0/24 jump output_lan_guest_z comment "!fw4: Handle lan_guest_z IPv4 output traffic"
		oifname "pppoe-wan" jump output_wan_z comment "!fw4: Handle wan_z IPv4/IPv6 output traffic"
	}

	chain prerouting {
		type filter hook prerouting priority filter; policy accept;
		iifname "br-lan" ip saddr 192.168.2.0/24 jump helper_lan_z comment "!fw4: Handle lan_z IPv4 helper assignment"
		iifname "br-lan" ip saddr 192.168.3.0/24 jump helper_lan_guest_z comment "!fw4: Handle lan_guest_z IPv4 helper assignment"
	}

	chain handle_reject {
		meta l4proto tcp reject with tcp reset comment "!fw4: Reject TCP traffic"
		reject comment "!fw4: Reject any other traffic"
	}

	chain syn_flood {
		limit rate 25/second burst 50 packets return comment "!fw4: Accept SYN packets below rate-limit"
		drop comment "!fw4: Drop excess packets"
	}

	chain input_lan_z {
		meta nfproto ipv4 tcp dport { 53, 54, 67, 68, 80, 5330, 5331, 5332, 5333, 5334 } counter packets 162 bytes 9524 accept comment "!fw4: lan_DHCP_DNS"
		meta nfproto ipv4 udp dport { 53, 54, 67, 68, 80, 5330, 5331, 5332, 5333, 5334 } counter packets 84 bytes 5759 accept comment "!fw4: lan_DHCP_DNS"
		ct status dnat accept comment "!fw4: Accept port redirections"
		jump accept_from_lan_z
	}

	chain output_lan_z {
		jump accept_to_lan_z
	}

	chain forward_lan_z {
		meta nfproto ipv4 jump accept_to_wan_z comment "!fw4: Accept lan_z to wan_z IPv4 forwarding"
		meta nfproto ipv4 jump accept_to_lan_guest_z comment "!fw4: Accept lan_z to lan_guest_z IPv4 forwarding"
		ct status dnat accept comment "!fw4: Accept port forwards"
		jump accept_to_lan_z
	}

	chain helper_lan_z {
	}

	chain accept_from_lan_z {
		iifname "br-lan" ip saddr 192.168.2.0/24 counter packets 279 bytes 40447 accept comment "!fw4: accept lan_z IPv4 traffic"
	}

	chain accept_to_lan_z {
		oifname "br-lan" ip daddr 192.168.2.0/24 counter packets 5 bytes 248 accept comment "!fw4: accept lan_z IPv4 traffic"
	}

	chain input_lan_guest_z {
		meta nfproto ipv4 tcp dport { 53, 54, 67, 68, 5330, 5331, 5332, 5333, 5334 } counter packets 0 bytes 0 accept comment "!fw4: guest_DHCP_DNS"
		meta nfproto ipv4 udp dport { 53, 54, 67, 68, 5330, 5331, 5332, 5333, 5334 } counter packets 0 bytes 0 accept comment "!fw4: guest_DHCP_DNS"
		jump reject_from_lan_guest_z
	}

	chain output_lan_guest_z {
		jump accept_to_lan_guest_z
	}

	chain forward_lan_guest_z {
		meta nfproto ipv4 jump accept_to_wan_z comment "!fw4: Accept lan_guest_z to wan_z IPv4 forwarding"
		jump reject_to_lan_guest_z
	}

	chain helper_lan_guest_z {
	}

	chain accept_to_lan_guest_z {
		oifname "br-lan" ip daddr 192.168.3.0/24 counter packets 16 bytes 10108 accept comment "!fw4: accept lan_guest_z IPv4 traffic"
	}

	chain reject_from_lan_guest_z {
		iifname "br-lan" ip saddr 192.168.3.0/24 counter packets 1 bytes 229 jump handle_reject comment "!fw4: reject lan_guest_z IPv4 traffic"
	}

	chain reject_to_lan_guest_z {
		oifname "br-lan" ip daddr 192.168.3.0/24 counter packets 0 bytes 0 jump handle_reject comment "!fw4: reject lan_guest_z IPv4 traffic"
	}

	chain input_wan_z {
		meta nfproto ipv4 udp dport 68 counter packets 0 bytes 0 accept comment "!fw4: Allow-DHCP-Renew"
		ct status dnat accept comment "!fw4: Accept port redirections"
		jump reject_from_wan_z
	}

	chain output_wan_z {
		jump accept_to_wan_z
	}

	chain forward_wan_z {
		meta nfproto ipv4 meta l4proto esp counter packets 0 bytes 0 jump accept_to_lan_z comment "!fw4: Allow-IPSec-ESP"
		meta nfproto ipv4 udp dport 500 counter packets 0 bytes 0 jump accept_to_lan_z comment "!fw4: Allow-ISAKMP"
		meta nfproto ipv4 meta l4proto esp counter packets 0 bytes 0 jump accept_to_lan_guest_z comment "!fw4: guest_Allow-IPSec-ESP"
		meta nfproto ipv4 udp dport 500 counter packets 0 bytes 0 jump accept_to_lan_guest_z comment "!fw4: guest_Allow-ISAKMP"
		ct status dnat accept comment "!fw4: Accept port forwards"
		jump reject_to_wan_z
	}

	chain accept_to_wan_z {
		oifname "pppoe-wan" counter packets 472 bytes 154875 accept comment "!fw4: accept wan_z IPv4/IPv6 traffic"
	}

	chain reject_from_wan_z {
		iifname "pppoe-wan" counter packets 31 bytes 3725 jump handle_reject comment "!fw4: reject wan_z IPv4/IPv6 traffic"
	}

	chain reject_to_wan_z {
		oifname "pppoe-wan" counter packets 0 bytes 0 jump handle_reject comment "!fw4: reject wan_z IPv4/IPv6 traffic"
	}

	chain dstnat {
		type nat hook prerouting priority dstnat; policy accept;
		iifname "br-lan" ip saddr 192.168.2.0/24 jump dstnat_lan_z comment "!fw4: Handle lan_z IPv4 dstnat traffic"
		iifname "pppoe-wan" jump dstnat_wan_z comment "!fw4: Handle wan_z IPv4/IPv6 dstnat traffic"
		meta nfproto ipv4 meta l4proto tcp jump homeproxy_redirect_lanac
	}

	chain srcnat {
		type nat hook postrouting priority srcnat; policy accept;
		oifname "br-lan" ip daddr 192.168.2.0/24 jump srcnat_lan_z comment "!fw4: Handle lan_z IPv4 srcnat traffic"
		oifname "pppoe-wan" jump srcnat_wan_z comment "!fw4: Handle wan_z IPv4/IPv6 srcnat traffic"
	}

	chain dstnat_lan_z {
		ip saddr 192.168.2.0/24 ip daddr 10.9.145.157 tcp dport 3074 dnat ip to 192.168.2.21:3074 comment "!fw4: XB_001_TCP+UDP-3074 (reflection)"
	}

	chain srcnat_lan_z {
		ip saddr 192.168.2.0/24 ip daddr 192.168.2.21 tcp dport 3074 snat ip to 192.168.2.1 comment "!fw4: XB_001_TCP+UDP-3074 (reflection)"
	}

	chain dstnat_wan_z {
		meta nfproto ipv4 tcp dport 3074 counter packets 0 bytes 0 dnat ip to 192.168.2.21:3074 comment "!fw4: XB_001_TCP+UDP-3074"
	}

	chain srcnat_wan_z {
		meta nfproto ipv4 masquerade comment "!fw4: Masquerade IPv4 wan_z traffic"
		meta nfproto ipv6 masquerade comment "!fw4: Masquerade IPv6 wan_z traffic"
	}

	chain raw_prerouting {
		type filter hook prerouting priority raw; policy accept;
	}

	chain raw_output {
		type filter hook output priority raw; policy accept;
	}

	chain mangle_prerouting {
		type filter hook prerouting priority mangle; policy accept;
	}

	chain mangle_postrouting {
		type filter hook postrouting priority mangle; policy accept;
		oifname "pppoe-wan" tcp flags syn / fin,syn,rst tcp option maxseg size set rt mtu comment "!fw4: Zone wan_z IPv4/IPv6 egress MTU fixing"
	}

	chain mangle_input {
		type filter hook input priority mangle; policy accept;
	}

	chain mangle_output {
		type route hook output priority mangle; policy accept;
	}

	chain mangle_forward {
		type filter hook forward priority mangle; policy accept;
		iifname "pppoe-wan" tcp flags syn / fin,syn,rst tcp option maxseg size set rt mtu comment "!fw4: Zone wan_z IPv4/IPv6 ingress MTU fixing"
		tcp dport 443 ct original packets < 20 counter packets 0 bytes 0 queue flags bypass to 537
	}

	chain homeproxy_redirect_proxy {
		meta l4proto tcp counter packets 168 bytes 9844 redirect to :5331
	}

	chain homeproxy_redirect_lanac {
		meta mark 0x00000064 counter packets 0 bytes 0 return
		counter packets 170 bytes 9932 goto homeproxy_redirect
	}

	chain homeproxy_redirect {
		meta mark 0x00000064 counter packets 168 bytes 18432 return
		ip daddr @homeproxy_wan_proxy_addr_v4 counter packets 0 bytes 0 goto homeproxy_redirect_proxy_port
		ip daddr @homeproxy_local_addr_v4 counter packets 7 bytes 332 return
		ip daddr @homeproxy_wan_direct_addr_v4 counter packets 0 bytes 0 return
		counter packets 207 bytes 12188 goto homeproxy_redirect_proxy_port
	}

	chain homeproxy_redirect_proxy_port {
		tcp dport != @homeproxy_routing_port counter packets 39 bytes 2344 return
		goto homeproxy_redirect_proxy
	}

	chain homeproxy_output_redir {
		type nat hook output priority dstnat - 5; policy accept;
		meta nfproto ipv4 meta l4proto tcp jump homeproxy_redirect
	}
}

может ли быть что homeproxy мешает хоть там и нет доменов youtube?

@mrOkk
Copy link

mrOkk commented Aug 20, 2024

Подскажите плз нубу, что сделать, чтобы процесс запустился с --faking-strategy=ttl --faking-ttl=7
а то, если через ssh прописываю /usr/bin/youtubeUnblock --faking-strategy=ttl --faking-ttl=7, то все работает, но живет, пока не закрою соединение

@Waujito
Copy link
Owner

Waujito commented Aug 20, 2024

Подскажите плз нубу, что сделать, чтобы процесс запустился с --faking-strategy=ttl --faking-ttl=7 а то, если через ssh прописываю /usr/bin/youtubeUnblock --faking-strategy=ttl --faking-ttl=7, то все работает, но живет, пока не закрою соединение

Необходимо прописать опции в файле /etc/init.d/youtubeUnblock

@Waujito
Copy link
Owner

Waujito commented Aug 20, 2024

@YBS-PC Судя по полю counter в правилах nftables, у вас вообще пакеты не идут в youtubeUnblock.

@YBS-PC
Copy link

YBS-PC commented Aug 20, 2024

@YBS-PC Судя по полю counter в правилах nftables, у вас вообще пакеты не идут в youtubeUnblock.

А как исправить это? Или как выявить причину?

@RareBirdMe
Copy link

RareBirdMe commented Aug 22, 2024

Версия 0.3.1, Sony Android TV - с включённым youtubeUnblock не грузится интерфейс стокового YouTube. Пробовал разные настройки и комбинации из этой темы и из readme (--faking-strategy с перебором ttl, --quic-drop, udp drop, --sni-domains=all). С выключенным youtubeUnblock с задержками и не с первого раза, но интерфейс можно прогрузить (МГТС). Само видео, естественно, не грузится. Но отлично запускается, если после прогрузки интрефейса подрубить youtubeUnblock, без параметров. Попробовал записать дамп, без youtubeUnblock, в момент запуска приложения и прогрузки интерфейса (ТВ на 192.168.1.21).

dump.txt

Немного поэкспериментировал с добавлением в --sni-domains разных гугл-списков - если прописан youtube.com, то интерфейс в хроме полностью перестаёт грузиться, также yt-dlp не коннектится на загрузке плееров. Интересно, почему с ним youtubeUnblock не работает. И возможно ли такое, что в списках по умолчанию прописан какой-то домен, на который завязан интерфес на андроид тв, и с которым такая же проблема.

@Waujito
Copy link
Owner

Waujito commented Aug 23, 2024

Попробуйте с faking-strategy pastseq

@nitro3188
Copy link

root@OpenWrt:~# /etc/init.d/firewall reload

Section @rule[3] (Allow-DHCPv6) is restricted to IPv6 but referenced source zone is IPv4 only, skipping
Section @rule[4] (Allow-MLD) is restricted to IPv6 but referenced source zone is IPv4 only, skipping
Section @rule[5] (Allow-ICMPv6-Input) is restricted to IPv6 but referenced source zone is IPv4 only, skipping
Section @rule[6] (Allow-ICMPv6-Forward) is restricted to IPv6 but referenced source zone is IPv4 only, skipping
Section @reDIrect[0] (dnsproxy-dns-leaks) does not specify a destination, assuming 'lan'
Automatically including '/usr/share/nftables.d/ruleset-post/537-youtubeUnblock.nft'
Automatically including '/usr/share/nftables.d/table-post/20-miniupnpd.nft'
Automatically including '/usr/share/nftables.d/chain-post/dstnat/20-miniupnpd.nft'
Automatically including '/usr/share/nftables.d/chain-post/forward/20-miniupnpd.nft'
Automatically including '/usr/share/nftables.d/chain-post/srcnat/20-miniupnpd.nft'

скажите, это правильный вывод? IPv6 отключен

@Waujito
Copy link
Owner

Waujito commented Aug 24, 2024

@nitro3188
Что-то ломается? Или просто сообщения пугают?

@nitro3188
Copy link

@nitro3188 Что-то ломается? Или просто сообщения пугают?

ютуб работает, это главное, поэтому просто сообщения насторожили :)

@epsimatic
Copy link

epsimatic commented Aug 26, 2024

Для статистики, OpenWrt 23.05.0-rc2 r23228-cd17d8df2a на TOTOLINK X5000R, программа v0.3.1, PBR нет:

  • --faking-strategy=pastseq работает с Youtube на Apple TV
  • --faking-strategy=ttl --faking-ttl=7 --frag-sni-faked=1 работает с Youtube на Apple TV
  • --faking-strategy=ttl --faking-ttl=8 --quic-drop — не работает (youtube не загружается)
  • --sni-domains=all --sni-detection=brute — не работает (youtube не загружается)

@Waujito
Copy link
Owner

Waujito commented Aug 26, 2024

@epsimatic
Буду благодарен, если попробуете --faking-strategy=pastseq на последнем пре-релизе

@proninyaroslav
Copy link

proninyaroslav commented Aug 26, 2024

pastseq работает везде, уже длительное время без проблем.

@Waujito
Copy link
Owner

Waujito commented Aug 26, 2024

pastseq работает везде, уже длительное время без проблем.

Супер! Это я фидбек от разных пользователей собираю, мало ли :)

@epsimatic
Copy link

--faking-strategy=pastseq тоже работает в v0.3.1, подтверждаю. Обновил свой комментарий.

@aram20134
Copy link

--faking-strategy=pastseq реально работает, до этого не работал ютуб на самсунг тв

@Waujito
Copy link
Owner

Waujito commented Sep 29, 2024

Итак, я вижу, что эта проблема решена, поэтому закрываю

@Waujito Waujito closed this as completed Sep 29, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests