Jump to content

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


Recommended Posts

  • 2 weeks later...

для bird4static добавил управление в ext-ui

после установки ext-ui добавить файл

/opt/share/www/ext-ui/addons/editlist.php 

со следующим содержимым:

Скрытый текст

 

<?php

// configuration
$url = 'http://ip.of.your.router:88/ext-ui/addons/editlist.php';
$uservpn = '/opt/root/Bird4Static/lists/user-vpn.list';
$uservpn1 = '/opt/root/Bird4Static/lists/user-vpn1.list';
$uservpn2 = '/opt/root/Bird4Static/lists/user-vpn2.list';
$userisp = '/opt/root/Bird4Static/lists/user-isp.list';

// check if form has been submitted
if (isset($_POST['vpn-text']))
{
    // save the text contents
    file_put_contents($uservpn, $_POST['vpn-text']);

    // redirect to form again
    header(sprintf('Location: %s', $url));
    printf('<a href="%s">Moved</a>.', htmlspecialchars($url));
    exit();
}

if (isset($_POST['vpn-text1']))
{
    // save the text contents
    file_put_contents($uservpn1, $_POST['vpn-text1']);

    // redirect to form again
    header(sprintf('Location: %s', $url));
    printf('<a href="%s">Moved</a>.', htmlspecialchars($url));
    exit();
}

if (isset($_POST['vpn-text2']))
{
    // save the text contents
    file_put_contents($uservpn2, $_POST['vpn-text2']);

    // redirect to form again
    header(sprintf('Location: %s', $url));
    printf('<a href="%s">Moved</a>.', htmlspecialchars($url));
    exit();
}


if (isset($_POST['isp-text']))
{
    // save the text contents
    file_put_contents($userisp, $_POST['isp-text']);

    // redirect to form again
    header(sprintf('Location: %s', $url));
    printf('<a href="%s">Moved</a>.', htmlspecialchars($url));
    exit();
}


// read the textfile
$text = file_get_contents($uservpn);
$text1 = file_get_contents($uservpn1);
$text2 = file_get_contents($uservpn2);
$textisp = file_get_contents($userisp);

?>

<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- HTML form0 -->
<form id="selector" action="" method="post">
<input type="button" id="vpn" name="vpn" onclick="document.getElementById('uservpn').style.display='block'; document.getElementById('uservpn1').style.display='none'; document.getElementById('uservpn2').style.display='none'; document.getElementById('userisp').style.display='none'; return false;" value="user-vpn.list"/>
<input type="button" id="vpn1" name="vpn1" onclick="document.getElementById('uservpn1').style.display='block'; document.getElementById('uservpn').style.display='none'; document.getElementById('uservpn2').style.display='none'; document.getElementById('userisp').style.display='none'; return false;" value="user-vpn1.list"/>
<input type="button" id="vpn2" name="vpn2" onclick="document.getElementById('uservpn2').style.display='block'; document.getElementById('uservpn').style.display='none'; document.getElementById('uservpn1').style.display='none'; document.getElementById('userisp').style.display='none'; return false;" value="user-vpn2.list"/>
<input type="button" id="second" name="second" onclick="document.getElementById('userisp').style.display='block'; document.getElementById('uservpn').style.display='none'; document.getElementById('uservpn1').style.display='none'; document.getElementById('uservpn2').style.display='none'; return false;" value="user-isp.list"/>
</form>

<!-- HTML form1 -->
<div id="uservpn" style="display:none;">
<form id="vpn" action="" method="post" onsubmit="document.getElementById('uservpn').style.display='none'; return true;">
<legend>VPN list</legend>
<textarea name="vpn-text" style="width:100%; height:30%;"><?php echo htmlspecialchars($text); ?></textarea>
<input type="submit" value="Save&close"/>
<input type="reset" value="Reset changes"/>
</form>
</div>
<!-- HTML form1 -->
<div id="uservpn1" style="display:none;">
<form id="vpn1" action="" method="post" onsubmit="document.getElementById('uservpn1').style.display='none'; return true;">
<legend>VPN1 list</legend>
<textarea name="vpn-text1" style="width:100%; height:30%;"><?php echo htmlspecialchars($text1); ?></textarea>
<input type="submit" value="Save&close"/>
<input type="reset" value="Reset changes"/>
</form>
</div>

