Jump to content

Выборочный роутинг через VPN туннель


Recommended Posts

  • 4 months later...

Предложение по улучшению скрипта. Сейчас разрешение доменных имен происходит так:

dig A +short $line @localhost -p 53

Т.е., если у вас не принято никаких дополнительных мер, адрес в конце концов будет определяться через днс провайдера, что нехорошо. У меня на роутере настроены DoT и DoH, и вроде все должно быть нормально. Но я обратил внимание, что если запустить скрипт несколько раз подряд, каждый раз количество адресов в списке разное. Вряд ли адреса сайтов меняются несколько раз в течение минуты, т.е. проблема именно в процессе разрешения имен. Обнаружил, что dig v9.17.13 из entware поддерживает dot,doh, и даже dnssec. В итоге изменил строку в скрипте на эту:

dig +short +https $line @8.8.8.8

Теперь скрипт работает стабильно + провайдер точно не вмешается. 

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

В 13.08.2021 в 12:17, comono сказал:

Предложение по улучшению скрипта. Сейчас разрешение доменных имен происходит так:

dig A +short $line @localhost -p 53

Т.е., если у вас не принято никаких дополнительных мер, адрес в конце концов будет определяться через днс провайдера, что нехорошо. У меня на роутере настроены DoT и DoH, и вроде все должно быть нормально. Но я обратил внимание, что если запустить скрипт несколько раз подряд, каждый раз количество адресов в списке разное. Вряд ли адреса сайтов меняются несколько раз в течение минуты, т.е. проблема именно в процессе разрешения имен. Обнаружил, что dig v9.17.13 из entware поддерживает dot,doh, и даже dnssec. В итоге изменил строку в скрипте на эту:

dig +short +https $line @8.8.8.8

Теперь скрипт работает стабильно + провайдер точно не вмешается. 

Достаточно посмотреть файлик /tmp/ndnproxymain.stat (show dns-proxy) и поменять порт 53 на 40500-40507 для TLS и 40508-40515 для HTTPS

 

 

Edited by avn
  • Thanks 1
Link to comment
Share on other sites

  • 3 weeks later...

Пытаюсь использовать последнюю версию скриптов от Ув. avn. Результат такой - из списка в 4 адреса добавляется 1 или 2 всего. Причём с этими добавленными заблоченные страницы открываются. Использую WG. Что я делаю не так? 

Link to comment
Share on other sites

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

Результат такой - из списка в 4 адреса добавляется 1 или 2 всего.

Если у вас используется dns-over-tls или dns-over-https, обратите внимание на предыдущий вашему пост

  • Thanks 1
Link to comment
Share on other sites

3 часа назад, comono сказал:

Если у вас используется dns-over-tls или dns-over-https, обратите внимание на предыдущий вашему пост

Спасибо большое,что так оперативно откликнулись. dns-over-tls или dns-over-https не использую. Попробовал Вашу корректировку. Стало по лучше в том смысле, что оригинальный скрипт подзависал на, порядка, 45 секунд при запуске на списке из ... аж 4-х адресов. После корректировки - пара секунд, не более. Но беда такая - в списке остаётся ТОЛЬКО последняя строчка. Просто для некоторых выводиться 2 - 3 IP-шника... Т. е. самую малость подисправить - да не знаю, как... Кстати - если в конце списка ввести пустую строку - список пустой. Т. е. точно сохраняет только последнюю. И ещё - не подскажите - как у Вас dns-over-tls или dns-over-https настроен?

Link to comment
Share on other sites

21 час назад, keva сказал:

Но беда такая - в списке остаётся ТОЛЬКО последняя строчка. Просто для некоторых выводиться 2 - 3 IP-шника... Т. е. самую малость подисправить - да не знаю, как... Кстати - если в конце списка ввести пустую строку - список пустой. Т. е. точно сохраняет только последнюю.

Итак, у вас есть файл со списком заблокированный сайтов. Вы запускаете скрипт, смотрите таблицу маршрутизации и видите только маршруты для последнего сайта из файла. Я правильно понял ситуацию? Посмотрел еще раз исходный скрипт. На мой дилетантский взгляд, должно все работать. Могу только предположить, что вы вносили и другие изменения в скрипт.  Например,  строчка

ip route flush table 1000

у вас точно вне цикла while? Если она вдруг оказалась внутри цикла, результат будет таким, как вы описали.

По поводу настроек dns-over-tls или dns-over-https, я не смогу рассказать лучше, чем в help Кинетика

  • Thanks 1
Link to comment
Share on other sites

5 часов назад, comono сказал:

Итак, у вас есть файл со списком заблокированный сайтов. Вы запускаете скрипт, смотрите таблицу маршрутизации и видите только маршруты для последнего сайта из файла. Я правильно понял ситуацию?

Да так и происходит.

5 часов назад, comono сказал:

Например,  строчка

ip route flush table 1000

у вас точно вне цикла while? Если она вдруг оказалась внутри цикла, результат будет таким, как вы описали.

В самом скрипте кроме IP и Вайгуардовского интерфейса вообще ничего не менял. А, ну да, Вашу правку из поста выше внёс. Но без неё вообще подзависал скрипт, как описывал. Скрипт, который на роутере прилагаю...

5 часов назад, comono сказал:

По поводу настроек dns-over-tls или dns-over-https

Хелп Кинетиковский читал, конечно. Просто Спросил про конкретную реализацию у Вас. Ну типа отдельный кэширующий сервер DNS на Кинетике, типа Unbound... , Pi-hole на VPS... Или ещё какие особенности...

unblock_vpn.rar

Edited by keva
Link to comment
Share on other sites

15 часов назад, keva сказал:

Ну типа отдельный кэширующий сервер DNS на Кинетике, типа Unbound... , Pi-hole на VPS... Или ещё какие особенности...

Нет, использую стандартные возможности кинетика, к чему плодить сущности?

По поводу вашего скрипта. С ним все нормально, я даже запустил его для уверенности (правда, не на роутере, а на линуксовой машине, но не суть). Даже не знаю, к чему еще прицепиться. Какие записи появляются в логе кинетика после запуска скрипта?  И еще, а файл со списком сайтов вы создавали в редакторе под Windows? Если да, то возможно в этом  причина вашей проблемы. Установите на роутер текстовый редактор, например, nano, и создайте файл в нем. Или используйте редактор под windows, который умеет текстовые файлы в unix-формате 

  • Thanks 2
Link to comment
Share on other sites

4 часа назад, comono сказал:

Нет, использую стандартные возможности кинетика, к чему плодить сущности?

По поводу вашего скрипта. С ним все нормально, я даже запустил его для уверенности (правда, не на роутере, а на линуксовой машине, но не суть). Даже не знаю, к чему еще прицепиться. Какие записи появляются в логе кинетика после запуска скрипта?  И еще, а файл со списком сайтов вы создавали в редакторе под Windows? Если да, то возможно в этом  причина вашей проблемы. Установите на роутер текстовый редактор, например, nano, и создайте файл в нем. Или используйте редактор под windows, который умеет текстовые файлы в unix-формате 

Да, дело оказалось именно в UNIX EOL. Это я жестоко протормозил. Спасибо Вам БОЛЬШОЕ, что так настойчиво наставили на путь истинный!

Link to comment
Share on other sites

  • 2 weeks later...

Приветствую.

Я бы хотел попросить оказать содействие в доработке скрипта - условно говоря настроить резервирование;

если сдох один wg, чтобы переключался на другой.

p.s. и вопрос на засыпку: keenetic же не сможет иметь 2 одинаковых ip адреса в wg туннелях? (wg серверы на однотипных vps)

Link to comment
Share on other sites

В 22.03.2021 в 01:22, avn сказал:

Обновленные версии скриптов

В вашем случае vpn клиенты роутера работают через данный обход? С древними версиями скриптов работало всё, после переустановки entware никак завести не могу.

Записи добавляются, трасировка на роутера идёт нормально. А вот впн клиенты по прежнему идут "по старинке". Исходя из предыдущих сообщений (забылось уже как эта поправка родилась) ставил:

ip rule add iif br0 table 1000 priority 1776

вместо 1777.

