gSpotx2f / ruantiblock_openwrt

Обход блокировок в OpenWrt с помощью Tor или VPN
GNU General Public License v3.0
208 stars 20 forks source link

Весь трафик (кроме google.com) упорно идёт через OpenVPN даже с опцией route-noexec #47

Closed id259 closed 7 months ago

id259 commented 1 year ago

Конфиги OpenVPN:

Клиент ```remote 127.0.0.1 4444 socks-proxy 127.0.0.1 1080 proto tcp-client ifconfig 10.0.0.1 10.0.0.2 verb 3 user nobody group nogroup nobind persist-tun persist-key compress lz4-v2 dev tun dev-type tun keepalive 10 60 resolv-retry infinite route-nopull route-noexec ```
Сервер ```local 127.0.0.1 port 4444 proto tcp-server dev tun ifconfig 10.0.0.2 10.0.0.1 verb 3 user nobody group nogroup keepalive 10 60 persist-tun persist-key persist-local-ip compress lz4-v2 auth none cipher none ```

OpenVPN прокинут через xray. При запуске ruantiblock весь трафик начинает идти через OpenVPN, причём сайты не загружаются. Tracert показывает, что траффик застревает на сервере. Трафик к google.com при этом всегда идёт напрямую. Это происходит независимо от выбора блэклиста, даже только с пользовательскими записями.

Началось всё около двух недель назад, до этого выборочное проксирование работало без проблем, незаблокированные сайты не прокировались, заблокированные - проксировались и нормально открывались. Началсь это ещё на Openwrt 22.03, обновился до 23.05 - проблема осталась.

gSpotx2f commented 1 year ago

OpenVPN прокинут через xray.

https://github.com/gSpotx2f/ruantiblock_openwrt/issues/46

id259 commented 1 year ago

OpenVPN прокинут через xray.

46

пакеты luci-app-xray и luci-app-xray-shared конфликтуют с работой скрипта

В том то и дело, что у меня нет этих пакетов, а стоит только xray-core. Плюс в режиме прозрачного прокси с redsocks+xray всё работает нормально.

gSpotx2f commented 1 year ago

Плюс в режиме прозрачного прокси с redsocks+xray всё работает нормально.

Тогда зачем вам OpenVPN нужен внутри xray? Усложнение конфигурации и лишняя нагрузка на роутер.

Tracert показывает, что траффик застревает на сервере.

Без ruantiblock OpenVPN работает в такой конфигурации (через xray)? Т.е. вообще трафик проходит до хостов в интернете сквозь тунель?

id259 commented 1 year ago

Без ruantiblock OpenVPN работает в такой конфигурации (через xray)? Т.е. вообще трафик проходит до хостов в интернете сквозь тунель?

Да, оно и с ruantiblock спокойно работало почти два месяца.

Тогда зачем вам OpenVPN

Я не разобрался, как redsocks+xray заставить работать с UDP, наткнулся на готовый конфиг OpenVPN, который просто всё перенаправляет через socks прокси, и использовал его вместо redsocks.

В принципе, я сейчас поставил sing-box в режиме туннеля, вроде всё работает. Но всё равно хотелось бы понять, почему OpenVPN резко перестал работать с ruantiblock.

gSpotx2f commented 1 year ago

Но всё равно хотелось бы понять, почему OpenVPN резко перестал работать с ruantiblock.

Если принять как факт, что роутер вообще не трогали (не меняли настройки, не устанавливали новые приложения и даже не перезагружали) и вдруг перестал работать обход блокировок, то единственное, что мне приходит в голову - это либо изменения на самом proxy/VPN сервере, либо этот сервер попал в реестр или провайдер начал блокировать протокол (что происходит у многих федеральных провайдеров с августа месяца, если следите за новостями).

id259 commented 1 year ago

либо этот сервер попал в реестр или провайдер начал блокировать протокол

Явно не это, сервер свой, плюс с компьютера xray прекрасно работает, проблема именно, в связке ruantiblock+ovpn. Если я сейчас включаю ruantiblock вместе с ovpn, то практически весь трафик сразу начинает идти через ovpn, не зависимо от того, есть ли сайт в списке заблокированных, причём сайт открываться не будет. Исключения составляют google и youtube. Если при этом я делаю tracert на какой-нибудь сайт, то он заглохнет на сервере:

Tracing route to askubuntu.com over a maximum of 30 hops

  1    44 ms    38 ms    37 ms  10.0.0.2
  2    *        *        *     Request timed out.
  3    *        *        *     Request timed out.
  4    *        *        *     Request timed out.

