Jump to content
DennoN

Обход блокировок с использованием bird4

Recommended Posts

Так как у меня отвалился почему-то BGP, настроенный по инструкции https://keenetic-gi.ga/2019/01/22/bgp_routing.html

То решил настроить обход через статические маршруты, через тот же самый bird4

 

1) Нужно установить сам bird4

opkg install bird1-ipv4

далее меняем конфиг

vi /opt/etc/bird4.conf

сам конфиг:

log syslog all;
log stderr all;

router id 123.123.123.123; # current external ip

function martians()
{
        return net ~ [
                #104.20.41.23/32-,      #4pda.ru
                100.64.0.0/10+,
                169.254.0.0/16+,
                172.16.0.0/12+,
                192.168.0.0/16+,
                10.0.0.0/8+,
                127.0.0.0/8+,
                224.0.0.0/4+,
                240.0.0.0/4+,
                0.0.0.0/32-,
                0.0.0.0/0{0,7}
        ];
}

protocol device {
        scan time 15;
}

protocol kernel kernel_routes {
        scan time 60;
        import none;
        export all;
        kernel table 1000; # kernel routing table number
}


protocol static static_routes {
        import all;
        include "/opt/etc/bird4-routes.conf";
        #route 192.168.X.Y/24 via 192.168.A.B;
        route 104.20.41.23/32 via "eth3";       #4pda.ru
        route 104.20.42.23/32 via "eth3";
}

Пояснения 123.123.123.123 можно заменить на текущий адрес, но так как мы не используем BGP, то по сути роли не играет.

Так же можно удалить строки route 104.20.41.23/32 и далее. У меня они в конфиге для исключения маршрутизации через тунель. Если хотите оставить, то убедитесь, что eth3 - это интерфейс провайдера. Для этого выполняем команду ifconfig и смотрим название интерфейса, которому присвоен адрес провайдера.

 

2) Далее надо создать скрипт, который создает/удаляет таблицу и запускает/останавливает службу, если впн поднялся/упал

vi /opt/etc/ndm/ifstatechanged.d/010-add_antizapret_route.sh

сам скрипт:

#!/bin/sh

[ "$1" == "hook" ] || exit
[ "$id" == "L2TP0" ] || exit

case ${change}-${connected}-${link}-${up} in
    link-no-down-down)
        ip rule del table 1000
        /opt/etc/init.d/S04bird1-ipv4 stop
    ;;
    link-yes-up-up)
        if [ -z "$(ip rule | grep 1000)" ]; then
                ip rule add table 1000
        fi
        /opt/etc/init.d/S04bird1-ipv4 start
    ;;
esac

Тут нужно поменять "$id" == "L2TP0" на то имя, которое у вас прописано кинетиком. Для этого выполняем:

ndmc -c "show interface"

Находим нужный интерфейс и смотрим на строку Interface, name = "L2TP0"

В вашем случае это может быть не L2TP0, а что-то другое, соответственно в скрипте выше надо поменять название.

Не забываем выполнить

chmod +x /opt/etc/ndm/openvpn-route-up.d/010-add_antizapret_route.sh

 

3) Создаем скрипт, который будет каждый день обновлять списки блокировки

vi /opt/etc/cron.daily/add-bird4_routes.sh

Если у вас нет папки cron.daily, то скорее всего у вас не установлен крон, выполняем:

opkg install cron

Содержимое самого скрипта:

#!/bin/sh

curl https://antifilter.download/list/allyouneed.lst | sed 's/^/route /' | sed 's/$/ via "ppp0";/' > /opt/etc/bird4-routes.conf

/opt/etc/init.d/S04bird1-ipv4 reconfigure

Здесь нужно поменять ppp0 на имя интерфейса вашего впн тунеля (не путать с названием, которое мы узнавали до этого!!!)

Выполняем ifconfig и смотрим, какой интерфейс указан для впн по ip адресу.

Не забываем выполнить:

chmod +x /opt/etc/cron.daily/add-bird4_routes.sh

 

4) Запуск. Выполняем только что созданный скрипт

ip rule add table 1000
/opt/etc/cron.daily/add-bird4_routes.sh
/opt/etc/init.d/S04bird1-ipv4 start

проверить, что все работает можно выполнив

ip route list table 1000

в выводе будет большой список адресов.

Так же команда

ip rule list

Покажет, есть ли вообще таблица.

 

