Перейти к содержанию

Рекомендуемые сообщения

  • 1 месяц спустя...
  • Ответов 630
  • Создана
  • Последний ответ

Топ авторов темы

Опубликовано (изменено)

Этот пост о старой версии, сейчас (25.03.2022) это уже не актуально, так как используются новые версии скриптов, и то что ниже не подходит к актуальной версии

  Показать контент

 

Изменено пользователем DennoN
Опубликовано

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

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

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

Опубликовано

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

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

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

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

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

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

Опубликовано
  В 21.05.2020 в 19:17, DennoN сказал:

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

Показать  

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

Опубликовано (изменено)

Проверяли :)

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

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";
Изменено пользователем DennoN
Опубликовано

На мой взгляд эффективнее сразу весь файл с доменами обработать с помощью 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

 

Опубликовано (изменено)
~ # 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/

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

Изменено пользователем DennoN
Опубликовано

Как по вашему, что произойдет если 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

 

Опубликовано

в файле 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

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

Опубликовано
  В 28.05.2020 в 07:44, DennoN сказал:

в файле 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 в такой ситуации?

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

Опубликовано
  В 28.05.2020 в 07:44, DennoN сказал:

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

Показать  

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

Опубликовано (изменено)
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 ночи. Так что он не должен выполняться при запуске роутера. Сейчас добавил его в скрипт, который запускается, когда ВПН поднялся, но это тоже происходит не сразу после запуска роутера.

 

Изменено пользователем DennoN
Опубликовано
  В 27.05.2020 в 21:13, avn сказал:

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

Показать  

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

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

Опубликовано
  В 28.05.2020 в 08:45, DennoN сказал:

ip rule add table 1000

Показать  

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

ip rule add table 1000 priority 2150

 

ip rule | grep 1000

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

 

  В 28.05.2020 в 08:45, DennoN сказал:

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

Показать  

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

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

 

  В 28.05.2020 в 08:45, DennoN сказал:

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. Но и в Ваших скриптах они тоже есть.

Опубликовано
  В 28.05.2020 в 19:55, 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}$)'

Согласен.

  • 4 недели спустя...
Опубликовано (изменено)

Попытался предотвратить маршрутизацию в тоннель по образцу стартового поста - 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. С такой правкой заработало. Но как-то оно неаккуратненько адреса писать, они у меня всё-таки динамические. Неужели иначе не выйдет?

Изменено пользователем флегматик
  • 3 недели спустя...
Опубликовано

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

ip rule add table 1000 priority 2150

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

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

Опубликовано
  В 10.07.2020 в 10:26, Сергей «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
Опубликовано (изменено)
  В 10.07.2020 в 10:39, r13 сказал:

Должно быть

/opt/etc/ndm/ifstatechanged.d
Показать  

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

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

Изменено пользователем Сергей «Solaris» Сидоров
Опубликовано
  В 10.07.2020 в 13:16, Сергей «Solaris» Сидоров сказал:

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

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

Показать  

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

Опубликовано
  В 10.07.2020 в 13:27, r13 сказал:

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

Показать  

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

  • 2 недели спустя...
Опубликовано

Добрый день всем, вообщем скрипт работает как часы, только вот система 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

  • 4 недели спустя...
Опубликовано

@vitalik6243 Лучше разобраться почему не работает перенаправление через основной интернет. Последние версии скриптов лежат тут https://github.com/DennoN-RUS/Bird4Static

там даже автоустановка прикручена.

  • 3 месяца спустя...
Опубликовано

Попробовал на прошивках 3.5.2(.4) использовать полный список https://antifilter.download/list/ip.lst

Полёт нормальный. Работает 😀 Тормозов нет. Соответственно скрипты можно сильно упростить.

  • 4 недели спустя...
Опубликовано

Прелюдию (установку пакетов, настройку pingcheck на vpn интерфейсах, методики проверки конфигов на ошибки и т.п.) опускаю, т.к. это достаточно описано выше.

Реализован следующий алгоритм работы. Есть два VPN интерфейса, ovpn_br1 основной и ovpn_br2 резервный. На IP, прописанные в файле /opt/etc/bird4-us-force.list, трафик идёт через ovpn_br2. На адреса из общего списка ip.lst через основной, если он недоступен, то через резервный. 

1.Создать папку /opt/etc/blacklist

2.Остановить или установить bird, заменить файл конфигурации /opt/etc/bird4.conf следующим

  Показать контент

Создать файл /opt/etc/bird4-us-force.list. Пример ниже, 2ip внесён для проверки работы.

  Показать контент

3.Создать скрипт /opt/etc/init.d/S02bird-table для инициализации таблиц при незапланированных перезагрузках

  Показать контент

4.В папку cron.daily или cron.hourly поместить скрипт (автору ветки респект 👍) парсинга списка ip.lst и выполнить его вручную первый раз

  Показать контент

5.Если всё прошло без ошибок, то можно пользоваться. Только подождать немного, пока bird переварит таблицы 🙂

С одним vpn подключением всё упрощается до примитивности.

Опубликовано

В родительской инструкции указано, что нужна Бета или Драфт прошивка, то есть на Релизе ваш метод работать не будет?

Как продиагностировать работу системы? По инструкции с гитхаба не работает. До этого из проверок сделал следующее: установил OpenVPN, в приоритетах поставил его первым, пооткрывал сайтики, всё работает.

Опубликовано

Диагностика ошибок для моего метода

Открыть сайт 2ip.ru и посмотреть, какой ip показывает. Если с ovpn_br2, то работает. Если нет, искать ошибки.

Всем скриптам естественно должны были быть даны права на выполнение командой "chmod +x".

1.Командой ps | grep bird проверить, запущен ли bird. В выводе будет строка типа "4413 root     52372 S    bird4 -c /opt/etc/bird4.conf". Если не запущен, искать причины. Смотреть в логе ошибки, либо воспользоваться командой "bird4 -p -c /opt/etc/bird4.conf".

2.Командой "ip rule list" убедиться в наличии таблиц с номерами 1001,1002,1003. В выводе будут строки:

30001:  from all lookup 1001
30002:  from all lookup 1002
30003:  from all lookup 1003

Если их нет, ошибка в скрипте /opt/etc/init.d/S02bird-table. Запустить его вручную "sh  /opt/etc/init.d/S02bird-table start" и разобраться в ошибках, если есть.

3.В /opt/etc должны появиться файлы bird4-nl.list, bird4-us.list и созданный в п.2 bird4-us-force.list. В /opt/etc/blacklist файлы ip.lst и md5.txt. Если их нет, то ошибка в скрипте, созданном в п.4

 

 

Опубликовано

Важное дополнение - если на роутере включены ПРИОРИТЕТЫ ПОДКЛЮЧЕНИЙ и настроена ПРИВЯЗКА УСТРОЙСТВ К ПРОФИЛЯМ, то устройство, с которого производится проверка, должно находиться в ОСНОВНОМ ПРОФИЛЕ. Убил на это кучу времени, пока понял. Возможно, что если поиграть настройками дополнительных профилей, то заработает и с ними, но я не стал экспериментировать.

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...

Важная информация

На этом сайте используются файлы cookie. Нажимая "Я принимаю" или продолжая просмотр сайта, вы разрешаете их использование: Политика конфиденциальности.