Единственное, за что можно зацепиться, - за неделю до того, когда это начало происходить, я поменял хостера. Но я просто перебросил на новую впску старые конфиги и ничего не менял, да и неделю оно как-то проработало.

gSpotx2f commented 1 year ago

Ну и оставьте текущую конфигурацию с sing-box, зачем искать приключения? Заворачивать OpenVPN в другой тунель, для простого обхода блокировок, нет никакого смысла (учитывая, что ovpn и сам по себе очень жирный и медленный для роутера).

id259 commented 1 year ago

оставьте текущую конфигурацию с sing-box

Четвёртый день он работает нормально, так что да, оставлю его. Я что-то и не знал, что sing-box есть под openwrt, а он, оказывается, есть прямо в репозитории. Спасибо.

id259 commented 7 months ago

Всё-таки проблема была не в OpenVPN. После обновления блэклиста трафик ходит напрямую, но после того, как я зайду на любой заблокированный сайт из списка, то почти весь трафик начинает идти через vpn. Если заново обновить блэклист, то трафик начинает ходить напрямую до того, как я снова зайду на заблокированный сайт, и так по кругу. Это происходит даже на чистом роутере без установленных OpenVPN/Sing-Box и какого-нибудь дополнительного софта (установлен только ruantiblock). Я пробовал два разных роутера (Redmi_AX6S и TP-Link Archer C6U), и это происходит на обоих.

Я просто долго не замечал, что это происходит, так как у меня канал на 80мбит, а vpn гигабитный.

gSpotx2f commented 7 months ago
  1. Покажите содержимое конфига /etc/config/ruantiblock.

  2. Как вы определяете, что ruantiblock заворачивает весь трафик в VPN? Если ruantiblock отправляет трафик в VPN, то, после открытия сайта в браузере, на странице статистики в таблице "Правила nftables" должен расти один из счётчиков байтов: c (CIDR), i (IP), d (dnsmasq). Когда загружаете незаблокированный сайт счётчики растут?

  3. ruantiblock не будет работать без шифрования DNS. Недостаточно просто заменить провайдерский DNS на другой (8.8.8.8 и т.п.), необходимо шифровать DNS-трафик с помощью https-dns-proxy (или dnscrypt-proxy и т.п.). У вас настроено шифрование DNS?

  4. Некоторые приложения работающие по похожему принципу (adblock, adguard, pbr и т.п.) могут конфликтовать с ruantiblock. Если такие приложения установлены, то попробуйте их удалить.

  5. Переключите ruantiblock в режим ip, а также отключите проксификацию локального трафика роутера и записи пользователя:

    uci set ruantiblock.config.bllist_preset="ruantiblock-ip"
    uci set ruantiblock.config.proxy_local_clients="0"
    uci set ruantiblock.config.add_user_entries="0"
    uci commit ruantiblock
    service ruantiblock restart
    ruantiblock update
id259 commented 7 months ago
1. Конфиг ``` config main 'config' option proxy_mode '2' option proxy_local_clients '0' option nftset_clear_sets '1' option allowed_hosts_mode '0' option bypass_mode '0' option enable_fproxy '0' option if_vpn 'tun0' option vpn_route_check '0' option tor_trans_port '9040' option onion_dns_addr '127.0.0.1#9053' option t_proxy_port_tcp '1100' option t_proxy_port_udp '1100' option t_proxy_allow_udp '0' option enable_logging '1' option bllist_min_entries '3000' option bllist_ip_limit '0' option bllist_summarize_ip '1' option bllist_summarize_cidr '1' option bllist_ip_filter '0' option bllist_ip_filter_type '0' option bllist_sd_limit '16' list bllist_gr_excluded_sld 'livejournal.com' list bllist_gr_excluded_sld 'facebook.com' list bllist_gr_excluded_sld 'vk.com' list bllist_gr_excluded_sld 'blog.jp' list bllist_gr_excluded_sld 'msk.ru' list bllist_gr_excluded_sld 'net.ru' list bllist_gr_excluded_sld 'org.ru' list bllist_gr_excluded_sld 'net.ua' list bllist_gr_excluded_sld 'com.ua' list bllist_gr_excluded_sld 'org.ua' list bllist_gr_excluded_sld 'co.uk' list bllist_gr_excluded_sld 'amazonaws.com' list bllist_gr_excluded_sld 'spb.ru' list bllist_gr_excluded_sld 'appspot.com' list bllist_gr_excluded_sld 'googleusercontent.com' option bllist_fqdn_filter '1' option bllist_fqdn_filter_type '0' option bllist_enable_idn '0' option bllist_alt_nslookup '0' option bllist_alt_dns_addr '8.8.8.8' option update_at_startup '1' option bllist_preset 'ruantiblock-fqdn' option enable_bllist_proxy '0' option add_user_entries '0' ```
  1. Как вы определяете, что ruantiblock заворачивает весь трафик в VPN?