На этом все! Спасибо Александру Рыжкову за изначальную инструкцию по настройке bird4, на основе которой и был сделан этот мануал.

  • Thanks 1

Share this post


Link to post
Share on other sites

Дополнение. Настроил резолвинг доменов и добавление в таблицу маршрутизации через bird

Итак:

1) Нужно создать скрипт:

vi /opt/root/addip.sh

Содержимое:

#!/bin/sh

cut_local() {
        grep -vE 'localhost|^0\.|^127\.|^10\.|^172\.16\.|^192\.168\.|^::|^fc..:|^fd..:|^fe..:'
}

#Добавляем адреса без масок
cat $1 | awk '{print $1}' | awk '/^[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*$/' | sed 's/^/route /' | sed  's/$/\/32 via "'$2'";/' > $3
#Добавляем адреса с масками
cat $1 | awk '{print $1}' | awk '/^[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*[\/]/' | sed 's/^/route /' | sed  's/$/ via "'$2'";/' >> $3

until ADDRS=$(dig +short google.com @localhost -p 53) && [ -n "$ADDRS" ] > /dev/null 2>&1; do sleep 5; done

#Узнаем адреса доменов
echo "$(cat $1 | awk '!/^[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[1-9][0-9]/ && !/^#/ && NF {print $1}')" | {
        while IFS= read -r line; do
                dig A +short $line @localhost -p 53 | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | cut_local | awk '{print "route "$1"/32 via \"'$2'\";"}' >> $3
        done
}

Делаем его исполняемым:

chmod +x /opt/root/addip.sh

Скрипт получает на вход 3 аргумента: файл с доменами и адресами, название туннеля и конечный файл с маршрутами

2) Редактируем скрипт автообновления адресов в кроне

vi /opt/etc/cron.daily/add-bird4_routes.sh

Приводим к такому виду:

#!/bin/sh

ISP=eth3
VPN=ppp0
URL0=https://antifilter.download/list/allyouneed.lst
ROUTE=/opt/etc/bird4-routes.list
VPNTXT=/opt/etc/bird4-vpn.txt
VPNLST=/opt/etc/bird4-vpn.list
ISPTXT=/opt/etc/bird4-isp.txt
ISPLST=/opt/etc/bird4-isp.list

#Скачиваем общий список
curl $URL0 | sed 's/^/route /' | sed  's/$/ via "'$VPN'";/' > $ROUTE
#Добавляем вручную добавленные адреса через впн
/opt/root/addip.sh $VPNTXT $VPN $VPNLST
#То же что и выше, но через провайдера
/opt/root/addip.sh $ISPTXT $ISP $ISPLST

/opt/etc/init.d/S04bird1-ipv4 reconfigure

Тут нужно изменить:

ISP - это имя интерфейса провайдера

VPN - это имя интерфейса туннеля

Остальное не трогаем. Файл в переменной VPNTXT /opt/etc/bird4-vpn.txt заполняем, если хотим что-то перенаправить на туннель принудительно.  Файл в переменной ISPTXT /opt/etc/bird4-isp.txt заполняем, если хотим направить что-то через провайдера принудительно. Пример заполнения:

vi /opt/etc/bird4-isp.txt

4pda.ru
speedtest.net
#msstore
88.221.132.9
88.221.132.42
93.184.221.240
  
vi /opt/etc/bird4-vpn.txt
  
antifilter.download

В принципе если вам не хотите скачивать весь список заблокированных доменов, а настроить точечный обход, то удаляете строку curl $URL0 | sed ..., далее просто заполняете файл bird4-vpn.txt теми ресурсами, на которые вы хотите попадать через туннель. Правила заполнения. Каждая запись в новой строке. Знаки # игнорируется, можно ставить комментарии. Так же игнорируются пустые строки. Поддерживается добавление адресов вида 123.123.123.123, а так же и с масками 123.123.123.0/24. Любые записи нужно записывать с первого символа строки, то есть никаких пробелов перед адресом ставить нельзя.

Далее нужно запустить скрипт автообновления, что бы создались необходимые файлы для конфига bird

/opt/etc/cron.daily/add-bird4_routes.sh

Файлы с расширением list этого готовые файлы конфигурации для bird. Эти файлы нужно добавить в конфиг bird

3) Редактируем конфиг bird

vi /opt/etc/bird4.conf

тут нужно секцию protocol static static_routes привести к виду:

