nukdokplex Posted October 6, 2022 Share Posted October 6, 2022 Итак, Keenetic Hopper с Entware. Я написал несколько скриптов для выборочной маршрутизации. Все эти скрипты работают нормально, никаких ошибок во время исполнения нет, да и маршрутизация работает. Ping через Wireguard работает нормально, но проблемы возникают, когда я захожу в браузер, всё очень сильно тормозит. Если честно, я не имею ни малейшего понятия, в чем может быть проблема, единственное, если выключить мои скрипты и в веб-интерфейсе выставить wireguard приоритетным подключением, то весь трафик будет идти через wireguard нормально, без проблем и подвисаний, я думаю проблема заключается в моей маршрутизации. Вот конфигурация Wireguard: Вот мои скрипты: # /opt/etc/ndm/fs.d/100_hirkn-ipsets.sh #!/bin/sh [ "$1" != "start" ] && exit 0 echo " --- HIRKN ENTRY POINT --- " RKN_SET_FILE="/opt/root/rkn.lst" GOOGLE_SET_FILE="/opt/root/google.lst" CUSTOM_SET_FILE="/opt/root/custom.lst" function create_ipset() { IPSET_NAME=$1 ipset create $IPSET_NAME hash:net family inet -! } function fill_ipset() { FILE="$1" IPSET_NAME="$2" data=$(cat $FILE) for row_data in $data do ipset add $IPSET_NAME ${row_data} -! done } function create_and_fill_ipset() { IPSET_NAME="$1" FILE="$2" create_ipset $IPSET_NAME fill_ipset $FILE $IPSET_NAME } if [ -z "$(ip route list table 1)" ]; then ip rule add fwmark 1 table 1 ip route add default dev nwg0 table 1 fi create_ipset "HIRKN" create_ipset "HIGOOGLE" create_ipset "HICUSTOM" #fill_ipset $RKN_SET_FILE "HIRKN" #fill_ipset $GOOGLE_SET_FILE "HIGOOGLE" #fill_ipset $CUSTOM_SET_FILE "HICUSTOM" #create_and_fill_ipset "HIRKN" $RKN_SET_FILE #create_and_fill_ipset "HIGOOGLE" $GOOGLE_SET_FILE #create_and_fill_ipset "HICUSTOM" $CUSTOM_SET_FILE exit 0 # /opt/etc/ndm/netfilter.d/99_hirkn-fwmarks.sh #!/bin/sh [ "$type" != "iptables" ] && exit 0 [ "$table" != "mangle" ] && exit 0 echo "HIRKN: Creating $type rule on table $table !" [ -z "$(iptables-save | grep HIRKN)" ] && \ iptables -w -A PREROUTING -t mangle -m set --match-set HIRKN dst,src -j MARK --set-mark 1 [ -z "$(iptables-save | grep HIGOOGLE)" ] && \ iptables -w -A PREROUTING -t mangle -m set --match-set HIGOOGLE dst,src -j MARK --set-mark 1 [ -z "$(iptables-save | grep HICUSTOM)" ] && \ iptables -w -A PREROUTING -t mangle -m set --match-set HICUSTOM dst,src -j MARK --set-mark 1 exit 0 В основном я использую сет HIRKN, в него закачивается rkn.lst, который берется отсюда: https://antifilter.download/list/allyouneed.lst Если у кого-то есть догадки, я с радостью выслушаю! P.S.: Число записей в сете не влияют, хоть одна запись, хоть 10000 - одно и то же Quote Link to comment Share on other sites More sharing options...
R0cky Posted October 8, 2022 Share Posted October 8, 2022 Ваша проблема связана с несовместимостью данного способа обхода блокировок с сетевыми ускорителями трафика (fastnat и hwnat). Либо отключайте эти ускорители через cli, либо воспользуйтесь моим советом в другой теме: https://forum.keenetic.com/topic/8106-выборочный-роутинг-через-vpn-туннель/?do=findComment&comment=152687 1 Quote Link to comment Share on other sites More sharing options...
nukdokplex Posted October 9, 2022 Author Share Posted October 9, 2022 11 час назад, R0cky сказал: Ваша проблема связана с несовместимостью данного способа обхода блокировок с сетевыми ускорителями трафика (fastnat и hwnat). Либо отключайте эти ускорители через cli, либо воспользуйтесь моим советом в другой теме: https://forum.keenetic.com/topic/8106-выборочный-роутинг-через-vpn-туннель/?do=findComment&comment=152687 Большое спасибо, информация из темы, на которую вы ссылались была весьма полезной, особенно CONNMARK. Итак, после бессонной ночи я смог заставить это всё работать. Скрипты выложил на gist для удобства: https://gist.github.com/nukdokplex/884c7d2a213f5a10344738184c6816b2 Quote Link to comment Share on other sites More sharing options...
R0cky Posted October 9, 2022 Share Posted October 9, 2022 (edited) Рекомендую в вашем скрипте использовать вместо iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark такую редакцию команды: iptables -t mangle -A PREROUTING -m set --match-set $IPSET dst -j CONNMARK --restore-mark Это позволит не восстанавливать маркировку всех без исключения пакетов в цепочке PREROUTING (что черевато нарушением логики работы политик роутера), а только тех, в которых ип адрес назначения включен в нужный список ipset Edited October 9, 2022 by R0cky Quote Link to comment Share on other sites More sharing options...
vasek00 Posted October 9, 2022 Share Posted October 9, 2022 7 часов назад, nukdokplex сказал: Итак, после бессонной ночи я смог заставить это всё работать. Вот еще вариант. Пост от 13 июня Маркируем пакеты для 0xffffd02 iptables -t mangle -I _NDM_HOTSPOT_PRERT -p tcp -i br0 -s 192.168.1.2/32 -j RETURN iptables -t mangle -I _NDM_HOTSPOT_PRERT -p tcp -i br0 -s 192.168.1.2/32 -j CONNMARK --save-mark iptables -t mangle -I _NDM_HOTSPOT_PRERT -p tcp -i br0 -s 192.168.1.2/32 -m set --match-set netflix dst -j MARK --set-mark 0xffffd02 Итог Chain _NDM_HOTSPOT_PRERT (1 references) pkts bytes target prot opt in out source destination 972 85639 MARK tcp -- br0 * 192.168.1.2 0.0.0.0/0 match-set netflix dst MARK set 0xffffd02 2410 305K CONNMARK tcp -- br0 * 192.168.1.2 0.0.0.0/0 CONNMARK save 2418 306K RETURN tcp -- br0 * 192.168.1.2 0.0.0.0/0 Описание Цитата Отличие CONNMARK от простого MARK в том, что первый маркирует соединения, а второй - пакеты (через ip rule пролетает именно пакет MARK). Тут два варианта один который выше второй который описан тут Вариант 1 - MARK -> CONNMARK --save-mark Chain _NDM_HOTSPOT_PRERT (1 references) pkts bytes target prot opt in out source destination 972 85639 MARK tcp -- br0 * 192.168.1.2 0.0.0.0/0 match-set netflix dst MARK set 0xffffd02 2410 305K CONNMARK tcp -- br0 * 192.168.1.2 0.0.0.0/0 CONNMARK save 2418 306K RETURN tcp -- br0 * 192.168.1.2 0.0.0.0/0 1. MARK пакета = "-j MARK --set-mark 0xffffd02" 2. CONNMARK save для сохранения метки пакета на все соединение "-j CONNMARK --save-mark" 3. "-j RETURN" в данном случае просто выйти из таблицы, так как после "--save-mark" пакет остается в данной таблице Скрытый текст ~ # iptables -t mangle -nvL Chain PREROUTING (policy ACCEPT 2860 packets, 725K bytes) pkts bytes target prot opt in out source destination 371 170K _NDM_PREROUTING_MC all -- * * 0.0.0.0/0 224.0.0.0/4 2860 725K _NDM_IPSEC_PREROUTING all -- * * 0.0.0.0/0 0.0.0.0/0 2860 725K _NDM_HOTSPOT_PRERT all -- * * 0.0.0.0/0 0.0.0.0/0 2860 725K _NDM_SSTPSERVER_MARK all -- * * 0.0.0.0/0 0.0.0.0/0 ... Chain _NDM_HOTSPOT_PRERT (1 references) pkts bytes target prot opt in out source ... Примечание порядок именно такой из-за ключа "iptables -I ...." ********** В вашем случае Вариант 2 - "CONNMARK --set-mark" -> "CONNMARK --restore-mark" iptables -t mangle -A PREROUTING -m conntrack --ctstate NEW -m set --match-set $IPSET dst -j CONNMARK --set-mark 0x1000 iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark где CONNMARK --restore-mark = восстановить метку пакета из метки всего соединения, заданного в CONNMARK. 1 Quote Link to comment Share on other sites More sharing options...
nukdokplex Posted October 9, 2022 Author Share Posted October 9, 2022 8 часов назад, R0cky сказал: Рекомендую в вашем скрипте использовать вместо iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark такую редакцию команды: iptables -t mangle -A PREROUTING -m set --match-set $IPSET dst -j CONNMARK --restore-mark Это позволит не восстанавливать маркировку всех без исключения пакетов в цепочке PREROUTING (что черевато нарушением логики работы политик роутера), а только тех, в которых ип адрес назначения включен в нужный список ipset Действительно, так и сделаю. Кое о чём я еще умолчал. Wireguard у меня поднят на Ubuntu-сервере, там надо было добавить в /etc/sysctl.conf вот эти строчки: net.ipv4.ip_forward=1 net.ipv4.tcp_fwmark_accept=1 net.ipv4.netfilter.ip_conntrack_fastnat=0 Последняя, как я понял, выключает Fastnat. Кстати говоря, некоторые сайты почему-то перестали открываться через выборочный роутинг, например speedtest.com. 2 часа назад, vasek00 сказал: Вариант 1 - MARK -> CONNMARK --save-mark Этот вариант тоже обязательно попробую, звучит неплохо. Quote Link to comment Share on other sites More sharing options...
R0cky Posted October 11, 2022 Share Posted October 11, 2022 Цитата нужен рабочий клиент который будет висеть в профиле WG2 Это ужасный костыль. Достаточно этому клиенту по каким либо причинам отвалиться и как я понимаю весь обход блокировок тут же упадет. Так? Quote Link to comment Share on other sites More sharing options...
vasek00 Posted October 11, 2022 Share Posted October 11, 2022 3 часа назад, R0cky сказал: Это ужасный костыль. Достаточно этому клиенту по каким либо причинам отвалиться и как я понимаю весь обход блокировок тут же упадет. Так? Не знаю о каком костыле идет речь в данном случае возможность использовать по максимуму нароботки самой прошивки и уменьшить кол-во строк/команд в скрипте, где некорректно написанная комманда может привести к непредсказуемым результатам. Не хотите " костыль " можно создать таблицу ручквми, суть была просто взять уже готовую таблицу маршрутизации которая промаркирована. Quote Link to comment Share on other sites More sharing options...
R0cky Posted October 12, 2022 Share Posted October 12, 2022 7 часов назад, vasek00 сказал: Не хотите " костыль " можно создать таблицу ручквми, суть была просто взять уже готовую таблицу маршрутизации которая промаркирована. Зачем нужен гемор с созданием своих таблиц, когда есть вполне рабочий вариант 2 (по сути, использующий тот же метод) без всяких таблиц и заворачивания в них пакетов? Quote Link to comment Share on other sites More sharing options...
R0cky Posted October 12, 2022 Share Posted October 12, 2022 (edited) 8 часов назад, vasek00 сказал: Не знаю о каком костыле идет речь в данном случае возможность использовать по максимуму нароботки самой прошивки Использовать наработки прошивки это правильно и здорово. Но не ценой постоянного поддержания аптайма дополнительного устройства в домашней сети только для целей обхода блокировок. Это вносит очень большую не стабильность и общую не надежность метода. Особенно когда обходом блокировок пользуешься не только из домашней сети, но и не находясь дома при помощи впн подключений к роутеру. Edited October 12, 2022 by R0cky Quote Link to comment Share on other sites More sharing options...
vasek00 Posted October 12, 2022 Share Posted October 12, 2022 2 часа назад, R0cky сказал: Зачем нужен гемор с созданием своих таблиц, когда есть вполне рабочий вариант 2 (по сути, использующий тот же метод) без всяких таблиц и заворачивания в них пакетов? Удачи вам в данном варианте. Каждый решает сам что и как использовать. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.