Смотрю трейс. Также я просто выключал vpn сервер - после выключения сервера незаблокированные сайты перестают открываться. Ещё, чтобы исключить sing-box и прочий софт, заново перепрошил роутер и поставил на него только ruantiblock и в настройках в качестве интерфейса просто указал wan - результат один и тот же.

  1. Когда загружаете незаблокированный сайт счётчики растут?

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

У вас настроено шифрование DNS?

Да, установлен https-dns-proxy, dnsleaktest показывает установленный dns. Пробовал пользоваться ruantiblock без шифрования, пробовал разный dns - результат всё тот же.

  1. Некоторые приложения работающие по похожему принципу (adblock, adguard, pbr и т.п.) могут конфликтовать с ruantiblock. Если такие приложения установлены, то попробуйте их удалить.

Ничего из перечисленного у меня не установленно, сейчас на роутере только https-dns-proxy и ruantiblock.

5, Переключите ruantiblock в режим ip, а также отключите проксификацию локального трафика роутера и записи пользователя.

Тот же результат, эффекта это не дало.

gSpotx2f commented 7 months ago

Покажите вывод команд nft list set ip r d и nft list chain ip r blacklist, сначала сразу после обновления блэклиста (когда весь трафик идёт нормально), а потом после захода на заблокированный сайт (когда весь трафик заворачивается в VPN):

ruantiblock restart
ruantiblock update
nft list set ip r d
nft list chain ip r blacklist

зайдите на rutracker.org в браузере

nft list set ip r d
nft list chain ip r blacklist

зайдите на yandex.ru в браузере

nft list set ip r d
nft list chain ip r blacklist
id259 commented 7 months ago

как я зайду на любой заблокированный сайт из списка

Тут я наврал, судя по всему. Заход конкретно на рутрекер никак не отразился на остальном траффике, пока всё ходит нормально.

Сразу после обновления блэклиста ``` root@Redmi_AX6S:~# nft list set ip r d table ip r { set d { type ipv4_addr size 65535 flags dynamic,timeout timeout 3h } } root@Redmi_AX6S:~# nft list chain ip r blacklist table ip r { chain blacklist { ip daddr @c counter packets 0 bytes 0 goto action ip daddr @i counter packets 0 bytes 0 goto action ip daddr @d counter packets 0 bytes 0 goto dnsmasq_timeout_update } } ```
rutracker.org ``` root@Redmi_AX6S:~# nft list set ip r d table ip r { set d { type ipv4_addr size 65535 flags dynamic,timeout timeout 3h elements = { 104.21.32.39 expires 2h59m53s260ms, 104.21.50.150 expires 2h59m54s670ms, 172.67.163.237 expires 2h59m54s60ms, 172.67.182.196 expires 2h59m54s280ms } } } root@Redmi_AX6S:~# nft list chain ip r blacklist table ip r { chain blacklist { ip daddr @c counter packets 0 bytes 0 goto action ip daddr @i counter packets 0 bytes 0 goto action ip daddr @d counter packets 113 bytes 31629 goto dnsmasq_timeout_update } } ```
yandex.ru ``` root@Redmi_AX6S:~# nft list set ip r d table ip r { set d { type ipv4_addr size 65535 flags dynamic,timeout timeout 3h elements = { 104.21.32.39 expires 2h58m50s260ms, 104.21.50.150 expires 2h58m51s670ms, 172.67.163.237 expires 2h58m51s60ms, 172.67.182.196 expires 2h58m51s280ms } } } root@Redmi_AX6S:~# nft list chain ip r blacklist table ip r { chain blacklist { ip daddr @c counter packets 0 bytes 0 goto action ip daddr @i counter packets 0 bytes 0 goto action ip daddr @d counter packets 120 bytes 31916 goto dnsmasq_timeout_update } } ```

Однако, если я зайду, например, на e621.net, то вот после захода именно на него трафик начинает идти через vpn. Причём сайты начинают открываться через vpn не сразу, а постепенно, и, например, гугл с яндексом будут ходить напрямую до последнего, а вот всякие сайты из поисковой выдачи уже будут открываться через vpn. Например, через vpn сразу начинает открываться askubuntu.com.