<div id="uservpn2" style="display:none;">
<form id="vpn2" action="" method="post" onsubmit="document.getElementById('uservpn2').style.display='none'; return true;">
<legend>VPN2 list</legend>
<textarea name="vpn-text2" style="width:100%; height:30%;"><?php echo htmlspecialchars($text2); ?></textarea>
<input type="submit" value="Save&close"/>
<input type="reset" value="Reset changes"/>
</form>
</div>

<div id="userisp" style="display:none;">
<form id="isp" action="" method="post" onsubmit="document.getElementById('userisp').style.display='none'; return true;">
<legend>ISP list</legend>
<textarea name="isp-text" style="width:100%; height:30%;"><?php echo htmlspecialchars($textisp); ?></textarea>
<input type="submit" value="Save&close"/>
<input type="reset" value="Reset changes"/>
</form>
</div>

<form action="runbird4static.php">
    <input type="submit" value="Restart service">
</form>

 

 

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

/opt/share/www/ext-ui/addons/runbird4static.php

Скрытый текст

 

<?php
shell_exec("/opt/root/Bird4Static/scripts/add-bird4_routes.sh");
header('Location: http://192.168.33.1:88/ext-ui/addons/editlist.php');
?>

файл /opt/share/www/ext-ui/index.html отредактировать, добавив после строки

<meta charset="utf-8" />

свою строку обеспечивающую адаптивное отображение на мобильных устройствах:

<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"/>

 

а перед этой строкой:

<a href="addons/info/index.php" target="myframe" title="System Health and Information"><img src="addons/img/btn/linfo.png"></a>

вставить свою строку с дополнительной кнопкой:

<a href="addons/editlist.php" target="myframe" title="Edit vpn list"><img src="addons/img/btn/vpn.png"></a>

ну или в любое удобное место в том же списке.

кроме этого нужно положить какую-нибудь иконку размером 48х48 по адресу /opt/share/www/ext-ui/addons/img/btn/vpn.png например такую: vpn_PNG48.png.297e126b340ab3cc1678f532d054a7ad.png

на выходе получается такая страница:

image.png.e29449e6c39573813a1879dc13369a76.png

нажатие на кнопку в верхнем ряду открывает соответствующий лист

нажатие на кнопку Save&close сохраняет лист и скрывает его с глаз долой.

Кнопка Restart service перезапускает сервис bird4static

image.png.363536ad315eba3cb6d9c6bed7426370.png

 

p.s. я ненастоящий сварщик, я маску на стройке нашёл, так что замечания или улучшения горячо приветствуются. 

 

Edited by nnm
  • Upvote 1
Link to comment
Share on other sites

2 часа назад, alexunderboots сказал:

Периодически отваливается www.themoviedb.org , уходит на 127.0.0.1, при этом themoviedb.org нормальный

Это проблема DNS - я решаю с помощью AdGuard Home - для themoviedb следует использовать dns сервер quad9, остальные общеизвестные  возвращают 127.0.0.1. К топику все это не относится!

adg.png

Link to comment
Share on other sites

9 часов назад, zyxmon сказал:

Это проблема DNS - я решаю с помощью AdGuard Home - для themoviedb следует использовать dns сервер quad9, остальные общеизвестные  возвращают 127.0.0.1. К топику все это не относится!

adg.png

отправил www. на 9.9 через интернет-фильтр в wg-туннель - вроде работает

Link to comment
Share on other sites

  • 2 weeks later...

инста на некоторых провайдерах не работает, не уходит в туннель 10.66.66.1

 