protocol static static_routes {
        import all;
        #route 192.168.X.Y/24 via 192.168.A.B;
        include "/opt/etc/bird4-routes.list";
        include "/opt/etc/bird4-vpn.list";
        include "/opt/etc/bird4-isp.list";
}

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

На этом все, осталось перезапустить птичку

/opt/etc/init.d/S04bird1-ipv4 restart

И готово!

Share this post


Link to post
Share on other sites

Сами придумали или у меня взяли основу? Первоисточник тут - http://forums.zyxmon.org/viewtopic.php?f=5&t=5738

Нужно бы мне переделать инструкцию через include. Вместо рестарта bird (reconfigure) лучше посылать SIGHUP.

Отслеживать падение и подъем  VPN туннеля большого смысла нет, если он сам поднимается. Если упал туннель, то маршрутизация к недоступным узлам кривая. Ну и что - они же при падении VPN все равно недоступны.

Share this post


Link to post
Share on other sites

Нет, для меня первоисточником был https://keenetic-gi.ga/2019/01/22/bgp_routing.html

Что можно через инклюд делать это я в мануале по берду углядел.

По поводу оnслеживания впн, тут хорошо, если список не обобщенный. А если он с масками 24, 19 и тд, то часть ресурсов при падении впн просто перестанет открываться, хотя они через провайдера открываются нормально. А тут таблица грохается и маршруты идут просто через провайдера.

Вот про killall -s SIGHUP bird4 спасибо, не знал, что так можно.

Вот скрипт резолвинга доменов изначально был не мой, но в итоге он него осталось всего пара строк)

Ну и к плюсу моего решения можно тупо не скачивать весь список, а добавить только необходимые домены/адреса и будет работать.

Share this post


Link to post
Share on other sites
39 минут назад, DennoN сказал:

Ну и к плюсу моего решения можно тупо не скачивать весь список, а добавить только необходимые домены/адреса и будет работать.

По крону он же у Вас тупо весь читается. По поводу скрипта резолвинга - проверяли, что будет, если в списке несуществующий домен? Это нужно обрабатывать, иначе bird не прочтет конфиг и перестанет работать.

Share this post


Link to post
Share on other sites

Проверяли :)

У меня все ок, строки без адреса не добавляются. Там греп отфильтровывает. Но конкретно эта строка не моя. Изначально скрипт был на форуме, но мне его просто скинули, так что кто автор я не знаю)

dig A +short $line @localhost -p 53 | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' 

Может конечно еще можно как-нибудь изуродовать файл с входными данными, но у меня идеи закончились. Базовую "защиту от дурака" я вроде бы сделал. Ну а если есть желание все поломать, то тут уже никакая защита не поможет 😁

По поводу крона, изначально я для себя сделал не 3 инклюда, а 5. в двух файлах указывал ip адреса для впн и исп, в два другие попадали адреса от доменов + общий от антифильтра.

Но по итогу объединил все в одно. Не стал заморачиваться и решил пусть весь файл сразу читает и не проверяет, что уже было в нем, что нет.

А так-то решение, которое я здесь выложил написано именно для моих нужд. То есть грузим весь список и добавляем пользовательские правила. Если кто-то не захочет грузить весь список, а использовать только свои адреса, то придется чуть чуть подправить крон комментированием строк 

curl $URL0 | sed 's/^/route /' | sed  's/$/ via "'$VPN'";/' > $ROUTE
/opt/root/addip.sh $ISPTXT $ISP $ISPLST

и из конфига bird убрать это

        include "/opt/etc/bird4-routes.list";
        include "/opt/etc/bird4-isp.list";
Edited by DennoN

Share this post


Link to post
Share on other sites

На мой взгляд эффективнее сразу весь файл с доменами обработать с помощью dig (кстати на одно доменное имя может выдавать несколько IP), а потом читать ip, проверять на валидность и добавлять в конфиг.
Проверьте, правильно ли обрабатывается такое доменное имя - `onlainfilm.co`
 

dig A +short onlainfilm.co
pr-suspensions.neuweb.biz.
PR-Suspensions-1630320541.us-east-1.elb.amazonaws.com.
50.19.199.106
34.196.125.115
3.231.242.12
52.87.80.196

 

Share this post