Сразу после обновления блэклиста ``` table ip r { set d { type ipv4_addr size 65535 flags dynamic,timeout timeout 3h } } root@Redmi_AX6S:~# nft list chain ip r blacklist table ip r { chain blacklist { ip daddr @c counter packets 0 bytes 0 goto action ip daddr @i counter packets 0 bytes 0 goto action ip daddr @d counter packets 533 bytes 94272 goto dnsmasq_timeout_update } } ```
e621.net ``` table ip r { set d { type ipv4_addr size 65535 flags dynamic,timeout timeout 3h elements = { 148.163.96.43 expires 2h59m1s510ms, 188.114.98.224 expires 2h58m57s880ms, 188.114.99.224 expires 2h58m57s860ms } } } root@Redmi_AX6S:~# nft list chain ip r blacklist table ip r { chain blacklist { ip daddr @c counter packets 0 bytes 0 goto action ip daddr @i counter packets 0 bytes 0 goto action ip daddr @d counter packets 849 bytes 123301 goto dnsmasq_timeout_update } } ```
askubuntu.com ``` root@Redmi_AX6S:~# nft list set ip r d table ip r { set d { type ipv4_addr size 65535 flags dynamic,timeout timeout 3h elements = { 148.163.96.43 expires 2h57m32s250ms, 188.114.98.224 expires 2h59m36s890ms, 188.114.99.224 expires 2h57m28s600ms } } } root@Redmi_AX6S:~# nft list chain ip r blacklist table ip r { chain blacklist { ip daddr @c counter packets 0 bytes 0 goto action ip daddr @i counter packets 0 bytes 0 goto action ip daddr @d counter packets 908 bytes 128805 goto dnsmasq_timeout_update } } ```
gSpotx2f commented 7 months ago

Однако, если я зайду, например, на e621.net, то вот после захода именно на него трафик начинает идти через vpn.

Только трафик к тем IP адресам, в которые резолвится заблокированный e621.net (104.21.32.39, 104.21.50.150, 172.67.163.237, 172.67.182.196). Ко всем остальным IP адресам трафик идёт напрямую. Четыре IP адреса - это не весь трафик, как вы писали ранее.

Например, через vpn сразу начинает открываться askubuntu.com.

Очевидно, что e621.net и askubuntu.com висят на одном IP адресе (на одном хостинге). Сделайте nslookup e621.net и nslookup askubuntu.com, они резолвятся в одинаковые IP. IP адрес заблокированного сайта добавляется в сет nftables при резолвинге домена на DNS-сервере роутера (dnsmasq) на срок 3 часа. В этот период времени весь трафик к этому IP идёт через VPN. Так работает режим fqdn. Можете поиграться с таймаутом в конфиге ruantiblock /etc/ruantiblock/ruantiblock.conf, параметр NFTSET_DNSMASQ_TIMEOUT="3h". Попробуйте 30 минут (30m).

Причём сайты начинают открываться через vpn не сразу, а постепенно, и, например, гугл с яндексом будут ходить напрямую до последнего, а вот всякие сайты из поисковой выдачи уже будут открываться через vpn.

Через VPN будут открываться только те сайты, IP которых есть в сетах, т.е. это IP адреса заблокированных сайтов, а также тех сайтов, которые висят на этом же IP (обычно, на том же хостинге). Весь трафик полностью, как вы описали, никак не может попасть в VPN при этих правилах. И, например, яндекс никогда в VPN не попадёт, потому что, во-первых, его нет в реестре, а во-вторых, у него свои собственные диапазоны IP адресов на которых нет заблокированных сайтов.

Короче, у вас всё работает нормально. При обходе блокировок есть издержки, некоторое количество незаблокированных сайтов попадают в VPN из-за того, что расположены на одном IP с заблокированным сайтом.

id259 commented 7 months ago

e621.net и askubuntu.com висят на одном IP адресе

Блин, а я и не догадался посмотреть.

Через VPN будут открываться только те сайты, IP которых есть в сетах, т.е. это IP адреса заблокированных сайтов, а также тех сайтов, которые висят на этом же IP (обычно, на том же хостинге). Весь трафик полностью, как вы описали, никак не может попасть в VPN при этих правилах.

У меня впс вырубили, и пока он не работал я гуглил разную фигню (которая, по идее, блокировать не за что), и в выдаче железно не открывалась хотя-бы одна страница. Меня дёрнуло посмотреть трейс, и все сайты, которые я пробовал, шли через впн. Может мне не повезло, что они висели на одном ip с заблокированными на которые я до этого заходил, а может я просто затупил.

Можете поиграться с таймаутом в конфиге ruantiblock

Так и поступлю. Спасибо.