starting traceroute to instagram.com...
traceroute to instagram.com (31.13.81.174), 30 hops maximum, 84 byte packets.
1 ---------------.ertelecom.ru (188.186.75.252) 0.845 ms 0.851 ms 0.771 ms
2 lag-2-435.bgw01.tmn.ertelecom.ru (109.194.168.18) 3.136 ms 2.737 ms 2.700 ms
3 ertelekom-ic-335559-mow-b4.ip.twelve99-cust.net (62.115.12.110) 25.797 ms 26.277 ms 27.224 ms
4 mow-b4-link.ip.twelve99.net (62.115.12.109) 32.073 ms 30.463 ms 30.440 ms
5 mow-b8-link.ip.twelve99.net (62.115.135.107) 25.191 ms 26.886 ms 26.761 ms
6 mow-b6-link.ip.twelve99.net (62.115.135.95) 26.440 ms 26.599 ms 25.743 ms
7 s-bb1-link.ip.twelve99.net (62.115.143.24) 43.388 ms 43.934 ms 43.374 ms
8 hbg-bb3-link.ip.twelve99.net (62.115.134.94) 62.344 ms 62.315 ms 62.225 ms
9 62.115.120.69 (62.115.120.69) 73.534 ms 72.151 ms 72.307 ms
10 facebook-ic339271-war-b3.ip.twelve99-cust.net (213.248.75.71) 56.666 ms 56.636 ms 57.606 ms
11 * * *
12 * * *
13 157.240.38.181 (157.240.38.181) 61.258 ms 62.922 ms 60.832 ms
14 31.13.81.174 (31.13.81.174) 60.734 ms 60.613 ms 60.935 ms
Link to comment
Share on other sites

  • 2 weeks later...

Думаю сделать что бы скрипт парсил в списках от пользователя номера автономок (AS*), узнавал адреса, и добавлял в маршруты

Но есть вопрос, как часто эти AS могут изменяться? допустим я получаю вывод командой

whois -h whois.radb.net -- "-i origin AS32934" | grep ^route: | awk "{print \$2}"

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

данная логика усложнит скрипт, но ускорит наполение списков, если вносим туда AS. Так же в случае, если данные по AS поменялись, то скрипт об этом не узнает - нужно будет ручное удаление из определенного файла и тогда скрипт не найдя инфы о автономке запросит данные снова.

Стоит заморачиваться или сделать просто логику типа: видим AS - всегда спрашиваем через whois о ней

Edited by DennoN
  • Upvote 1
Link to comment
Share on other sites

9 минут назад, DennoN сказал:

Стоит заморачиваться или сделать просто логику типа: видим AS - всегда спрашиваем через whois о ней

Думаю можно пойти по простому пути. 

Link to comment
Share on other sites

Обновление!

Версия 3.3
Переделана команда в скрипте установки, которая выводит список интерфейсов и их адресов. Теперь стала более универсальной
Добавлен скрипт для удаления.
Добавлена поддержка AS номеров в пользовательских списках

Указывать AS нужно в виде AS13414, регистр важен(!), AS должно быть большими буквами. Одна строка - один номер AS(!). Поддерживаются комментарии после номера через пробел, скрипт на них ругаться не будет. Запросы идут через сторонний сервер, который может долго отвечать, так что если будет указано много AS в списках, то скрипт может отрабатывать сильно дольше

git clone -b v3.3 https://github.com/DennoN-RUS/Bird4Static.git

  • Thanks 3
  • Upvote 1
Link to comment
Share on other sites

В 07.09.2022 в 22:20, mobile2004 сказал:

а не лучше ли списки грузить в RAM по пути

/tmp/

всё-таки не все же разворачивают OPKG на USB

а зачем? bird будет ругаться, после перезагрузки роутера на отсуствующие конфиги. + у меня при скачивании списков и их наполнения сравниваются 2 результата (прошлый и текущий) и в файл вносятся только изменения, а не перезатирается весь файл целиком). Только если места мало, но вроде списки не так много едят (все 7 файлов весят чуть меньше 700кбайт)

Edited by DennoN
Link to comment
Share on other sites

Подскажите, пожалуйста, а как правильно обновится? Пользуюсь уже давно, с начала марта. Запустил по новой "git clone", но в ответ выдает "fatal: destination path 'Bird4Static' already exists and is not an empty directory"