Link to post
Share on other sites
~ # dig A +short onlainfilm.co @localhost -p 53 | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | awk '{print "route "$1"/32 via \"ppp0\";"}'
route 34.196.125.115/32 via "ppp0";
route 3.231.242.12/32 via "ppp0";
route 50.19.199.106/32 via "ppp0";
route 52.87.80.196/32 via "ppp0";
~ # dig A +short 4pda2.ru @localhost -p 53 | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | awk '{print "route "$1"/32 via \"ppp0\";"}'
~ # dig A +short google.com @localhost -p 53 | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | awk '{print "route "$1"/32 via \"ppp0\";"}'
route 108.177.14.139/32 via "ppp0";
route 108.177.14.102/32 via "ppp0";
route 108.177.14.101/32 via "ppp0";
route 108.177.14.138/32 via "ppp0";
route 108.177.14.100/32 via "ppp0";
route 108.177.14.113/32 via "ppp0";
~ # 

Вообще я внес кое какие правки. Оказалось, что часть IP адресов (если после адреса стоит #комментарий) попадает в резолвинг. Ничего не происходит, они просто не отвечают, как несуществующий домен, так же как и 4pda2.ru в моем примере.

Тут я свои старые сообщения редактировать не могу, так что создал "проект" на гитхабе

https://github.com/DennoN-RUS/Bird4Static

сам файл с правками https://github.com/DennoN-RUS/Bird4Static/blob/master/root/addip.sh

Так же упрощается установка самих скриптов.

opkg install git bird4 cron
git clone https://github.com/DennoN-RUS/Bird4Static.git
chmod +x Bird4Static/root/addip.sh
chmod +x Bird4Static/etc/ndm/ifstatechanged.d/010-add_antizapret_route.sh
chmod +x Bird4Static/etc/cron.daily/add-bird4_routes.sh
cp -rf Bird4Static/etc/ /opt/
cp -rf Bird4Static/root/ /opt/

Остается править конфиги и можно запускать.

Edited by DennoN

Share this post


Link to post
Share on other sites

Как по вашему, что произойдет если DNS сервер не будет доступен на момент старта?

Для эмуляции можно сделать такую правку (сделать ссылку на несуществующий сервер) и перезагрузить роутер. У "автора" скриптов такие моменты были предусмотрены.

until ADDRS=$(dig +short google.com @1.2.3.4 -p 5553) && [ -n "$ADDRS" ] > /dev/null 2>&1; do sleep 5; done

Так добавлять правило (и удалять), тоже не совсем правильно. Что будет если данный скрипт выполнить два и более раз?

ip rule add table 1000

 

Share this post


Link to post
Share on other sites

в файле addip.sh есть строка с ожиданием резолва google.com

until ADDRS=$(dig +short google.com @localhost -p 53) && [ -n "$ADDRS" ] > /dev/null 2>&1; do sleep 5; done

По поводу правила. Вы про какой скрипт? Если тот, который мониторит впн соединение, то там есть проверка на то, что бы не добавлять правило, если оно уже есть...

На гитхабе обновление https://github.com/DennoN-RUS/Bird4Static

сделал автоинсталяшку (кривую немного), добавил описание.

Share this post


Link to post
Share on other sites
33 minutes ago, DennoN said:

в файле addip.sh есть строка с ожиданием резолва google.com


until ADDRS=$(dig +short google.com @localhost -p 53) && [ -n "$ADDRS" ] > /dev/null 2>&1; do sleep 5; done

По поводу правила. Вы про какой скрипт? Если тот, который мониторит впн соединение, то там есть проверка на то, что бы не добавлять правило, если оно уже есть...

На гитхабе обновление https://github.com/DennoN-RUS/Bird4Static

сделал автоинсталяшку (кривую немного), добавил описание.

Строка ожидания есть. Но вы читаете через слово. Я Вам предложил проэмулировать ситуацию с недоступным на момент старта роутера ДНС сервера. Что произойдет с этим ожиданием, если ДНС сервер вообще не доступен? Что произойдет с загрузкой скриптов из Entware в такой ситуации?

Надо просто запуск скрипта делать в асинхронном режиме, а у Вас в синхронном.

Share this post


Link to post
Share on other sites
38 minutes ago, DennoN said:

Если тот, который мониторит впн соединение, то там есть проверка на то, что бы не добавлять правило, если оно уже есть

Нету такой проверки.

Share this post


Link to post
Share on other sites
vi /opt/etc/ndm/ifstatechanged.d/010-add_antizapret_route.sh

сам скрипт:

#!/bin/sh

[ "$1" == "hook" ] || exit
[ "$id" == "L2TP0" ] || exit

case ${change}-${connected}-${link}-${up} in
    link-no-down-down)
        ip rule del table 1000
        /opt/etc/init.d/S04bird1-ipv4 stop
    ;;
    link-yes-up-up)
