mystique_man Posted February 17, 2020 Share Posted February 17, 2020 (edited) В 11.02.2020 в 10:24, ankar84 сказал: Сейчас попробовал установить ваши скрипты. Вот сразу несколько моментов для тех, кто делает это с нуля. Ставим утилиту dig opkg install bind-dig Делаем скрипты исполняемыми: chmod +x /opt/bin/unblock_vpn.sh chmod +x /opt/etc/ndm/ifstatechanged.d/100-add_unblock_route.sh Делаем ссылку в крон ln -s /opt/bin/unblock_vpn.sh /opt/etc/cron.hourly/01unblock Так же подправил шлюз, имя подключения и имя файла с целями на выборочную маршрутизацию на свои. Дополнительно отмечу, что данная схема по умолчанию работает для устройств в Домашней сети (те устройства, что ходят через интерфейс br0) Если вы, к примеру, подключаетесь к роутеру по L2TP и хотите так же обращаться к нужным ресурсам через VPN то необходимо добавить следующую строку: ip rule add iif l2tp0 table 1000 priority 1778 То есть в моем случае скрипт уже будет выглядеть вот так: #!/bin/sh [ "$1" == "hook" ] || exit 0 [ "$change" == "link" ] || exit 0 [ "$id" == "Wireguard0" ] || exit 0 case ${id}-${change}-${connected}-${link}-${up} in Wireguard0-link-no-down-down) ip route flush table 1000 ip rule del iif br0 table 1000 priority 1777 2>/dev/null ip rule del iif l2tp0 table 1000 priority 1778 2>/dev/null ;; Wireguard0-link-yes-up-up) ip rule add iif br0 table 1000 priority 1777 2>/dev/null ip rule add iif l2tp0 table 1000 priority 1778 2>/dev/null /opt/bin/unblock_vpn.sh & ;; esac exit 0 Итог: Сделал по Вашей схеме (также хочу чтобы бы обход был у l2tp клиентов) Но, не взлетело. Ручной запуск в /opt/etc/ndm/ifstatechanged.d/ вызывает только реконект eoip/ipsec/l2tp соединений, таблица при этом остаётся пустой. Что можно копнуть?) Edited February 17, 2020 by karimovrt Quote Link to comment Share on other sites More sharing options...
mystique_man Posted February 17, 2020 Share Posted February 17, 2020 Немного поковырял....всё равно не завелось. root@Onemix:~# ip rule list 0: from all lookup local 10: from all fwmark 0xffffcff lookup main 248: from all lookup 248 1776: from all lookup 1000 32766: from all lookup main 32767: from all lookup default root@Onemix:~# ip route show table 1000 root@Onemix:~# Таблица пустая почему-то... Quote Link to comment Share on other sites More sharing options...
ankar84 Posted February 17, 2020 Author Share Posted February 17, 2020 47 минут назад, karimovrt сказал: Сделал по Вашей схеме (также хочу чтобы бы обход был у l2tp клиентов) Но, не взлетело. Давайте по порядку. Выполнили необходимые переименования имен интерфейсов под свой VPN туннель? В том же файле /opt/etc/ndm/ifstatechanged.d/100-add_unblock_route.sh нужно сделать замены в следующих строках вместо wireguard имя своего интерфейса [ "$id" == "wireguard" ] || exit 0 wireguard-link-no-down-down) wireguard-link-yes-up-up) А в строках 10 и 13 предлагаю использовать более универсальную команду, чтобы из всех источников пакеты отправлялись в туннель, если адрес назначения из таблицы 1000 ip rule add from all table 1000 priority 1776 Скорее всего нужный вам интерфейс носит название VPNL2TPServer и тогда скрипт должен выглядеть вот так: #!/bin/sh [ "$1" == "hook" ] || exit 0 [ "$change" == "link" ] || exit 0 [ "$id" == "VPNL2TPServer" ] || exit 0 case ${id}-${change}-${connected}-${link}-${up} in VPNL2TPServer-link-no-down-down) ip route flush table 1000 ip rule del from all table 1000 priority 1776 2>/dev/null ;; VPNL2TPServer-link-yes-up-up) ip rule add from all table 1000 priority 1776 2>/dev/null /opt/bin/unblock_vpn.sh & ;; esac exit 0 Но тут я могу и ошибаться, пробуйте. 57 минут назад, karimovrt сказал: Ручной запуск в /opt/etc/ndm/ifstatechanged.d/ вызывает только реконект eoip/ipsec/l2tp соединений, таблица при этом остаётся пустой. Нужно понять, заполняется ли вообще таблица. Что дает выполнение команды /opt/bin/unblock_vpn.sh ? Есть ли у вас файл /opt/etc/unblock-vpn.txt ? Есть ли в нем нужные вам данные? В файле /opt/bin/unblock_vpn.sh, так же нужно провести несколько замен под свои данные: ip route add table 1000 $cidr via 10.64.0.1 dev nwg1 2>/dev/null ip route add table 1000 $addr via 10.64.0.1 dev nwg1 2>/dev/null awk '{system("ip route add table 1000 "$1" via 10.64.0.1 dev nwg1 2>/dev/null")}' Здесь нужно заменить 10.64.0.1 на IP адрес роутера интерфейса вашего L2TP туннеля, и nwg1 нужно заменить на имя вашего интерфейса L2TP туннеля. Посмотреть имена всех интерфейсов можно командой ifconfig Затем пробуем сначала успешно забить таблицу адресами и сетями и проверяем ее заполненность командой ip route show table 1000 И если таблица заполнена нужными нам данными можно приступать к следующим шагам в диагностике запустить скрипт /opt/etc/ndm/ifstatechanged.d/100-add_unblock_route.sh и проверить таблицу маршрутизации ip rule list Там должно быть правило 1776, которое направляет все пакеты на адреса и сети из таблицы 1000 в нужный туннель. Если такое правило есть то можно приступать к последней стадии диагностики - проверять работу хука на остановку и поднятие туннеля. В веб интерфейсе выключить тумблер туннеля. Подождать, проверить таблицу 1000 и список маршрутизации -там должно быть чисто. Затем снова включить тумблер туннеля и немного подождать. Затем снова проверить таблицу 1000 и список маршрутизации - таблица должна быть заполнена и на нее должен быть маршрут. Quote Link to comment Share on other sites More sharing options...
ankar84 Posted February 17, 2020 Author Share Posted February 17, 2020 6 минут назад, karimovrt сказал: 1776: from all lookup 1000 Правило есть, это очень хорошо. Осталось разобраться с заполнением таблицы. Я выше описал как это сделать. Quote Link to comment Share on other sites More sharing options...
mystique_man Posted February 17, 2020 Share Posted February 17, 2020 (edited) 11 минуту назад, ankar84 сказал: Правило есть, это очень хорошо. Осталось разобраться с заполнением таблицы. Я выше описал как это сделать. Интерфейсы везде поменял (nwg0); файл на месте (его удаление - вызывает ошибку скрипта - нет файла, что логично). Один раз (час назад таблица даже заполнилась, но я через vpn и фактическую работу проверить не смог, и собственно начал дальше изучать, и нашёл ip rule del from all table 1000 priority 1776 2>/dev/null). ip route add table 1000 $cidr via 10.64.0.1 - тут именно адрес роутера? Он у меня 10.0.0.4, а адрес вышестоящего (amazon vps) 10.0.0.1 [ "$id" == "wireguard" ] || exit 0 wireguard-link-no-down-down) Без нуля? Или с нулём как он написан с startup конфиге? Edited February 17, 2020 by karimovrt Quote Link to comment Share on other sites More sharing options...
ankar84 Posted February 17, 2020 Author Share Posted February 17, 2020 (edited) 1 час назад, karimovrt сказал: ip route add table 1000 $cidr via 10.64.0.1 - тут именно адрес роутера? Он у меня 10.0.0.4, а адрес вышестоящего (amazon vps) 10.0.0.1 Адрес роутера на интерфейсе VPN. Видимо да, 10.0.0.4 1 час назад, karimovrt сказал: [ "$id" == "wireguard" ] || exit 0 wireguard-link-no-down-down) Тут я смотрел в журнале роутера когда дергал тумблер своего wireguard подключения. Что в логах написано, то и нужно в этот скрипт записать. 1 час назад, karimovrt сказал: Без нуля? Или с нулём как он написан с startup конфиге? В моем случае без нуля (имя брал из журнала Диагностики роутера). У вас, возможно и с нулем, посмотрите как определяется в логах. Обновление: сейчас у себя в логах глянул, у меня тоже с нулем - а именно вот так Wireguard0 называется это подключение. Но точно было с маленькой буквы и без нуля ранее. А вот на 3.3.10 вот так. Пойду проверю работу схемы. Обновление 2: да, у меня и в диагностике Wireguard0 и в скрипте Wireguard0 и все работает. Вот как выглядит мой скрипт: ~ # cat /opt/etc/ndm/ifstatechanged.d/100-add_unblock_route.sh #!/bin/sh [ "$1" == "hook" ] || exit 0 [ "$change" == "link" ] || exit 0 [ "$id" == "Wireguard0" ] || exit 0 case ${id}-${change}-${connected}-${link}-${up} in Wireguard0-link-no-down-down) ip route flush table 1000 ip rule del from all table 1000 priority 1777 ;; Wireguard0-link-yes-up-up) ip rule add from all table 1000 priority 1777 /opt/bin/unblock_vpn.sh & ;; esac exit 0 Edited February 17, 2020 by ankar84 Quote Link to comment Share on other sites More sharing options...
mystique_man Posted February 17, 2020 Share Posted February 17, 2020 Таблица начала заполняться, но впн клиент также не открывает сайты через туннель. Долго долго висит без ответа отключение wiregaurd на сервере и на клиенте vpn ожидаемо заглушка от провайдера появляется т.е. проблема в транзите трафика между впн клиентом и wireguard интерфейсом Quote Link to comment Share on other sites More sharing options...
ankar84 Posted February 17, 2020 Author Share Posted February 17, 2020 7 минут назад, karimovrt сказал: Долго долго висит без ответа Тогда давайте посмотрим traceroute до узла в списке. Как я писал выше, для проверки я добавил 2ip.ua в список обхода. Вот что получается у меня: ~ # traceroute 2ip.ua traceroute to 2ip.ua (77.123.139.189), 30 hops max, 38 byte packets 1 172.16.82.5 (172.16.82.5) 173.835 ms 173.622 ms 173.751 ms 2 внешний адрес туннеля То есть сразу же первым хопом мы должны получить второй конец тоннеля (в вашем случае это кажется будет 10.0.0.1) а у меня настроено по инструкциям из базы знаний сервер 172.16.82.1 и пир 172.16.82.5 Quote Link to comment Share on other sites More sharing options...
mystique_man Posted February 17, 2020 Share Posted February 17, 2020 (edited) 57 минут назад, ankar84 сказал: Тогда давайте посмотрим traceroute до узла в списке. Как я писал выше, для проверки я добавил 2ip.ua в список обхода. Вот что получается у меня: На роутере так и есть. starting traceroute to rutor.info... traceroute to rutor.info (91.132.60.13), 30 hops maximum, 84 byte packets. 1 10.0.0.1 (10.0.0.1) 76.201 ms 76.125 ms 75.846 ms А на клиенте vpn превышен интервал ожидания для запроса. Если запустить пинг, то тоже самое. Отключаешь wireguard на роутере - пинг сразу начинает проходить. Интерфейсы все в режиме private. Попробую сейчас в l2tp до того же сервера завернуть, а не через wireguard Edited February 17, 2020 by karimovrt Quote Link to comment Share on other sites More sharing options...
ankar84 Posted February 17, 2020 Author Share Posted February 17, 2020 8 минут назад, karimovrt сказал: А на клиенте vpn превышен интервал ожидания для запроса. В настройках пира туннеля Wireguard должна быть вот такая разрешенная сеть 0.0.0.0/0 (весть интернет) Quote Link to comment Share on other sites More sharing options...
mystique_man Posted February 17, 2020 Share Posted February 17, 2020 2 минуты назад, ankar84 сказал: В настройках пира туннеля Wireguard должна быть вот такая разрешенная сеть 0.0.0.0/0 (весть интернет) так и стоит. Quote Link to comment Share on other sites More sharing options...
mystique_man Posted February 17, 2020 Share Posted February 17, 2020 (edited) Чертовщина какая-то... Поменял везде интерфейс на ppp0 (l2tp коннект до vps), поменял ip. Сделал ребут. Пощелкал. И таблица пустая, и в ip rule list нету записи нужной. В скрипте vpn-unlock в bin нужна строка ip route flush table 1000 ? Или достаточно этой же строки в /opt/etc/ndm/ifstatechanged.d/100-add_unblock_route.sh? Edited February 17, 2020 by karimovrt Quote Link to comment Share on other sites More sharing options...
mystique_man Posted February 17, 2020 Share Posted February 17, 2020 Всё. У меня мозг взорвался.... Автоматически реконект l2tp до vps сервера ничего не делает. Когда руками запустил скрипт обновления таблицы маршрутов, и добавил их командой ip rule add from all table 1000 priority 1776 Убедился, что таблица полная, маршруты есть...получив ровно то, что было с wireguard - vpn клиенты заблокированные ресурсы вообще перестают открывать и пинговать. Отключаешь коннект до vps - пинг начинает проходить. Quote Link to comment Share on other sites More sharing options...
ankar84 Posted February 17, 2020 Author Share Posted February 17, 2020 20 минут назад, karimovrt сказал: Всё. У меня мозг взорвался.... Моих знаний сети и Linux уже тоже явно не хватает для решения вашей проблемы. Нужно звать @avn или еще кого-то из гуру. Quote Link to comment Share on other sites More sharing options...
mystique_man Posted February 17, 2020 Share Posted February 17, 2020 В общем для тех кто использует ip rule add from all table 1000 priority 1776 и хочет правила обхода для VPN клиентов роутера, НЕ ЗАБУДЬТЕ поставить галочку "Использовать для выхода в интернет" в свойствах Вашего vpn который используется для обхода блокировок и сместить ему приоритет вниз. 1 Quote Link to comment Share on other sites More sharing options...
Станислав Поветьев Posted March 2, 2020 Share Posted March 2, 2020 Странные вещи происходят. Сменил способ подключения к VPN c L2TP\IPSEC на WireGuard из-за нагрузки на проц Экстры и как следствия пониженной скорости канала. Поменял в двух скриптах L2TP на Wireguard0 и ppp0 на wg0, и адрес шлюза, но в таблицу 1000 не попадает ни одна запись. Сами скрипты выполняются по событиям, в журнале появляется запись что добавлено 0 айпишек. В ручную команда ip route add table 1000 8.8.8.8 via 10.0.0.1 dev nwg0 нормально добавляет в таблицу 1000 запись, а вот скрпитом нет, отчего я делаю вывод что проблема в той части скрипта, которая преобразует имя в адрес. Но ведь ничего кроме интерфейса не менялось. Есть мысли? Quote Link to comment Share on other sites More sharing options...
avn Posted March 2, 2020 Share Posted March 2, 2020 4 hours ago, Станислав Поветьев said: Странные вещи происходят. Сменил способ подключения к VPN c L2TP\IPSEC на WireGuard из-за нагрузки на проц Экстры и как следствия пониженной скорости канала. Поменял в двух скриптах L2TP на Wireguard0 и ppp0 на wg0, и адрес шлюза, но в таблицу 1000 не попадает ни одна запись. Сами скрипты выполняются по событиям, в журнале появляется запись что добавлено 0 айпишек. В ручную команда ip route add table 1000 8.8.8.8 via 10.0.0.1 dev nwg0 нормально добавляет в таблицу 1000 запись, а вот скрпитом нет, отчего я делаю вывод что проблема в той части скрипта, которая преобразует имя в адрес. Но ведь ничего кроме интерфейса не менялось. Есть мысли? Так может надо было не на wg0, а на nwg0 поменять в скрипте? Quote Link to comment Share on other sites More sharing options...
Станислав Поветьев Posted March 2, 2020 Share Posted March 2, 2020 1 час назад, avn сказал: Так может надо было не на wg0, а на nwg0 поменять в скрипте? Очепятка у меня в посте. Прописано nwg0 Говорю же что если в терминале лапками набрать ip route add table 1000 1.1.1.1 via 10.0.0.3 dev nwg0 то таблица заполнится. А вот при вызове из скрипта нет. Не понимаю где собака зарыта Quote Link to comment Share on other sites More sharing options...
zyxmon Posted March 2, 2020 Share Posted March 2, 2020 Может кому будет интересно - я использую такой вариант - http://forums.zyxmon.org/viewtopic.php?f=5&t=5738&p=19019 Скрипт преобразовывает доменные имена в ip - сколько есть, столько ip и "маршрутизируется". Работал раньше через openvpn, сейчас через wireguard. Про самостоятельную настройку wireguard сервака на VPS хостинге тут - http://forums.zyxmon.org/viewtopic.php?f=14&t=5758 1 Quote Link to comment Share on other sites More sharing options...
Станислав Поветьев Posted March 3, 2020 Share Posted March 3, 2020 Заработало, я сменил таблицу с 1000 на 1010 и айпишки стали добавляться в таблицу. Видимо где то старый сетевой интерфейс ppp0 прикипел к таблице 1000. А разве после перезагрузки таблицы не очищаются и не создаются заново? Quote Link to comment Share on other sites More sharing options...
fateev Posted March 31, 2020 Share Posted March 31, 2020 Накидал телеграмм бота на коленке для добавления новых адресов на основе Управление роутером по Telegram Если кто сам не хочет разбираться вот содержимое bashbot.sh : #!/opt/bin/bash UNBLOCKSCRIPT='/opt/bin/unblock_vpn.sh' UNBLOCKLIST='/opt/etc/unblock_ips.txt' UNAME='' TOKEN='' USEPROXY='' URL='https://api.telegram.org/bot'$TOKEN MSG_URL=$URL'/sendMessage?chat_id=' UPD_URL=$URL'/getUpdates?offset=' OFFSET=0 TIMEOUT='&timeout=30' function send_message { res=$(curl $USEPROXY --insecure --data-urlencode "text=$2" "$MSG_URL$1&") } while true; do { res=$(curl $USEPROXY --insecure $UPD_URL$OFFSET$TIMEOUT) TARGET=$(echo $res | JSON.sh | egrep '\["result",0,"message","chat","id"\]' | cut -f 2) OFFSET=$(echo $res | JSON.sh | egrep '\["result",0,"update_id"\]' | cut -f 2) MESSAGE=$(echo $res | JSON.sh -s | egrep '\["result",0,"message","text"\]' | cut -f 2 | cut -d '"' -f 2) USER=$(echo $res | JSON.sh | egrep '\["result",0,"message","from","username"\]' | cut -f 2 | cut -d '"' -f 2) [ -z "$MESSAGE" ] || echo "[$(date +%Y.%m.%d_%H:%M:%S)][$USER] $MESSAGE" >> /opt/var/log/bashbot.log OFFSET=$((OFFSET+1)) if [[ "$USER" != "$UNAME" ]]; then continue fi if [ $OFFSET != 1 ]; then if echo "$MESSAGE" | grep 'add .*'; then addr=$(echo "$MESSAGE" | grep 'add .*' | sed 's|.* ||') if grep "$addr" "$UNBLOCKLIST"; then msg="Has already." else echo "$addr" >> "$UNBLOCKLIST" source "$UNBLOCKSCRIPT" & msg="$addr has been added." fi elif echo "$MESSAGE" | grep 'list'; then msg="$(cat /opt/etc/unblock_ips.txt)" elif echo "$MESSAGE" | grep 'table'; then msg="$(ip route show table 1000)" else msg="$MESSAGE" fi send_message "$TARGET" "$msg" fi } &>/dev/null; done UNAME - имя в телеграмм USEPROXY - если используем прокси, как я ("--proxy <server>:<port> -U <login>:<password>"), либо оставляем пустым и перенаправляем все запросы через table 1000 Quote Link to comment Share on other sites More sharing options...
nurman Posted September 16, 2020 Share Posted September 16, 2020 (edited) Добрый день прошу помощи Есть OpenVPN, название: FFF-opvpn, Шлюз: 10.12.1.90 Что сделал: 1) opkg install bind-dig 2 ) mcedit /opt/bin/unblock_vpn.sh #!/bin/sh cut_local() { grep -vE 'localhost|^0\.|^127\.|^10\.|^172\.16\.|^192\.168\.|^::|^fc..:|^fd..:|^fe..:' } until ADDRS=$(dig +short google.com @localhost -p 53) && [ -n "$ADDRS" ] > /dev/null 2>&1; do sleep 5; done ip route flush table 1000 while read line || [ -n "$line" ]; do [ -z "$line" ] && continue [ "${line:0:1}" = "#" ] && continue cidr=$(echo $line | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]{1,2}') if [ ! -z "$cidr" ]; then ip route add table 1000 $cidr via 10.12.1.90 dev ovpn_br0 2>/dev/null continue fi addr=$(echo $line | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}') if [ ! -z "$addr" ]; then ip route add table 1000 $addr via 10.12.1.90 dev ovpn_br0 2>/dev/null continue fi dig A +short $line @localhost -p 53 | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | cut_local | awk '{system("ip route add table 1000 "$1" via 10.12.1.90 dev ovpn_br0 2>/dev/null")}' done < /opt/etc/unblock-vpn.txt 3) chmod +x /opt/bin/unblock_vpn.sh 4) mcedit /opt/etc/ndm/ifstatechanged.d/100-add_antizapret_route.sh #!/bin/sh [ "$1" == "hook" ] || exit 0 [ "$change" == "link" ] || exit 0 [ "$id" == "FFF-opvpn" ] || exit 0 case ${id}-${change}-${connected}-${link}-${up} in FFF-opvpn-link-no-down-down) ip route flush table 1000 ip rule del iif br0 table 1000 priority 1777 2>/dev/null ;; FFF-opvpn-link-yes-up-up) ip rule add iif br0 table 1000 priority 1777 2>/dev/null /opt/bin/unblock_vpn.sh & ;; esac exit 0 5) chmod +x mcedit /opt/etc/ndm/ifstatechanged.d/100-add_antizapret_route.sh 6) mcedit /opt/etc/unblock-vpn.txt kinogo.by z1.fm И не работает, сайты заблокированы. При выполнении: ip route show table 1000 ничего не отображается Edited September 16, 2020 by nurman Quote Link to comment Share on other sites More sharing options...
nurman Posted September 16, 2020 Share Posted September 16, 2020 Получилось сделать ip route show table 1000 ~ # ip route show table 1000 104.18.56.14 via 10.12.0.78 dev ovpn_br0 104.18.57.14 via 10.12.0.78 dev ovpn_br0 104.31.86.209 via 10.12.0.78 dev ovpn_br0 104.31.87.209 via 10.12.0.78 dev ovpn_br0 172.67.137.2 via 10.12.0.78 dev ovpn_br0 172.67.168.48 via 10.12.0.78 dev ovpn_br0 186.2.163.245 via 10.12.0.78 dev ovpn_br0 Где 10.12.0.78 это шлюз opvpn (в Статических маршрутах), но обход блокировки не работает Quote Link to comment Share on other sites More sharing options...
nomadfromx Posted September 21, 2020 Share Posted September 21, 2020 Добрый день, всем! Прошу помощи. Настроил скрипт unblock-static-route - работал хорошо (не считая, что постоянно приходилоь наполнять vpnsitelist.txt. Подключение было через PPPOE (МТС) + OpenVPN-клиент. Сейчас переключился на другого провайдера - ДОМ.РУ, у которого какое-то хитрое подключение (не нужно указывать никакие настройки в роутере, типа PPPOE, L2TP и так далее, а привязка идет через start.domru.ru, какое-то хитрое DHCP). Я вижу, что на роутере поднялось OpenVPN-соединение, также вижу, что маршруты добавились скриптом, но реально не проходит соединение к выбранным адресам через клиента OpenVPN. Подскажите, что еще нужно сделать? 1 Quote Link to comment Share on other sites More sharing options...
xr0m3oz Posted October 31, 2020 Share Posted October 31, 2020 Есть где то инструкция как можно этот скрипт запустить и куда его поставить если у меня Windows 10? Quote Link to comment Share on other sites More sharing options...
zyxmon Posted November 1, 2020 Share Posted November 1, 2020 8 часов назад, xr0m3oz сказал: если у меня Windows 10? То Вам на форум Microsoft. Тут кинетики обсуждают. Quote Link to comment Share on other sites More sharing options...
Макс Грибков Posted January 14, 2021 Share Posted January 14, 2021 (edited) Коллеги, подскажите!!! Скрипт из первого поста темы отлично работал два года. Но флешка сломалась. Пришлось переустановить entware полностью. И неожиданно обнаружилось, что в последнем entware больше нет egrep. Есть только grep. ~ # egrep -sh: egrep: not found И эта сточка for j in `nslookup $i | egrep -v 127.0.0.1 | awk '/Addr/ {print $3}' | egrep -v ":"`; do Выдает вот такую ошибку: Opkg::Manager: /opt/etc/ndm/ifstatechanged.d/addroute.sh: /opt/etc/ndm/ifstatechanged.d/addroute.sh: line 1: egrep: not found. Заменил egrep тупо на grep. Оно в целом работает, но цикл выполняется несколько лишних раз: Янв 14 18:50:51 root Add 37.252.15.56 host to static route to unblock kino.pub Янв 14 18:50:52 root Add 195.82.146.214 host to static route to unblock rutracker.org ... Янв 14 18:50:57 root Host 37.252.15.56 is already in static route to unblock kino.pub Янв 14 18:50:58 root Host 195.82.146.214 is already in static route to unblock rutracker.org И вроде бы страшного-то ничего нет, но как-то не аккуратно. Есть какое-нибудь решение проблемы? Как добавить egrep? Ну или как-то можно скрипт доработать под чистый grep? ЗЫ. Хотя, я может чего и не понял, может так и задумано? Может egrep тут и не виноват? Спасибо Edited January 14, 2021 by Макс Грибков Quote Link to comment Share on other sites More sharing options...
TheBB Posted January 14, 2021 Share Posted January 14, 2021 ~ # cat /opt/bin/egrep #!/bin/sh exec grep -E "$@" ~ # ~ # cat /opt/bin/fgrep #!/bin/sh exec grep -F "$@" ~ # Quote Link to comment Share on other sites More sharing options...
Макс Грибков Posted January 14, 2021 Share Posted January 14, 2021 Спасибо! Все работает. Quote Link to comment Share on other sites More sharing options...
Zeleza Posted February 16, 2021 Share Posted February 16, 2021 Все здравствуйте) Во первых, позвольте поблагодарить авторов за труды - очень полезные скрипты в наше время. Благодарю Вас. Теперь, пару слов о собственном опыте установки данных скриптов. Основные затруднения были вызваны тем, что не было понимания какой конкретно адрес шлюза вставлять необходимо и какое название интерфейса вписывать. Задача моя тем более усложнялась, что я выбрал вариант туннеля c IKEV2. Так же, проблема возникала при добавлении "хостов" или имен сайтов в файл /opt/etc/unblock-vpn.txt - их адреса просто не добавлялись в таблицу 1000 (возможно я что-то делал не так). Ниже привожу немного усовершенствованный скрипт /opt/bin/unblock_vpn.sh, созданный исключительно на основе двух предыдущих (еще раз благодарность авторам) Усовершенствования следующие: Автоматическая подстановка адреса шлюза и названия интерфейса туннеля (нет необходимости в ручную что-либо подставлять). Вывод дополнительной отладочной информации в консоль и в файл лога самого устройства В файл /opt/etc/unblock-vpn.txt можно добавлять IP адреса, например 37.252.15.56 (было ранее) Целые сегменты сети, например 91.108.16.0/22 (было ранее) Имена хостов/сайтов, например kinogo.by (ранее не всегда в таблицу прописывались их адреса). Ограничения скрипта следующие: Подстановка IP адреса шлюза и названия интерфейса туннеля будут работать корректно ТОЛЬКО в случае, если было поднято не более одного VPN туннеля, адрес, которого отображается при исполнении команды ip rule list Сам скрипт исполняется с небольшой задержкой из-за возврата к предыдущему варианту поиска IP адресов для названия сайтов при помощи команды nslookup, вместо dig. В связи с использованием команды nslookup иногда у меня появлялась ошибка "nslookup: can't resolve 'XXXX.XX': Temporary failure in name resolution". Лечил перезагрузкой устройства. Доработанный код скрипта /opt/bin/unblock_vpn.sh: #!/bin/sh log_mess="========== The route table 1000 is being filled in ============" echo $log_mess IP_ROUTE="$(ip rule list | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}')" INFACE="$(ifconfig | grep "$IP_ROUTE" -B1 | head -1 |cut -d " " -f1)" log_mess="Interface is $INFACE and gateway is $IP_ROUTE" echo $log_mess until ADDRS=$(dig +short google.com @localhost -p 53) && [ -n "$ADDRS" ] > /dev/null 2>&1; do sleep 5; done ip route flush table 1000 while read line || [ -n "$line" ]; do [ -z "$line" ] && continue [ "${line:0:1}" = "#" ] && continue cidr=$(echo $line | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]{1,2}') if [ ! -z "$cidr" ]; then ip route add table 1000 $cidr via "$IP_ROUTE" dev "$INFACE" 2>/dev/null log_mess="Add $cidr NET to static route to unblock" echo $log_mess logger $log_mess continue fi addr=$(echo $line | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}') if [ -z "$addr" ]; then addr=$(nslookup "$line" | grep -Ev 127.0.0.1 | awk '/Addr/ {print $3}' | grep -Ev ":" ) fi if [ ! -z "$addr" ]; then for ip_host in $addr do ip route add table 1000 $ip_host via "$IP_ROUTE" dev "$INFACE" 2>/dev/null log_mess="Add $ip_host HOST to static route to unblock $line site" echo $log_mess logger $log_mess continue done fi done < /opt/etc/unblock-vpn.txt echo "---------------------------------------------------" log="$(ip route show table 1000 | wc -l) ips added to route table 1000" echo $log logger $log log_mess="========== The route table is filled in ============" echo $log_mess Скрипт /opt/etc/ndm/ifstatechanged.d/100-add_antizapret_route.sh не менял, так как не ведаю пока, как автоматом получить название интерфейса туннеля из CLI в Entware. Если такая возможность существует - прошу знающих людей поделиться. Возможно есть и иные варианты. 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.