Не помогло(

 

Link to comment
Share on other sites

Всем привет!

Подскажите, пожалуйста, а есть ли подобное решение для ipv6-адресов? 

Т.е. вносим /opt/root/vpnsitelist.txt, скрипт резолвит его ipv6 адрес и создает маршрут до vpn.

 

 

Link to comment
Share on other sites

6 часов назад, Zeight сказал:

Всем привет!

Подскажите, пожалуйста, а есть ли подобное решение для ipv6-адресов? 

Т.е. вносим /opt/root/vpnsitelist.txt, скрипт резолвит его ipv6 адрес и создает маршрут до vpn.

 

 

Думаю, по аналогии можно сделать:

unblock_vpn.sh

Проверить не могу,- Wireguard не поддерживает ipv6. @Le ecureuil Когда уже будет поддерживать?

Edited by avn
Link to comment
Share on other sites

  • 2 months later...
1 час назад, torquemada163 сказал:

Всем привет! А как вы установили ndmq в систему? У меня в Peak его нет. opkg install ndmq не находит такой пакет...

bin.entware.net/aarch64-k3.10/keenetic/archive/ndmq_1.0.2-7_aarch64-3.10_kn.ipk

хорошо видно что он пока лежит в /keenetic/archive/

Link to comment
Share on other sites

1 час назад, torquemada163 сказал:

А его можно оттуда поставить как-то? Или пока он в релиз не выйдет - никак?

Предположу, archive - в данном случае означает, что выпуска не будет...

  • Y'r wrong 1
Link to comment
Share on other sites

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

Предположу, archive - в данном случае означает, что выпуска не будет...

Хм.... А есть какой-то способ узнать id интерфейса без ndmq? Я, конечно, был уверен, что единственный интерфейс WireGuard будет называться Wireguard0 и это захардкодил... Но так себе решение для гибкости, хотелось бы программно его получать.

Link to comment
Share on other sites

Только что, torquemada163 сказал:

Хм.... А есть какой-то способ узнать id интерфейса без ndmq? Я, конечно, был уверен, что единственный интерфейс WireGuard будет называться Wireguard0 и это захардкодил... Но так себе решение для гибкости, хотелось бы программно его получать.

Вот тут ,к сожалению, не подскажу ( очень слабые познания в entware) .

Остается ждать ответа от более опытных...

  • Y'r wrong 1
Link to comment
Share on other sites

20 минут назад, torquemada163 сказал:

Хм.... А есть какой-то способ узнать id интерфейса без ndmq?

Не поможет

http://192.168.1.1/rci/interface?name=Wireguard0
http://192.168.1.1/rci/interface
http://192.168.1.1/rci/show/interface

http://192.168.1.1/rci/show/ip/hotspot/host

 

  • Y'r wrong 1
Link to comment
Share on other sites

15 минут назад, vasek00 сказал:

Не поможет

http://192.168.1.1/rci/interface?name=Wireguard0
http://192.168.1.1/rci/interface
http://192.168.1.1/rci/show/interface

http://192.168.1.1/rci/show/ip/hotspot/host

 

До этого я уже дошел..... 

wget -qO - localhost:79/rci/show/interface

Вполне работает. Только выводит чертову прорву инфы по всем интерфейсам. Пытаюсь понять, как сделать запрос на вывод только интерфейса с типом 

{
  "type": "Wireguard"
}

Кто-то может меня ткнуть в документацию по API и запросам к нему?

Link to comment
Share on other sites

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

Кто-то может меня ткнуть в документацию по API и запросам к нему?

https://www.manualslib.com/manual/1509090/Keenetic-Extra-Kn-1710.html?page=335 

А это не оно? правда под другой кинетик...

http://docs.help.keenetic.com/cli/3.1/en/cli_manual_kn-2510.pdf   // страница 643

 

P.S. Пока ,по неизвестной мне причине, данная документация есть только в англоязычных мануалах.

Edited by krass
  • Y'r wrong 1
Link to comment
Share on other sites

5 минут назад, krass сказал:

https://www.manualslib.com/manual/1509090/Keenetic-Extra-Kn-1710.html?page=335 

А это не оно? правда под другой кинетик...

В общем, то, что можно сделать по API, можно сделать и из CLI. Поэтому можно смотреть документацию по CLI, в принципе. Там я не нашел именно параметров фильтрации при листинге интерфейсов. Полагаю, что придется городить скрипт на Питоне для выборки нужного из всей портянки, что вываливается при команде на показ всех интерфейсов (((

Link to comment
Share on other sites

Только что, torquemada163 сказал:

В общем, то, что можно сделать по API, можно сделать и из CLI. Поэтому можно смотреть документацию по CLI, в принципе. Там я не нашел именно параметров фильтрации при листинге интерфейсов. Полагаю, что придется городить скрипт на Питоне для выборки нужного из всей портянки, что вываливается при команде на показ всех интерфейсов (((

Вроде как, в англоязычных мануалах и по cli больше инфы, почему так -- непонятно...

  • Y'r wrong 1
Link to comment
Share on other sites

Все оказалось просто! Во всяком случае, для одного интерфейса WireGuard ))))))

  1. Устанавливаем jq:
    opkg install jq
  2. Парсим вывод с API:
    wget -qO - localhost:79/rci/show/interface | jq '.[] | select(.type=="Wireguard")' | jq -r '.id'

     

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

  • 1 month later...

Форумчане, подскажите, а у вас работает данный метод обхода блокировки в комплексе с работающим. Adguard home? Именно с AGHome

У меня таблица строится, маршруты списком наполняются а ничего не открывается из списка.

И если не затруднит, можно ссылку на последний коммент с рабочей версией скрипта?

Edited by aleeko
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...