#НИЖЕ ИДЕТ ПРОВЕРКА
        if [ -z "$(ip rule | grep 1000)" ]; then
                ip rule add table 1000
        fi
        /opt/etc/init.d/S04bird1-ipv4 start
    ;;
esac

 

по поводу резолва, отредактировал скрипт

#!/bin/sh

cut_local() {
        grep -vE 'localhost|^0\.|^127\.|^10\.|^172\.16\.|^192\.168\.|^::|^fc..:|^fd..:|^fe..:'
}

cat $1 | awk '{print $1}' | awk '/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/' | sed 's/^/route /' | sed  's/$/\/32 via "'$2'";/' >> $3
cat $1 | awk '{print $1}' | awk '/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\/[0-9]{1,2}$/' | sed 's/^/route /' | sed  's/$/ via "'$2'";/' >> $3
echo 1
until ADDRS=$(dig +short google.com @localhost -p 5533) && [ -n "$ADDRS" ] > /dev/null 2>&1; do sleep 5; done
echo 2
....

запустил скрипт /opt/etc/cron.daily/add-bird4_routes.sh

скрипт вывел цифру 1 и завис. Ждал 5 минут. Потом открыл вторую сессию ssh, отредактировал dnsmasq и повесил его на порт 5533, перезапустил днс и скрипт, который висел все это время вывел цифру 2

Да и сам скрипт резолва изначально запускается по крону в 4 ночи. Так что он не должен выполняться при запуске роутера. Сейчас добавил его в скрипт, который запускается, когда ВПН поднялся, но это тоже происходит не сразу после запуска роутера.

 

Edited by DennoN

Share this post


Link to post
Share on other sites
19 часов назад, avn сказал:

 У "автора" скриптов такие моменты были предусмотрены.

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

Говорю огромное спасибо, за идею чтения файла построчно и резолвинга каждой строки. Сам бы с нуля я долго бы мучался с реализацией.

Share this post


Link to post
Share on other sites
10 hours ago, DennoN said:

ip rule add table 1000

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

ip rule add table 1000 priority 2150

 

ip rule | grep 1000

Найдет и таблицу 100010 и 11000, так что не совсем красиво.

 

10 hours ago, DennoN said:

Так что он не должен выполняться при запуске роутера

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

https://unix.stackexchange.com/questions/86247/what-does-ampersand-mean-at-the-end-of-a-shell-script-line

 

11 hours ago, DennoN said:

cat $1 | awk '{print $1}' | awk '/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/' | sed 's/^/route /' | sed 's/$/\/32 via "'$2'";/' >> $3 cat $1 | awk '{print $1}' | awk '/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\/[0-9]{1,2}$/' | sed 's/^/route /' | sed 's/$/ via "'$2'";/' >> $3

Можно заменить на такое:

cat $1 | grep -Eo '^([0-9]{1,3}\.){3}[0-9]{1,3}($|/[0-9]{1,2}$)' | sed 's/^/route /' | sed  's/$/\/32 via "'$2'";/' >> $3

Но c ограничениями, строка должна заканчиваться на \n, не должно быть пробелов перед и после ip. Но и в Ваших скриптах они тоже есть.

Share this post


Link to post
Share on other sites
44 минуты назад, avn сказал:

ip rule add table 1000 priority 2150

Ага, отличная идея. Понял, переправлю.

А по поводу грепа, в принципе одно и тоже получается. В моем варианте я еще пробовал предусмотрел момент, что будут писать 88.42.12.32 #описание что за адрес

Поэтому добавил awk '{print $1}' перед всем этим безобразием. А сам запрос можно сократить, до '^([0-9]{1,3}\.){3}[0-9]{1,3}($|/[0-9]{1,2}$)'

Согласен.

Share this post


Link to post
Share on other sites

Попытался предотвратить маршрутизацию в тоннель по образцу стартового поста - route 88.99.95.180/32 via "eth3"; - но ничего хорошего из этого не вышло.

Tracert с компьютера выдал такое:

Трассировка маршрута к wikimapia.org [88.99.95.180]
с максимальным числом прыжков 30:

  1    <1 мс    <1 мс    <1 мс  KEENETIC_GIGA [192.168.1.1]
  2  broadband-37-110-ab-cd.ip.moscow.rt.ru [37.110.ab.cd]  сообщает: Заданный узел недоступен.