Link to comment
Share on other sites

При выполнении скрипта выдает такую ошибку:

 

Скрытый текст

Installing iprange (1.0.4-1) to root...

Installing whois (5.5.10-1) to root...

Configuring bird1-ipv4.

Configuring libatomic.

Configuring cron.

Configuring libnghttp2.

Configuring curl.

Configuring libuv.

Configuring bind-libs.

Configuring bind-dig.

Collected errors:

* verify_pkg_installable: Only have 0kb available on filesystem /opt, pkg iprange needs 29

* opkg_install_cmd: Cannot install package iprange.

* verify_pkg_installable: Only have 0kb available on filesystem /opt, pkg whois needs 29

* opkg_install_cmd: Cannot install package whois.

 

Ставлю во внутреннюю память. Из 27 Мбайт занято всего 19.

В чем может быть проблема?

 

Link to comment
Share on other sites

3 минуты назад, DennoN сказал:

@PASPARTU в гите описан наиболее вероятный вариант решения

  Скрыть содержимое

421877687_2022-12-02_12-45-321.png.f3eb70d2d8dc3d89f7bf9191c62991a3.png

 

Даа нашел, поправил и вроде заработало,узнать на какой домен кинетик ломиться ибо ошибка

 

Cloud::Agent: can not connect to the cloud server.

Edited by PASPARTU
Link to comment
Share on other sites

13 минуты назад, DennoN сказал:

@PASPARTU в гите описан наиболее вероятный вариант решения

  Показать содержимое

421877687_2022-12-02_12-45-321.png.f3eb70d2d8dc3d89f7bf9191c62991a3.png

 

ISP list по умолчанию должен содержать такой список, добавьте пожалуйста.

 

keenetic.com
docs.keenetic.com
88.198.177.100
167.233.7.36
167.233.6.242
167.233.7.36
88.198.177.100
167.233.6.242
ndss.keenetic.ndmsystems.com

Link to comment
Share on other sites

keenetic.com
docs.keenetic.com

отдают одинаковые адреса

167.233.7.36
167.233.6.242
88.198.177.100

так что добавить нужно только keenetic.com как вариант, и он уже добавлен

ndss.keenetic.ndmsystems.com отдает адреса

88.198.177.100 тот же, что и в keenetic.com
91.142.81.244 в списках через впн он не участвует
92.63.195.7 в списках через впн он не участвует
167.233.7.36 тот же, что и в keenetic.com

Да и пользовательские списки сделаны как пример, что бы люди сами добавляли что-то свое. Тут наоборот просили давно keenetic.com исключить.

Edited by DennoN
Link to comment
Share on other sites

2 часа назад, DennoN сказал:

keenetic.com
docs.keenetic.com

отдают одинаковые адреса

167.233.7.36
167.233.6.242
88.198.177.100

так что добавить нужно только keenetic.com как вариант, и он уже добавлен

ndss.keenetic.ndmsystems.com отдает адреса

88.198.177.100 тот же, что и в keenetic.com
91.142.81.244 в списках через впн он не участвует
92.63.195.7 в списках через впн он не участвует
167.233.7.36 тот же, что и в keenetic.com

Да и пользовательские списки сделаны как пример, что бы люди сами добавляли что-то свое. Тут наоборот просили давно keenetic.com исключить.

у меня docs.keenetic.com не открывался пока не внес его в список.

Link to comment
Share on other sites

В 01.12.2022 в 13:11, DennoN сказал:

@inolant

 df -h

в командной строке

надо посмотреть сколько у тебя сейчас места в /opt

Действительно не было свободной памяти. Не стал разбираться в причинах, поставил все заново на USB flash. Вроде все работает.

Еще один дилетантский вопрос:

Как сделать, чтобы speedtest и сервисы по определению ip не заворачивались в VPN. 

Как я понял, 2ip по умолчанию открывается через VPN, но у меня все подобные сервисы грузятся через VPN.

Link to comment
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...