Тогда я ещё раз посмотрел на определение eth3 в ifconfig opkg, там у меня написано что-то такое:

inet addr:37.110.ab.cd  Bcast:37.110.71.255  Mask:255.255.248.0

- и заменил в route eth3 на этот самый Bcast. С такой правкой заработало. Но как-то оно неаккуратненько адреса писать, они у меня всё-таки динамические. Неужели иначе не выйдет?

Edited by флегматик

Share this post


Link to post
Share on other sites

Добрый, подскажите, \etc\ndm\ifstatechanged.d\010-add_antizapret_route.sh не добавляет таблицу в правила. 

ip rule add table 1000 priority 2150

А вручную эта команда отработала и всё поднялось.

И такой вопрос \etc\ndm\ifstatechanged.d\ этой папки не не было изначально, это нормально?

Share this post


Link to post
Share on other sites
12 минуты назад, Сергей «Solaris» Сидоров сказал:

Добрый, подскажите, \etc\ndm\ifstatechanged.d\010-add_antizapret_route.sh не добавляет таблицу в правила. 


ip rule add table 1000 priority 2150

А вручную эта команда отработала и всё поднялось.

И такой вопрос \etc\ndm\ifstatechanged.d\ этой папки не не было изначально, это нормально?

Должно быть

/opt/etc/ndm/ifstatechanged.d
  • Thanks 1

Share this post


Link to post
Share on other sites
2 часа назад, r13 сказал:

Должно быть


/opt/etc/ndm/ifstatechanged.d

Хм... странно. Каталога opt нет, все etc, root, bin и тп лежат в корне. Сразу так установилось.

Сейчас в скриптах пути поправлю!

Edited by Сергей «Solaris» Сидоров

Share this post


Link to post
Share on other sites
9 минут назад, Сергей «Solaris» Сидоров сказал:

Хм... странно. Каталога opt нет, все etc, root, bin и тп лежат в корне. Сразу так установилось.

Сейчас в скриптах пути поправлю!

Ваша флешка с установленной entware при включении opkg монтируется в /opt

Share this post


Link to post
Share on other sites
1 минуту назад, r13 сказал:

Ваша флешка с установленной entware при включении opkg монтируется в /opt

Всё верно. Тогда вопрос остается открытым.

Share this post


Link to post
Share on other sites

Добрый день всем, вообщем скрипт работает как часы, только вот система route на интерфейс основного интернета не работает от слова совсем. тупо перестают идти пакеты... и единсвенный выход из положения это удалять подсети который пошли через vpn.

Пытался доработать скрипт путем добавления дополнительного файла фильтрации белых ip адресов, но это не работает от слова совсем.

#!/bin/sh

cut_local() {
	grep -vE 'localhost|^0\.|^127\.|^10\.|^172\.16\.|^192\.168\.|^::|^fc..:|^fd..:|^fe..:'
}

cat $1 | awk '{print $1}' | awk '/^([0-9]{1,3}\.){3}[0-9]{1,3}$/' | awk -F. -v OFS=. 'NF--' | sed -i '/$1/d' $2
cat $1 | awk '{print $1}' | awk '/^([0-9]{1,3}\.){3}[0-9]{1,3}\/[0-9]{1,2}$/' | awk -F. -v OFS=. 'NF--' | sed -i '/$1/d' $2

until ADDRS=$(dig +short google.com @localhost -p 53) && [ -n "$ADDRS" ] > /dev/null 2>&1; do sleep 5; done

echo "$(cat $1 | awk '{print $1}' | awk '!/^([0-9]{1,3}\.){3}[0-9]{1,3}/ && !/^#/')" | {
	while IFS= read -r line; do 
		ips="`dig A +short $line @localhost -p 53 | awk '/^([0-9]{1,3}\.){3}[0-9]{1,3}$/' | cut_local | awk -F. -v OFS=. 'NF--'`"
		echo "$ips"
		sed -i "/$ips/d" $2
	done
}

Может будет вариант посмотреть что сделал не так... т.к. убил более 2-ух суток и ничего дельного у меня не получилось

Просто по команде echo я понимаю что ip адреса приходят команде sed для дальнейшего удаления из общего списка.

Но вот команда sed удаляет вместо ip адреса символ $ips

Share this post


Link to post
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...